Since php 5.5, sending files in php has improved a lot. You can use CURLFile class or curl_file_create() to upload a file with
// Create a Curlfile Object / procedural method $cfile = curl_file_create('resource/test.png','image/png','testpic'); // try adding // Create a CURLFile object / oop method $cfile = new CURLFile('resource/test.png','image/png','testpic');
But for older versions, it’s a struggle.
First of all, you can not send files using GET method. That doesn’t even make sense. Also you need the absolute path of the file. Relative paths won’t work.
Here’s a sample code that will work-
// Create a string with file data $cfile = "@" . $fileAbsolutePath . ";type=" . mime_content_type($fileAbsolutePath) . ";filename=" . basename($fileAbsolutePath);
Above code has 3 parts-
"@" . $fileAbsolutePath
This gives the cURL library full path to the file so it knows which file to send.
";type=" . mime_content_type($fileAbsolutePath)
This is used to set a MIME Content-type for the uploaded file. Without it, MIME type defaults to
";filename=" . basename($fileAbsolutePath)
This is used to give uploaded file a new name. Use this to change the name of the file that is received by the server on which request is sent.
Now you can use the
$cfile variable to send file by setting it as a parameter to
// initialise the curl request $conn = curl_init('http://abc.xyz'); // send a file curl_setopt($conn, CURLOPT_POST, true); curl_setopt( $conn, CURLOPT_POSTFIELDS, array( 'file' => '@' . realpath('example.txt') ) ); // output the response curl_setopt($conn, CURLOPT_RETURNTRANSFER, true); echo curl_exec($conn); // close the session curl_close($conn);
Function definition for curl_file_create on Php Sending Files using cURL in PHP (2009)