Las cargas de archivos cURL ya no funcionan después de la actualización de PHP 5.5 a 5.6
php-5.6 (3)
En realidad, encontré la respuesta al comenzar la pregunta. Hay una nueva Variable incluida con curl en PHP 5.5: CURLOPT_SAFE_UPLOAD
esto se establece en false
de forma predeterminada en PHP 5.5 y se cambia a un valor predeterminado de true
en PHP 5.6.
Esto evitará que el modificador de carga @ @ funcione por razones de seguridad: la entrada del usuario podría contener solicitudes de carga maliciosas. Puede usar la clase CURLFile
para cargar archivos mientras CURLOPT_SAFE_UPLOAD
está establecido en true
o (si está seguro de que sus variables son seguras, puede cambiar CURLOPT_SAFE_UPLOAD
a false
manualmente):
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
Aquí hay una fuente de información que me hizo buscar en la dirección correcta: http://comments.gmane.org/gmane.comp.php.devel/87521
También se menciona en las funciones modificadas: http://php.net/manual/en/migration56.changed-functions.php Pero no en los cambios incompatibles hacia atrás, realmente me hizo tropezar ...
Tengo una carga de cURL que falla después de actualizar de PHP 5.5 a 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);
El archivo parece estar vacío en el sistema de destino.
Incluya un control de tiempo de ejecución para hacer que su código sea compatible con las versiones más bajas también como a continuación
$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);
Solo haga los siguientes cambios para PHP 5.5 o superior
En lugar de "@" . $localFile
"@" . $localFile
solo usa el new /CURLFile($localFile)
Y establecer
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);