przesyłanie pliku cURL nie działa już po aktualizacji z PHP 5.5 do 5.6
Mam curl upload, który nie powiedzie się po aktualizacji z PHP 5.5 do 5.6:
$aPost = array(
'file' => "@".$localFile,
'default_file' => 'html_version.html',
'expiration' => (2*31*24*60*60)
)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiurl);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 128);
curl_setopt($ch, CURLOPT_POSTFIELDS, $aPost);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$sResponse = curl_exec ($ch);
Plik wydaje się być pusty w docelowym systemie.
3 answers
Właściwie znalazłem odpowiedź podczas rozpoczynania pytania. W PHP 5.5 pojawiła się nowa zmienna curl: CURLOPT_SAFE_UPLOAD
jest ona domyślnie ustawiona na false
w PHP 5.5 i jest przełączana na domyślną wartość true
w PHP 5.6.
Uniemożliwi to działanie modyfikatora ' @ ' ze względów bezpieczeństwa - Dane wejściowe użytkownika mogą zawierać złośliwe żądania przesyłania. Możesz użyć klasy CURLFile
do przesyłania plików, gdy CURLOPT_SAFE_UPLOAD
jest ustawiona na true
lub (jeśli jesteś pewien, że Twoje zmienne są bezpieczne, możesz zmienić CURLOPT_SAFE_UPLOAD
do false
ręcznie):
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
Oto źródło informacji, które skłoniły mnie do poszukiwania we właściwym kierunku: http://comments.gmane.org/gmane.comp.php.devel/87521
Jest też wspomniane w zmienionych funkcjach: http://php.net/manual/en/migration56.changed-functions.php Ale nie w wstecznych niezgodnych zmianach, naprawdę mnie zaskoczyło...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-19 12:43:23
Po prostu wykonaj następujące zmiany dla PHP 5.5 lub nowszego
Zamiast "@" . $localFile
Wystarczy użyć new CurlFile($localFile)
I zestaw
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-09 08:22:34
Dołącz test runtime, aby Kod był zgodny z niższymi wersjami, jak poniżej
$aPost = array(
'default_file' => 'html_version.html',
'expiration' => (2*31*24*60*60)
)
if ((version_compare(PHP_VERSION, '5.5') >= 0)) {
$aPost['file'] = new CURLFile($localFile);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
} else {
$aPost['file'] = "@".$localFile;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiurl);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 128);
curl_setopt($ch, CURLOPT_POSTFIELDS, $aPost);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$sResponse = curl_exec ($ch);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-20 08:48:38