2012-02-15 17 views
5

मुझे एक PHP स्क्रिप्ट (कस्टम फ़ाइल एक्सटेंशन के साथ एक्सएमएल सामग्री) के हिस्से के रूप में फ़ाइल लिखने की आवश्यकता है, फिर फ़ाइल को सहेजने के बाद एक ईमेल को संलग्न करने के बाद मैं PHP मेलर का उपयोग कर भेजना।अस्थायी स्थानों पर फ़ाइलों को लिखना

ईमेलिंग हिस्सा ठीक है लेकिन मुझे पहले कभी PHP के साथ फ़ाइल लिखनी पड़ी नहीं है। फ़ाइल केवल स्क्रिप्ट की अवधि के लिए आवश्यक है और इसे स्थायी रूप से रखने की आवश्यकता नहीं है।

मैं एक अस्थायी स्थान पर फ़ाइल कैसे लिख सकता हूं?

क्या मुझे फ़ाइल के साथ किए गए अस्थायी स्थान को साफ़ करने की आवश्यकता है? यदि हां, तो कैसे?

उत्तर

4

समारोह tmpfile - एक अस्थायी फ़ाइल बनाता है

पढ़ने-लिखने की (w +) मोड में एक अनूठा नाम के साथ एक अस्थायी फ़ाइल बनाता है और एक फ़ाइल हैंडल देता है।

फ़ाइल बंद होने पर स्वचालित रूप से हटा दी जाती है (fclose() का उपयोग करके), या जब स्क्रिप्ट समाप्त होती है।

PHP Manual: Filesystem

1

आप केवल यह की जरूरत है ताकि आप इसे एक ई-मेल करने के लिए संलग्न कर सकते हैं, तो आप वास्तव में फ़ाइल में लिखने की जरूरत नहीं है। बस:

$attachment=chunk_split(base64_encode($XML)) 
     $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x"; 
     // put message body in mime boundries 
      $message = "This is a multi-part message in MIME format.\n\n" . 
      "--{$mime_boundary}\n" . 
      "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . 
      "Content-Transfer-Encoding: 7bit\n\n" . 
      $message . "\n\n"; 
     // attachment with mime 
     $message .= "--{$mime_boundary}\n" . 
      "Content-Type: {$type};\n" . 
      " name=\"{$name}\"\n" .  
      "Content-Transfer-Encoding: base64\n\n" . 
      $attachment. 
      "--{$mime_boundary}--\n"; 

अनचाहे, लेकिन मैंने पहले ऐसा कुछ किया है। (मैंने इसे एक स्क्रिप्ट से बाहर खींच लिया जिसका उपयोग मैं बैकअप भेजने के लिए करता हूं।)

15

डिस्क पर एक वास्तविक फ़ाइल के साथ लिखें-पढ़ें-हटाएं चक्र से बचने के लिए, मैं आपके सभी अस्थायी "फ़ाइल" डेटा को स्मृति में संग्रहीत रखूंगा PHP का अंतर्निहित php://temp और php://memoryIO stream wrappersdocs का उपयोग करना।

// open a temporary file handle in memory 
$tmp_handle = fopen('php://temp', 'r+'); 
fwrite($tmp_handle, 'my awesome text to be emailed'); 

// do some more stuff, then when you want the contents of your "file" 
rewind($tmp_handle); 
$file_contents = stream_get_contents($tmp_handle); 

// clean up your temporary storage handle 
fclose($tmp_handle); 

आपको डिस्क पर फ़ाइल लिखना या हटाना नहीं है।

php: // स्मृति और php: // अस्थायी पढ़ने-लिखने की कर रहे हैं धाराओं कि अस्थायी डेटा एक फ़ाइल में संग्रहीत करने की अनुमति दे इसके अलावा, php://temp और php://memory का उपयोग कर विषय पर किए गए दस्तावेज़ों से बीच के अंतर को ध्यान दें रैपर की तरह। दोनों के बीच केवल अंतर यह है कि PHP: // मेमोरी हमेशा मेमोरी में डेटा संग्रहीत करेगी, जबकि php: // temp संग्रहीत डेटा की मात्रा एक पूर्वनिर्धारित सीमा को हिट करने के बाद एक अस्थायी फ़ाइल का उपयोग करेगी (डिफ़ॉल्ट 2 है एमबी)। इस अस्थायी फ़ाइल का स्थान sys_get_temp_dir() फ़ंक्शन जैसा ही निर्धारित किया गया है।

+0

क्या यह बाइनरी सुरक्षित है? मेरा मतलब है कि यह 'अस्थायी फ़ाइल' 'w + b' 'मोड के साथ खोलने के बराबर है? क्योंकि मैं सैकड़ों बहु-बाइट डेटा के साथ काम कर रहा हूं और पोर्टेबल और बाइनरी सुरक्षित होने का मुख्य बिंदु है। – TechJS

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