Загрузка cURL-файлов больше не работает после обновления с PHP 5.5 до 5.6

У меня загружена загрузка cURL после обновления с PHP 5.5 до 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); 

Файл кажется пустым в целевой системе.

Solutions Collecting From Web of "Загрузка cURL-файлов больше не работает после обновления с PHP 5.5 до 5.6"

На самом деле я нашел ответ, задавая вопрос. Существует новая переменная, включенная с curl в PHP 5.5: CURLOPT_SAFE_UPLOAD Это значение по умолчанию установлено в PHP 5.5 и переключено на значение по умолчанию true в PHP 5.6.

Это предотвратит работу модификатора загрузки «@» по соображениям безопасности – пользовательский ввод может содержать вредоносные запросы на загрузку. Вы можете использовать класс CURLFile для загрузки файлов, в то время как для CURLOPT_SAFE_UPLOAD установлено значение true или (если вы уверены, что ваши переменные безопасны, вы можете вручную переключить CURLOPT_SAFE_UPLOAD на false ):

  curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); 

Вот источник информации, которая заставила меня искать в правильном направлении: http://comments.gmane.org/gmane.comp.php.devel/87521

Он также упоминается в измененных функциях: http://php.net/manual/en/migration56.changed-functions.php Но не в отсталых несовместимых изменениях, действительно сбил меня с ума …

Просто выполните следующие изменения для PHP 5.5 или выше

Вместо "@" . $localFile "@" . $localFile просто использует new \CURLFile($localFile)

И установите

 curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true); 

Включите проверку времени выполнения, чтобы ваш код совместим с более низкими версиями, как показано ниже.

 $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);