cURL file uploads not working anymore after upgrade from PHP 5.5 to 5.6
Actually I found the answer while starting the question. There is a new Variable included with curl in PHP 5.5: CURLOPT_SAFE_UPLOAD
this is set to false
by default in PHP 5.5 and is switched to a default of true
in PHP 5.6.
This will prevent the '@' upload modifier from working for security reasons - user input could contain malicious upload requests. You can use the CURLFile
class to upload files while CURLOPT_SAFE_UPLOAD
is set to true
or (if you're sure your variables are safe you can switch the CURLOPT_SAFE_UPLOAD
to false
manually):
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
Here's a source for the information that got me searching in the right direction: http://comments.gmane.org/gmane.comp.php.devel/87521
It's mentioned in the changed functions too: http://php.net/manual/en/migration56.changed-functions.php But not in the backward incompatible changes, really tripped me off...
Just do following changes for PHP 5.5 or greater
Instead of "@" . $localFile
just use new CurlFile($localFile)
And set
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);