2010-08-06 12 views
8

Tengo scripts php que invocan scripts de Perl para hacer varias cosas y, a veces, lo obtengo donde sigue y sigue sin obtener una respuesta, esto se basa en la variable que se pasa al script de Perl y lo estoy haciendo muchos diferentes en sucesión, así que no puedo depurarlo directamente ya que no tengo una respuesta de Perl ...Establecer un tiempo de espera para una función específica/bloque de código (no todo el script)?

Realmente me gustaría simplemente poder establecer una función php o bloque de código de tiempo de espera después de un cierto número de segundos .. He estado buscando en esto pero todavía no he encontrado nada sobre cómo hacer esto,

Estaba pensando que algo así podría funcionar, pero no creo que lo haría actualizar dinámicamente la variable $ time, pero tal vez hay una manera de obtener thi s para trabajar? Cualquier consejo se agradece

$time = time(); 
$timeout = $time + 5; //just as an example 

do { 

// do stuff 
} while ($time < $timeout) 
+0

$ $ dentro de la mientras que para que se actualice, pero si su llamada del código perl está dentro del tiempo, no funcionará si esa es una llamada que espera su respuesta. – Prix

+0

sí, ese es el problema, supongo que espera la devolución del perl sin importar qué – Rick

+0

si no te importa realmente el retorno podrías hacerlo diferente, haz el comando como: 'exec (" my_command_here>/dev/null 2> &1 &"); 'que ejecutará su código en el fondo enviará la salida a un agujero negro. De esta forma su código php seguirá funcionando pero necesitará un acercamiento diferente para saber si ha terminado o no ... podría por ejemplo, haga que su archivo perl cree un archivo con 1 o 0 en él como un archivo PID y podría controlarlo desde su ciclo como quisiera. – Prix

Respuesta

8

Su mejor opción sería utilizar proc_open, el sueño de la cantidad de tiempo de espera y luego llamar proc_terminate si el proceso todavía no ha concluido.

Consulte http://us3.php.net/manual/en/book.exec.php para obtener detalles sobre la familia proc_ *.

+0

Analizaré eso, sin embargo, necesito un retorno de Perl, solo que en el caso de que no entregue la devolución dentro de un tiempo razonable, no tengo una devolución para depurarlo ... He oído hablar de proc_open antes, pero no estaba seguro de si podría obtener un rendimiento. – Rick

0

Bueno, no estoy tan seguro de que esta pregunta tenga una respuesta basada en cómo la pregunté, entonces lo que voy a hacer es hacer la llamada perl donde php no espera una respuesta y escribir perl la salida a un archivo de texto, luego php lo leyó después de una cantidad especificada de segundos, creo que esta es la forma más sencilla de hacerlo, es solo para una pequeña aplicación que estoy ejecutando en un servidor local

Cuestiones relacionadas