में फ़ाइल में इनपुट इसलिए मैं चाहता हूं कि उपयोगकर्ता पोस्ट अधिकतम आकार मानों के बारे में चिंता किए बिना बड़ी फ़ाइलों को अपलोड करने में सक्षम हों। विकल्प PUT का उपयोग कर रहा है और फ़ाइल को कच्चे डेटा के रूप में भेज रहा है। jQuery का उपयोग करते समय मैं यह कर सकता:फॉर्म सीमाएं और php: // इनपुट php
var data = new FormData();
jQuery.each($('#file_upload')[0].files, function(i, file) {
data.append('file-'+i, file);
});
$.ajax({
url: 'upload.php?filename=test.pdf',
data: data,
cache: false,
contentType: false,
processData: false,
type: 'PUT',
});
PHP में मैं यह कर सकता:
$f = fopen($_GET['filename'], "w");
$s = fopen("php://input", "r");
while($kb = fread($s, 1024))
{
fwrite($f, $kb, 1024);
}
fclose($f);
fclose($s);
Header("HTTP/1.1 201 Created");
मैं नहीं कर रहा हूँ:
$client_data = file_get_contents("php://input");
के बाद से एक चर में पूरी फ़ाइल डाल विशाल फाइल अपलोड करते समय निश्चित रूप से सभी मेमोरी भर जाएगी।
जो चीज़ मैं नहीं समझ सकता वह यह है कि फ़ॉर्म सीमाओं के बिना फ़ाइल डेटा कैसे लिखना है। अभी इसे इस तरह फ़ाइल कुछ के शीर्ष पर लिखते हैं:
------WebKitFormBoundaryVz0ZGHLGxBOCUVQG
Content-Disposition: form-data; name="file-0"; filename="somename.pdf"
Content-Type: application/pdf
और इस तरह नीचे कुछ पर:
------WebKitFormBoundaryVz0ZGHLGxBOCUVQG--
तो मैं डेटा पार्स करने के लिए की जरूरत है। लेकिन इसके लिए मुझे पूरी डेटा स्ट्रीम को स्मृति में और बड़ी वीडियो फ़ाइलों के साथ पढ़ने की ज़रूरत है, मैं ऐसा नहीं करना चाहता हूं। मैंने शायद एक php: // temp स्ट्रीम बनाने के बारे में कुछ पढ़ा था। लेकिन इसके साथ अभी तक कोई भाग्य नहीं है। सीमा शीर्षलेख के बिना, मैं केवल एक फ़ाइल को सामग्री कैसे लिख सकता हूं? और पहले बिना किसी चर में सभी डेटा पंपिंग?
क्या आप 'सामग्री-प्रकार' शीर्षलेख प्रदान कर सकते हैं? –