2011-12-04 24 views
7

recibo el temido mensaje:curl_exec tiempo máximo de ejecución: ¿qué lo está causando?

Fatal error: Maximum execution time of 90 seconds exceeded in /home/pricing.php on line 239 

el código es: (a falta de una palabra mejor)

$url = "http://*******.com/feed?f=PR&categories=$cat_id&limit=100&startproducts=$ii&price_min=0.01&sortproducts=score&show=properties"; 

$c = curl_init($url); 
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($c, CURLOPT_HEADER, 0); 
curl_setopt($c, CURLOPT_USERPWD, "****:****"); 
$xml = simplexml_load_string(curl_exec($c)); // line 239 

la simplexml_load_string es la línea 239, sin duda esto significa que la alimentación se ha conseguido y la cuerda se está cargando, pero seguramente eso no puede tomar más de 90 segundos?

Mis preguntas son:

1 - lo que podría/sería la causa?

2 - ¿Es seguro aumentar el php_value max_execution_time por encima de 90 segundos y lo que se considera un máximo seguro?

3 - ¿Hay alguna manera mejor/más rápida/más estable de reducir la alimentación que usar curl?

¡Gracias por toda ayuda!

+0

No, no significa que la transmisión "se ha obtenido". El tiempo podría muy bien gastarse en 'curl_exec' si el sitio web es" lento ". Divide eso en dos líneas si quieres estar seguro. – Mat

+0

Ah bien - por lo que si rompo abajo como: $ = curl_exec alimentación ($ C); $ xml = simplexml_load_string ($ feed); es eso lo que quiere decir? –

+0

Sí, entonces sabrá cuál de las dos llamadas se está estancando. – Mat

Respuesta

5

A1: Sí, obtuvo la respuesta de su segunda pregunta. es causado por el php max_execution_time.

A2: No es seguro, a menos que lo alojes localmente y sepas lo que está haciendo tu script. Creo que la práctica común es 30 segundos o máx. 300 segundos (5 minutos).

A3 Si se trata de rizo, prefiero establecer set_time_limit(0) en lo más alto de su script php (nivel de código equivalente para max_execution_time en php.ini), y utiliza el tiempo de espera para el enrollamiento de manejar el tiempo de espera.

curl_setopt($curl, CURLOPT_TIMEOUT_MS, 2000); //in miliseconds 
+0

RE A3 - ¿significa esto que el guión no fallaría si fijo CURLOPT_TIMEOUT_MS - si es así esto es una mejor opción –

+0

Si se refiere ** ** fallar como en el php ejecución de tiempo de espera, entonces la respuesta es sí, no va a fallar, siempre y cuando set_time_limit es muy alta o 0 (ilimitado). No puedo recordar el detalle exacto cuando golpea el 'CURLOPT_TIMEOUT_MS', pero una cosa es segura es que' curl_exec ($ c) 'devolverá una cadena vacía. Entonces, simplemente haga una simple comprobación antes de analizar su 'simplexml_load_string'. –

2
  1. El rizo de alimentación externa es extremadamente lento

  2. está bien para aumentar el tiempo máximo de ejecución a un valor más alto, pero no es recomendable. Si la secuencia de comandos debe servir como una de sus páginas web normales, debe pensar dos veces. Ningún usuario desea esperar más de 90 segundos para obtener una página cargada.

  3. Caché it!

Detalles de cache it! : -

No es un súper lógica,
lo que quiere decir es que se puede preparar lista de la URL del feed,
luego hacer un trabajo en segundo plano (cron) para agarrar cada URL alimentación y almacenar en el almacenamiento local.
Una vez que el XML local está disponible, cargue desde

Por lo tanto, es el reverso del acceso bajo demanda, obtenga el XML listo antes de que cualquier usuario pueda acceder a la página.
Las dificultades serán muchas URL de feeds diferentes para capturar, existe un curl_multi_exec que debería ser ideal para captar varias URL al mismo tiempo.

Cuestiones relacionadas