Limite el tiempo de ejecución de shell_exec y tome cualquier salida generada

Estoy tratando de limitar el tiempo máximo de ejecución de shell_exec en PHP para decir 20 segundos y recuperar cualquier salida que se genere durante este tiempo. Si shell_exec finaliza en menos de 20 segundos, el script debe continuar directamente.

Más específicamente, estoy desarrollando una función que itera a través de una gran cantidad de revisiones de un repositorio de subversión. Para cada revisión, obtiene el svn diff y cuenta el número de líneas agregadas. El problema es que si se han confirmado archivos muy grandes en una revisión, el script se bloqueará. Por lo tanto, estoy tratando de limitar el tiempo de ejecución de cada comando svn diff.

popen () en combinación con sleep () no es una opción, ya que parece hacer que el script duerma durante 20 segundos para cada iteración, lo que no sería viable con 100 iteraciones. Establecer max_execution_time tampoco es una opción, ya que devolvería un error fatal.

preguntado el 10 de mayo de 11 a las 13:05

1 Respuestas

popen() or proc_open sigue siendo una opción, solo necesita evitar dormir () y administrar el tiempo de ejecución usted mismo.

$end = time() + 20;
while (!feof($stream) && (time() < $end)) {

    $output .= fread($stream);

El flujo de popen debe configurarse sin bloqueo aún:

stream_set_blocking($stream, 0);

Sondear la salida de esta manera puede ser un poco agotador, por lo que debería considerar agregar una pequeña time_nanosleep() de todas formas. El tiempo de ejecución está limitado a un máximo de 20 segundos por el time()<$end comprobar en cualquier caso.

contestado el 10 de mayo de 11 a las 17:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.