2012-08-11 11 views
5

मुझे यहां थोड़ी सी समस्या है, मैं विशेष रूप से अनुरोध को फ़ाइल संलग्न करने के लिए कर्ल कैसे बता सकता हूं?@ प्रतीक के बिना फ़ाइल अपलोड करने के लिए curl का उपयोग करना?

अगर मैं cURL के साथ एक फ़ाइल अपलोड कर रहा है, तो आम तरीका मूल्य होने के सामने @, उदाहरण के लिए के साथ पोस्ट डेटा सरणी के भाग के रूप में संलग्न करने के लिए है:

CURLOPT_POSTFIELDS=>array('my-file'=>'@my-file.txt') 

यह स्पष्ट रूप से होगा काम, लेकिन मुझे इसके साथ दो समस्याएं हैं:

  • क्या होगा यदि यह वास्तव में एक फ़ाइल नहीं है जिसे मैं अपलोड कर रहा हूं? क्या होगा यदि मेरा पोस्ट मूल्य वास्तव में '@ my-file.txt' है और यह इसके बजाय फ़ाइल अपलोड करने का प्रयास करता है? यह एक छेड़छाड़ बनाता है जो मैं बचने की कोशिश कर रहा हूँ।
  • मैं एक यूआरएल से फाइल कैसे अपलोड कर सकता हूं? क्या मुझे इसे डाउनलोड करना होगा, इसे अस्थायी फ़ोल्डर में स्टोर करना होगा और फिर उस अस्थायी फ़ोल्डर से @ संलग्न करें? मैं कर्ल को केवल सामग्री क्यों नहीं दे सकता जिसे मैं फ़ाइल के रूप में उपयोग करना चाहता हूं?

curl CURLOPT_INFILE एक विकल्प नहीं है, क्योंकि यह $ _FILES सरणी के हिस्से के रूप में दिखाई नहीं देगा।

ऐसा लगता है कि पोस्ट क्षेत्र मूल्य में @ प्रतीक पर निर्भर होने के लिए curl में ऐसा एक छेड़छाड़ जैसा लगता है। क्या इसके आसपास कोई रास्ता है? एक CURLOPT_FILEFIELDS सरणी क्यों नहीं है? कमांड लाइन कर्ल के पास इस (-F) के लिए एक अलग ध्वज है, लेकिन मुझे इसे किसी कारण से PHP में एक विकल्प के रूप में नहीं देखा जाता है।

किसी भी मदद की सराहना की जाएगी, धन्यवाद!

+1

लूफोल दो, यह अपरिहार्य प्रतीत होता है: https://bugs.php.net/bug.php?id=46439 इनपुट मानों की जांच करते समय आपको मैन्युअल रूप से '@' की उपस्थिति की जांच करनी होगी। –

+0

शायद ['http_build_query'] (http://php.net/http_build_query), जैसा कि [इस उत्तर] में है (http://stackoverflow.com/a/648296/773625)? – mAu

+0

धन्यवाद पेक्का, मैं केवल एक समाधान चाहता था। लेकिन एमएयू: यह काम नहीं करता है, क्योंकि मेरे एपीआई को फ़ाइल अपलोड का समर्थन करने की आवश्यकता होगी। सबकुछ ठीक होगा अगर पोस्ट फ़ील्ड से फ़ाइलों को अलग से सबमिट करना संभव होगा और मुझे POST में कुछ डेटा जमा करने की आवश्यकता है (क्योंकि जीईटी की सीमाएं हैं जो पोस्ट के लिए नहीं हैं)। – kingmaple

उत्तर

1

मैं जो कर रहा हूं वह पता लगा रहा है कि किसी भी इनपुट डेटा को @ प्रतीक के साथ शुरू किया गया है और यदि उन्होंने किया है, तो उन्हें GET चर के रूप में सबमिट करना (curl में सबमिट यूआरएल के हिस्से के रूप में)। यह सभी मामलों में मदद नहीं करता है (जैसे कि जब एक बड़ी स्ट्रिंग सबमिट की जाती है जो @ से शुरू होती है), लेकिन ट्विटर के हैंडल के साथ हुई समस्याओं में कटौती करता है।

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