how to upload file using curl with PHP
217,210
Use:
if (function_exists('curl_file_create')) { // php 5.5+
$cFile = curl_file_create($file_name_with_full_path);
} else { //
$cFile = '@' . realpath($file_name_with_full_path);
}
$post = array('extra_info' => '123456','file_contents'=> $cFile);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$result=curl_exec ($ch);
curl_close ($ch);
You can also refer:
http://blog.derakkilgo.com/2009/06/07/send-a-file-via-post-with-curl-and-php/
Important hint for PHP 5.5+:
Now we should use https://wiki.php.net/rfc/curl-file-upload but if you still want to use this deprecated approach then you need to set curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
Comments
-
Hadidi44 almost 2 years
I want to know how to upload file using cURL or anything else in PHP. I have searched in google many times but no results.
In other words, the user sees a file upload button on a form, the form gets posted to my php script, then my php script needs to re-post it to another script (eg on another server).
I have this code to receive the file and upload it
code :
echo"".$_FILES['userfile'].""; $uploaddir = './'; $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); if ( isset($_FILES["userfile"]) ) { echo '<p><font color="#00FF00" size="7">Uploaded</font></p>'; if (move_uploaded_file ($_FILES["userfile"]["tmp_name"], $uploadfile)) echo $uploadfile; else echo '<p><font color="#FF0000" size="7">Failed</font></p>'; }
I want the code to send the file to receiver file.
-
Hadidi44 about 11 yearsthanks but how to upload it in different name like the file name is x.php and i want to upload it with z.php name
-
karthik about 11 yearsIn the about example "sample" is the name. you can access the data using $_FILES['sample'] so you can pass x.php and retrieve using $_FILES['x']
-
m3nda over 10 yearsMaybe, is a better way use the built-in feature from curl: php.net/manual/es/function.curl-file-create.php. Of course, you can use the way of POSTFIELDS and fill the value prepending with
@
. Anyway, the asnwer is copied from a custom usage of curl from a blog. The correct answer is say that the@
char defines it as a file, not a var. $post will contain@filename.jpg
by example. -
Jeremy Logan almost 10 years@erm3nda That's PHP 5.5+ only.
-
Marek Roj over 9 years@fiXedd im currently using php 5.6, and using
curl_file_create
is required (the sollution provided by karthik is not working). So the code should be upgraded to something like this:if function_exists('curl_file_create')) { $cFile = curl_file_create($dest); } else { $cFile = '@' . realpath($dest); }
-
Alan H over 9 yearsNow we should use wiki.php.net/rfc/curl-file-upload but if you still want to use this deprecated approach then you need to set curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
-
Aaron Gillion about 9 yearsWhat is
extra_info => 123456
used for? -
Michał Fraś about 8 yearsthis solution stopped working in php 5.6, the solution is in adding file as: new CURLFile(realpath($fileName));
-
serghei about 8 years@MarekRoj You make my day
-
gouchaoer over 7 yearsCURLOPT_SAFE_UPLOAD is not supported for php7
-
hanshenrik over 5 years
but if you still want to use this deprecated approach then you need to set curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
- this won't work as of PHP 7.0 -
Pooja Jadav almost 5 yearsThis code though, I can't get file content
-
Benyamin Limanto almost 5 yearsThe RFC should be the answer for it. Thanks for providing clue here.