2013-02-28 8 views
8

मैं curl का उपयोग कर एक फ़ाइल अपलोड करना चाहता हूँ। चूंकि cURL फ़ाइल इसलिए यहाँ का पूर्ण पथ की आवश्यकता है मेरे कोड है:curl में अपलोड फ़ाइल का नाम बदलें?

curl_setopt($ch, CURLOPT_POSTFIELDS, array("submit" => "submit", "file" => "@path/to/file.ext")); 
curl_exec($ch); 

हालांकि cURL भी अनुरोध हेडर में फ़ाइल के इस पूर्ण पथ पोस्ट करेंगे:

सामग्री-विन्यास: फार्म डेटा ; नाम = "फाइल"; फ़ाइल नाम = "/ path// file.ext करने के लिए"

लेकिन मैं इसे सिर्फ

सामग्री-विन्यास होना चाहता हूँ: फार्म डेटा; नाम = "फाइल"; फ़ाइल नाम = "file.ext"

तो मैं

curl_setopt($ch, CURLOPT_POSTFIELDS, array("submit" => "submit", "file" => "@file.ext")); 
chdir("path/to"); # change current working directory to where the file is placed 
curl_exec($ch); 
chdir("path"); # change current working directory back 

करने के लिए कोड को बदलने और फिर cURL बस एक त्रुटि संदेश फेंकता

सकता है फ़ाइल नहीं खोल "file.ext"

क्या कोई मुझे बता सकता है कि कृपया इसे कैसे करें?

उत्तर

16

नई विधि (पीएचपी 5.5) के बाद से उपयोग कर रहा CURLFile:

$file = new CURLFile('path/to/file.ext'); 
$file->setPostFilename('file.ext'); 

लगभग एक ही इसका इस्तेमाल करते हैं:

012,
"file" => $file 

पुरानी विधि:

इसके बजाय

की
"file" => "@path/to/file.ext" 

आप cURL बता एक और फ़ाइल नाम का उपयोग करने के लिए कर सकते हैं:

"file" => "@path/to/file.ext; filename=file.ext" 

इस तरह यह path/to/file.ext फ़ाइल स्रोत के रूप में उपयोग करते हैं, लेकिन फ़ाइल नाम के रूप में file.ext

हालांकि आपको एक बहुत ही पूर्ण पथ की आवश्यकता होगी, इसलिए शायद आप एक अग्रणी /: /path/to/file.ext खो रहे हैं।आप PHP का उपयोग कर रहे हैं, हमेशा एक realpath():

"file" => '@' . realpath($pathToFile) . '; filename=' . basename($pathToFile); 

या ऐसा ही कुछ।

+0

इस के लिए PHP का कौन सा संस्करण आवश्यक है? – Jeroen

+0

कोई भी। कर्ल का संस्करण मायने रखता है, लेकिन शायद नहीं। क्या तुमने कोशिश की? कोशिश करो। – Rudie

+0

हां मुझे अब काम करने के लिए मिला है। धन्यवाद! +1 – Jeroen

0

आपको फ़ाइल को एक अस्थायी क्षेत्र में रखने की आवश्यकता होगी और फिर यदि आप सही फ़ाइल स्थान छिपाना चाहते हैं तो वहां से फ़ाइल का संदर्भ लें। दुर्भाग्य से curl केवल बाइनरी डेटा भेजने का समर्थन नहीं करता है या अन्यथा आप फ़ाइल नाम संदर्भ के बजाय बेस 64 या बाइनरी डेटा स्ट्रिंग भेज सकते हैं।

8

अगर मैं गलत हूं तो कृपया मुझे सही करें लेकिन curl अपलोड सापेक्ष पथ के साथ काम नहीं करेगा। यह हमेशा, एक निरपेक्ष पथ की जरूरत है पसंद करती है

$realpath = realpath($uploadfile); 

तो अगर किसी को अपलोड करते समय अपने वेबसर्वर पर उसकी फाइल करने के लिए स्थान छुपाएं, या तो एक अस्थायी फ़ोल्डर में स्थानांतरित या fsockopen() का उपयोग करना चाहता है (देखें इस example PHP में मैनुअल के उपयोगकर्ता योगदान नोट्स)

+0

धन्यवाद दिन की मेरी समस्या का समाधान :) – wayzz

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