Foros del Web » Programando para Internet » PHP »

Tiempo de ejecucion!!

Estas en el tema de Tiempo de ejecucion!! en el foro de PHP en Foros del Web. Hola a todos tengo el siguiente problemilla... Este script realiza una consulta a un puerto TCP, el cual le arroja una cadena XML, la cual ...
  #1 (permalink)  
Antiguo 14/02/2004, 11:00
 
Fecha de Ingreso: julio-2003
Ubicación: Colombia
Mensajes: 591
Antigüedad: 20 años, 8 meses
Puntos: 7
Tiempo de ejecucion!!

Hola a todos tengo el siguiente problemilla...
Este script realiza una consulta a un puerto TCP, el cual le arroja una cadena XML, la cual "loggeo" en un txt...ademàs de mostrarlo en el browser
Funciona lo de ponerlo en txt pero para que la respuesta se muestre en el browser tienen que pasar 60 segundos para que se muestre la respuesta mientras que he visto en el txt se escribe como a los 5 segundos..
El browser a los 60 segundos me dice:
Fatal error: Maximum execution time of 30 seconds exceeded in C:\Archivos de programa\Apache Group\Apache2\htdocs\script.php on line 10
Bueno he cambiado el php.ini a max_execution_time = 10, pero igual se demora 60 segs pero con
Fatal error: Maximum execution time of 10 seconds exceeded in C:\Archivos de programa\Apache Group\Apache2\htdocs\script.php on line 10

entonces agregue la directiva set_time_limit() con la premisa "Cuando se llama, set_time_limit() reinicia el contador del timeout a cero. En otras palabras, si el timeout es el de por
defecto de 30 segundos, y después de 25 segundos de ejecución del script se realiza una llamada set_time_limit(20), el
script se ejecutará durante un total de 45 segundos antes de alcanzar su límite."
Pero el browser me sigue sacando ese error, no se si php se queda esperando a que el puerto se cierre (aunque fclose()) lo deberia cerrar, o si hay algo en el script que retraza su echo.
por otro lado no se si la demora es porque es XML aunque la respuesta del browser es verdaderamente plana, solo los valores inmersos en las etiquetas XML..
Tambien he variado la ejecucion de scripts de Apache pero : error 500.
Gracias
Chaop!

Código PHP:
<?php
set_time_limit
(10);//limita el tiempo maximo de ejecucion
$fp fsockopen("127.0.0.1"5555, &$errno, &$errstr10);//abrimos la conexion via socket
if(!$fp) {//si se realiza consulta
echo "$errstr ($errno)<br>\n";//si no saca error
} else {
fputs($fp,"<consulta><IP>200.32.191.99</IP></consulta>");//Colocamos la consulta en el socket
while(!feof($fp)) {//verificamos si hay fin de linea en el archivo
$prueba=fgets($fp256);//asignamos ala variable con una longitud de 256 lo que ha direccionado fputs a fgets
 
define('NOMBRE_FICHERO''xml.txt');//creamos txt para loggear
 
$fichero fopen(NOMBRE_FICHERO'a');//abrimos el fichero
 
fputs($fichero$prueba);//escribimos
 
fclose($fichero); //cerramos log
echo "$prueba";//mostramos en el browser
}
fclose($fp);//cerramos conexion socket
}
?>
  #2 (permalink)  
Antiguo 14/02/2004, 11:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Pero .. hombre .. si te está diciendo que 30 segundos no era suficiente y tu cambias a 10 segundos .. menos va a resultar.

El dato que indicas ahí son segundos .. así que si tu dices que tarda tu script 60 segundos en ejecutarse .. dale más tiempo .. pero no menos .

Ademas ... con la función:
set_time_limit() ajustas ese tiempo de ejecución de ese script pasando por encima de lo que pueda decir el php.ini que se refiere al tiempo de ejcución otorgado para todos los scripts que se ejecuten bajo ese servidor.

Así que .. cambia tu php.ini el max_execution_time y dejalo a 30 o lo que gustes -segundos- .. y para ese script en concreto que sabes que requiere más tiempo de ejecución usa la función:

set_time_limit(60) y le das esos 60 segundos .. si no indicas parámetro .. el tiempo de ejecución será el que le tome al script (sea poco o mucho ..)

Por otro lado .. PHP genera la salida desde el servidor con el tiempo que ello le lleve .. Eso lo entrega al navegador y ahí entre el tiempo de descarga que dependerá de la conexión usada y el tiempo de proceso del XML,HTML, DHTML, Javascirpt, etc que le mandes será lo que "aparentemente" tarda PHP en ejecutarlo todo .. pero en realidad el tiempo de ejecución de PHP el el proceso que hace en el servidor y sólo ese el cual lo define su max_time_limit .. y lo puedes variar en tiempo de ejecución con la función mencionada.


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 14/02/2004 a las 11:13
  #3 (permalink)  
Antiguo 14/02/2004, 11:48
 
Fecha de Ingreso: julio-2003
Ubicación: Colombia
Mensajes: 591
Antigüedad: 20 años, 8 meses
Puntos: 7
Bueno en realidad no se porque tarda 60 segundos en su ejecucion y ademas yo no quiero que dure todo eso, la idea es como mostrar lo que tenga a los 10 segundos pero la espera con 60 es muy larga..
ademas teniendo en cuanta que se registra el log a los 5 seg...
En ese caso habria una manera de calcular el tiempo de ejecucion de PHP?
No el tiempo en que demora cargar la pagina, esto para saber si la demora proviene de Apache o del browser
Gracias!
PD: No creo que sea conexion porque estoy utilizando localhost..
Chaop!
  #4 (permalink)  
Antiguo 14/02/2004, 23:03
 
Fecha de Ingreso: julio-2003
Ubicación: Colombia
Mensajes: 591
Antigüedad: 20 años, 8 meses
Puntos: 7
casi me saco un ojo...pero al fin lo encontré!!!
en el php.ini :

Default timeout for socket based streams (seconds)
default_socket_timeout = 60

quedaria en el script:
ini_set('default_socket_timeout,'5');

Gracias Cluster de todas maneras
Chaop!
  #5 (permalink)  
Antiguo 15/02/2004, 09:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
El último parámetro de fsockopen() define ese tiempo de "time out"

$fp = fsockopen("127.0.0.1", 5555, &$errno, &$errstr, 10);

Probastes por ahí también?

Te lo comento por qué si bien haces el ajuste del time Out para conexiones por sockets .. lo estás haciendo para todo socket que abras en ese script .. Lo ideal es qu si tal función te ofrece como parámetro ese dato/ajuste de time out .. que lo uses ahí mismo.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 16/02/2004, 12:24
 
Fecha de Ingreso: julio-2003
Ubicación: Colombia
Mensajes: 591
Antigüedad: 20 años, 8 meses
Puntos: 7
bueno en realidad lo de fsocket fue lo primero que probé (en el script esta en 10) pero aún asi seguia tardando demasiado...
Y al final ese es el unico socket que abro en ese php, tal vez tenga que hacer otro pero con otras caracteristicas, como estar escuchando otro puerto...
en fin el caso es que funciona e init_set me afecta solo a este scipt...
Gracias
Chaop!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:01.