2011-02-24 17 views
18

मैं मूल रूप से PHP के साथ एक HTML फॉर्म संसाधित कर रहा हूं और फिर इसे स्टोरेज और प्रोसेसिंग के लिए कहीं और भेज रहा हूं। हालांकि मुझे कर्ल के माध्यम से सरणी सूचियां भेजने में परेशानी हो रही है। मुझे इसे इस तरह से करने की ज़रूरत है कि जब यह प्राप्तकर्ता सर्वर पर पहुंच जाए तो ऐसा लगता है कि यह सीधे इनपुट फॉर्म से आया है।CURLOPT_POSTFIELDS में सरणी डेटा कैसे शामिल करें?

अगर मैं सरणी को क्रमबद्ध करता हूं तो फ़ंक्शन का उपयोग करते समय मुझे कोई त्रुटि नहीं मिलती है, हालांकि इससे उन्हें सर्वर द्वारा अपठनीय बना दिया जाता है, इसलिए उन्हें पोस्ट प्रारूप को रखने की आवश्यकता होती है जैसे कि वे HTML फॉर्म से आ रहे हों।

मैं Kohana लेकिन कर्ल के सिद्धांतों का उपयोग कर रहा हूँ अभी भी वही कर रहे हैं, यहाँ मेरी कोड है:

  $path = "/some/process/path"; 
      $store = "http://www.website.com"; 

      $url = $store . $path; 

      $screenshots = array(); 
      $screenshots[0] = 'image1.jpg'; 
      $screenshots[1] = 'image2.jpg'; 
      $screenshots[2] = 'image3.jpg'; 

      $videoLinks = array(); 
      $videoLinks[0] = 'video1.wmv'; 
      $videoLinks[1] = 'video2.wmv'; 

      $params = array(
       'id' => '12', 
       'field1' => 'field1text', 
       'field2' => 'field2text', 
       'field3' => 'field3text', 
       'screenshots' => $screenshots, 
       'videoLinks' => $videoLinks, 
      ); 

      $options = array(
       CURLOPT_HTTPHEADER => array("Accept: application/json"), 
       CURLOPT_TIMEOUT => 30, 
       CURLOPT_POST => TRUE, 
       CURLOPT_POSTFIELDS => $params, 
      ); 

      $data = Remote::get($url, $options); 
      $json = json_decode($data); 

चीयर्स।

उत्तर

1

मैं कर्ल करने के लिए और उसके PHP संस्करण है, लेकिन नई कर रहा हूँ के रूप में जहाँ तक मुझे पता है कि आप अपने विकल्प में सरणियों ठीक कर सकते हैं, बस भूल नहीं है कि आप भेज रहे हैं के रूप में फ़ील्ड => मानों की एक सरणी तो आपको उचित व्याख्या के लिए सामग्री-प्रकार शीर्षलेख को मल्टीपार्ट/फॉर्म-डेटा पर सेट करना होगा। कहा जा रहा है कि, पैरा के लिए आपकी सरणी गलत स्वरूपित है। आपके अंतिम सरणी मान के बाद आपके पास अतिरिक्त कॉमा है। हो सकता है कि यह बर्क बना रहा हो।

+0

मैंने सोचा था कि सरणी का उपयोग करना ठीक काम करेगा, लेकिन जब मैं इसके बजाय 'http_build_query' पर स्विच करता हूं, तो मेरा' कर्ल 'अंततः काम करना शुरू कर देता है। http://stackoverflow.com/a/5104620/470749 – Ryan

5

मैं बस() http_build_query के लिए एक विकल्प

आप प्रत्येक subarray आइटम अलग से आपूर्ति करके CURLOPT_POSTFIELDS के साथ सरणी आदानों शामिल कर सकते हैं साझा करना चाहते थे।

बजाय ...

$videoLinks = array(); 
$videoLinks[0] = 'video1.wmv'; 
$videoLinks[1] = 'video2.wmv'; 

$params = array(
    ... 
    'videoLinks' => $videoLinks; 
    ... 
); 

... ऐसा करते हैं ...

$params = array(
    ... 
    'videoLinks[0]' => 'video1.wmv'; 
    'videoLinks[1]' => 'video2.wmv'; 
    ... 
); 
संबंधित मुद्दे