2011-01-11 22 views
45

मैं एक अपलोड स्क्रिप्ट पर काम कर रहा हूं।php :: फ़ाइलों को टीएमपी कब तक रहना है?

यदि कोई उपयोगकर्ता कोई फ़ाइल अपलोड करता है और यह पहले से मौजूद है तो मैं उपयोगकर्ता को चेतावनी देना चाहता हूं (यह सब AJAX के माध्यम से है) और उन्हें बदलने या रद्द करने का विकल्प दें।

फ़ाइल को स्थानांतरित करने के बजाय, मैं उत्सुक था कि अगर मैं फ़ाइल को टीएमपी में छोड़ सकता हूं और AJAX प्रतिक्रिया में उस फ़ाइल के पथ को वापस भेज सकता हूं।

यदि उपयोगकर्ता कहते हैं कि पुरानी फ़ाइल को उस अजाक्स अनुरोध में ओवरराइट करता है तो पथ को वापस php पर पास कर देता है जो फ़ाइल पर काम करता रहता है।

इसके लिए हालांकि काम करने के लिए मुझे पता है कि कितनी देर तक एक फ़ाइल php के tmp निर्देशिका

+0

जब मैं एक फ़ाइल अपलोड टूल करते हैं, मैं पहली बार है, तो फ़ाइल सर्वर पर पहले से ही है की जाँच - अगर यह पहले से मौजूद है, मैं सामने एक संख्या के साथ नए फ़ाइल का नाम बदलें करेंगे फ़ाइल नाम का, इस पर निर्भर करता है कि उनमें से कितने हैं। कोई संघर्ष नहीं, हर कोई घर खुश रहता है। –

+1

अगर आप ajax जवाब में वापस tmp में पथ गुजरते हैं जो अगले अनुरोध के साथ कोई गड़बड़ कर सकता है दिखाते हैं और है कि मूल्य की जगह कहीं और से कुछ अन्य फ़ाइल नहीं करता है? (सिर्फ एक विचार) –

+1

अच्छी तरह से एक तरह से, सभी वे सकता है वास्तव में क्या आपके द्वारा निर्दिष्ट किया था निर्देशिका के लिए tmp निर्देशिका से एक फ़ाइल के लिए कदम है, और उनमें से संभावना है कि जानते हुए भी कि आपके tmp निर्देशिका में है थोड़ा संभावना नहीं है, हालांकि एक अच्छा विचार। – Hailwood

उत्तर

60

फ़ाइलों को पोस्ट के माध्यम से अपलोड में रहता है नष्ट हो जाती हैं सही होने के बाद PHP स्क्रिप्ट इसके निष्पादन खत्म की जरूरत है।

php.net के अनुसार: "फ़ाइल अनुरोध के अंत में अस्थायी निर्देशिका से हटा दिया जाएगा अगर यह दूर चले गए नहीं किया गया है या नाम दिया।"

+0

यहां तक ​​कि ऐसी फ़ाइलें जो एचटीएमएल इनपुट से अपलोड की गई हैं? – Hailwood

+0

कोई फर्क नहीं पड़ता कि फ़ाइल कहां से आई थी। इसके अलावा - ब्राउज़र में प्रत्येक इनपुट HTML है ;-) – zerkms

+0

वास्तव में? क्या PHP प्रत्येक फ़ाइल को ट्रैक करता है और इसे हटा देता है? मुझे यकीन है कि यह नहीं है! मेरे पास एक php स्क्रिप्ट है जो छवियों की मांग पर थंबनेल उत्पन्न करती है, और यदि स्क्रिप्ट चलाने के बाद php फ़ाइलों को हटा दिया जाता है, तो थंबनेल कभी मौजूद नहीं होंगे! –

18
अपलोड की गई फ़ाइलों के लिए

, the manual states:

फ़ाइल अनुरोध के अंत में अस्थायी निर्देशिका से हटा दिया जाएगा, तो इसे दूर स्थानांतरित नहीं किया गया या नाम दिया।

इसलिए रखी जाने वाली फ़ाइलों को किसी अन्य स्थान पर ले जाना चाहिए।

अधिक आम तौर पर, जैसा कि आपके प्रश्न का शीर्षक हो सकता है, अस्थायी फ़ोल्डर सिस्टम द्वारा साफ किए जाने के लिए छोड़ दिए जाते हैं। tempnam या tmpfile जैसे फ़ंक्शंस का उपयोग करते समय या अस्थायी निर्देशिका में लिखते समय यह सही है (sys_get_temp_dir देखें)।

उबंटू में, यह /etc/default/rcS में परिभाषित अनुसार प्रत्येक सिस्टम रीबूट या एक समय अंतराल पर किया जाता है।

कुछ Red Hat आधारित distros में, यह cronjob से tmpwatch उपयोगिता का उपयोग करके किया जाता है। अन्य में, /tmp विभाजन को tmpfs फाइल सिस्टम का उपयोग करके आरोहित किया गया है, जो रैम डिस्क के समान है (इसलिए कंप्यूटर बंद होने पर साफ़ किया जा रहा है)।

एक अन्य ज्ञात तंत्र एक आकार सीमा है, जिसका अर्थ है कि अस्थायी निर्देशिका पुराने फ़ाइलों से साफ हो जाएगी जब यह एक निश्चित आकार तक पहुंच जाए।

0

तीन चर सुनिश्चित करें कि/tmp निर्देशिका का कूड़ा संग्रह सही ढंग से होता है बनाने के लिए PHP में तय करने की आवश्यकता है कि कर रहे हैं और वे हैं:

session.gc_maxlifetime = 21600 
session.gc_probability = 1 
session.gc_divisor = 100 

सेट session.gc_maxlifetime सेकंड की संख्या होने के लिए आप प्रत्येक tmp फ़ाइल को हटाए जाने से पहले अंतिम रहना चाहते हैं। यदि आप ओपनकार्ट में व्यवस्थापक में लॉगिन करते हैं, तो यह सेकंड की संख्या है जब तक कि आप स्वचालित रूप से लॉग आउट नहीं हो जाते। उदाहरण के लिए आधे घंटे सेट करने के लिए, आप 60 सेकंड के समय 30 मिनट करेंगे जो 1800 सेकेंड का मूल्य होगा।

कचरा कलेक्टर चलाने पर अन्य दो चर संबंधित हैं, और यह महत्वपूर्ण है कि यदि आप इससे समस्याएं हैं तो वे ऊपर दिए गए मानों पर सेट हैं।

अधिक यहाँ जानकारी: https://www.antropy.co.uk/blog/opencart-php-session-tmp-files-filling-up/

+0

यह केवल PHP सत्रों के लिए सच है जो फ़ाइल संग्रहण का उपयोग करने के लिए कॉन्फ़िगर किए गए हैं, और फ़ाइल अपलोड द्वारा बनाई गई अस्थायी फ़ाइलों के लिए प्रासंगिक नहीं है। –