php curl php-5.6

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