2009-12-16 13 views
7

कहें कि मैं PHP, curl के साथ एक फ़ाइल अपलोड करता हूं:PHP कर्ल: मैन्युअल रूप से सामग्री-लंबाई शीर्षलेख सेट करना

$postData = array(); 

$postData['file_name'] = "test.txt"; 
$postData['submit'] = "UPLOAD"; 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); 

अब मान लें कि मुझे सामग्री-लंबाई शीर्षलेख मैन्युअल रूप से सेट करना है।

$headers=array(
    "POST /rest/objects HTTP/1.1", 
    'accept: */*', 
    "content-length: 0" //instead of 0, how could I get the length of the body from curl? 
    ) 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //set headers 
$response = curl_exec($ch); 

मैं शरीर के आकार को कैसे मापूं? (बस फाइलसाइज को निर्दिष्ट करना क्योंकि सामग्री की लंबाई काम नहीं लगती है)

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

इस पर किसी भी प्रकाश शेड के लिए धन्यवाद, यह एक कठिन मुद्दा प्रतीत होता है।

उत्तर

7

पोस्ट बॉडी की लंबाई प्राप्त करने के लिए, फ़ील्ड को एक जीईटी स्टाइल स्ट्रिंग (उर्फ param1=value1&param2=value2) में स्वरूपित करने का प्रयास करें, फिर उस स्ट्रिंग को curl_setopt के साथ सेट करें। एक सरणी की आपूर्ति की जरूरत नहीं है। सामग्री-लंबाई शीर्षलेख के लिए उपयोग करने के लिए मूल्य प्राप्त करने के लिए आप बस strlen() का उपयोग कर सकते हैं।

यदि आप अन्य फ़ील्ड के अलावा फ़ाइल (या फ़ाइलें) पोस्ट कर रहे हैं, जैसा कि आप ऊपर दिए गए उदाहरण में दिखाई देते हैं, तो आपको फ़ाइल के लिए @/path/to/file के रूप में मूल्य प्रदान करना होगा, फिर बाइट्स में फ़ाइलइज़ प्राप्त करें और जोड़ें कि कुल सामग्री लंबाई के लिए।

तो उपर्युक्त उदाहरण के लिए, test.txt फ़ाइल को मानते हुए /test dir आपके सर्वर के हैं, पोस्ट मान स्ट्रिंग [email protected]/test/text.txt&submit=UPLOAD होगी। इससे पहले कि आप इसे कर्ल पोस्ट मान के रूप में असाइन करें, आपको url_encode इस स्ट्रिंग को भी ठीक करना होगा। सामग्री की लंबाई प्राप्त करने के लिए आपको उस स्ट्रिंग की लंबाई (यूआरएल-एन्कोडिंग पोस्ट करें) और /test/test.txt के में जोड़ें।

1

यह गलत लगता है। उत्पन्न डेटा में उप-शीर्षलेख शामिल होंगे और सामग्री-लंबाई की आवश्यकता उन उप-शीर्षकों को भी शामिल करने की आवश्यकता होगी। और चूंकि उप-शीर्षकों में एक सीमा शामिल होती है, इसमें यह और वह डेटा शामिल हो सकता है, यह पूरी चीज काम नहीं कर सकती है (आकार को बिना किसी अनुरोध के निर्दिष्ट किया जा सकता है कि पूरा अनुरोध क्या होगा।)

दरअसल, केवल एक ही जो आकार को गणना कर सकता है, जो मैं देख सकता हूं वह कर्ल स्वयं है। लेकिन यह 8-पी

नहीं करता है
संबंधित मुद्दे