Estoy ejecutando una solicitud curl en una base de datos eXist a través de php. El conjunto de datos es muy grande y, como resultado, la base de datos demora mucho tiempo en devolver una respuesta XML. Para solucionar eso, configuramos una solicitud curl, con lo que se supone que es un largo tiempo de espera.
$ch = curl_init();
$headers["Content-Length"] = strlen($postString);
$headers["User-Agent"] = "Curl/1.0";
curl_setopt($ch, CURLOPT_URL, $requestUrl);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, 'admin:');
curl_setopt($ch,CURLOPT_TIMEOUT,1000);
$response = curl_exec($ch);
curl_close($ch);
Sin embargo, la solicitud de curl termina consistentemente antes de que se complete la solicitud (<1000 cuando se solicita a través de un navegador). ¿Alguien sabe si esta es la forma correcta de establecer tiempos de espera en rizo?
set_time_limit(0);
si el script se está ejecutando en la consola.php -d max_execution_time=1 -r 'while(true){$r=1*1;}'
o algo para observar en acción que el cli no tiene una bandera mágica 'siempre ilimitada'.set_time_limit(0)
si no lo estás usando dentro de un bucle.Hmm, me parece que
CURLOPT_TIMEOUT
define la cantidad de tiempo que cualquier función cURL puede tardar en ejecutarse. Creo que en realidad debería estar mirandoCURLOPT_CONNECTTIMEOUT
, ya que eso le dice a cURL la cantidad máxima de tiempo para esperar a que se complete la conexión.fuente
CURLOPT_TIMEOUT
se trata de cuánto tiempo lleva la función, los documentos subyacentes de la biblioteca curl parecen decir que se trata de cuánto tiempo lleva la solicitud, lo cual es una distinción interesante, ¡no estoy seguro de qué manera leer eso!Hay una peculiaridad con esto que podría ser relevante para algunas personas ... De los comentarios de los documentos de PHP.
De http://www.php.net/manual/en/function.curl-setopt.php#104597
fuente
Su código establece el tiempo de espera en 1000 segundos . Por milisegundos, use
CURLOPT_TIMEOUT_MS
.fuente
Deberá asegurarse de los tiempos de espera entre usted y el archivo. En este caso PHP y Curl.
Para indicarle a Curl que nunca agote el tiempo de espera cuando una transferencia aún está activa, debe configurarlo
CURLOPT_TIMEOUT
en0
lugar de1000
.En PHP, nuevamente, debe eliminar los límites de tiempo o PHP por sí mismo (después de 30 segundos por defecto) matará el script junto con la solicitud de Curl. Esto solo debería solucionar su problema .
Además, si necesita integridad de datos, puede agregar una capa de seguridad mediante el uso de
ignore_user_abort
:Una desconexión del cliente interrumpirá la ejecución del script y posiblemente dañará los datos,
por ejemplo. consulta de base de datos no de transición, compilando un archivo de configuración, etc., mientras que en su caso descargaría un archivo parcial ... y puede que le importe o no.
Respondiendo esta vieja pregunta porque este hilo está en la parte superior de las búsquedas de motores
CURL_TIMEOUT
.fuente
No puede ejecutar la solicitud desde un navegador, se agota el tiempo de espera para que el servidor que ejecuta la solicitud CURL responda. El navegador probablemente esté agotando el tiempo en 1-2 minutos, el tiempo de espera predeterminado de la red.
Debe ejecutarlo desde la línea de comandos / terminal.
fuente
Si está utilizando PHP como una aplicación fastCGI, asegúrese de verificar la configuración de tiempo de espera de fastCGI. Ver: PHP curl puso error 500
fuente