2012-01-17 17 views
10

PHP में, मैं एक बाहरी यूआरएल से एक जीडी संसाधन में एक छवि लोड करने के लिए एक इन-मेमोरी (या बल्कि, temp in-memory) फ़ाइल का उपयोग कर रहा हूं:PHP से फ़ाइल को कैसे हटाएं: // temp wrapper

$file = 'php://temp/img'; 
copy($uri, $file); 
$src_img = @imagecreatefromjpeg($file); 

हालांकि, जैसा कि मैं इसे समझता हूं, यह फ़ाइल स्मृति में बनी हुई है, भले ही मेरे पास imagecreatefromjpeg() के बाद इसका कोई उपयोग न हो।

क्या php: // temp wrapper फ़ाइल द्वारा उपयोग की जाने वाली मेमोरी मुक्त करने का कोई तरीका है?

या कम से कम संकेत है कि फ़ाइल का अब उपयोग नहीं किया जाता है?

+1

यह सुनिश्चित नहीं है कि यह संभव है - मुझे उम्मीद है कि यह बहुत हास्यास्पद लगता है यदि यह नहीं है। हालांकि, एक बहुत कम मेमोरी वैल्यू सेट करने के लिए चारों ओर एक संभावित काम 'php: // maxmemory' का उपयोग करना होगा ताकि डेटा हमेशा डिस्क पर लिखा जा सके, स्मृति उपयोग को कम रखा जा सके। यद्यपि यदि आप ऐसा करने जा रहे हैं, तो आप एक temp फ़ाइल का उपयोग भी कर सकते हैं, पूरे 'php: // temp' चीज़ को व्यर्थ बनाते हैं। – DaveRandom

उत्तर

5

जब आप php: // temp (या उस मामले के लिए php: // स्मृति) में फ़ाइल बनाते हैं तो संसाधन केवल स्क्रिप्ट के जीवनकाल तक रहता है। यदि आप संसाधन संभाल पाने के लिए fopen() का उपयोग कर फ़ाइल खोलते हैं, तो fclose($resource_handle) का उपयोग करके जीवनकाल को छोटा किया जा सकता है।

आपके मामले में, जैसे ही आपकी स्क्रिप्ट निष्पादित की जाती है, फ़ाइल अब स्मृति में नहीं होगी।

परिस्थिति में जहां आप स्क्रिप्ट पूर्ण होने से पहले स्मृति को साफ़ करना चाहते हैं, आपको केवल fclose() संसाधन फ़ाइल सूचक है।

एक और नोट पर, /img आप का उपयोग कर रहे हैं अमान्य है और इसे अनदेखा किया जा रहा है। मान्यता प्राप्त एकमात्र जोड़ा गया डेटा /maxmemory:n है।

संबंधित मुद्दे