PHP - Proceso de Script largo

djtonight

Veamos, tengo un script que puede que la ejecución del mismo tarde unos minutos en completarse, por lo que me sale el error:
Fatal error: Maximum execution time of 60 seconds exceeded in blablabla.php on line 9.

Es posible hacer que no pase esto? me explico, no quiero tocar el php.ini para poner mas segundos de proceso. Pregunto por si alguien sabe programar de forma que no sea un unico proceso largo y que se divida en trozos, o algo así.

El script coge datos de un TXT y los va metiendo en una bbdd previo tratamiento con un bucle isi

algunas ideas?

SeiYa

No sé la directiva, pero puedes cambiar datos del INI (si tienes permisos) desde PHP solo para esa sesión.

http://es.php.net/ini_set

Otra cosa que puedes hacer, es leer y eliminar lo leído, y que tras X iteraciones (calculas tu el tiempo) salga del bucle y haga un redirect a si mismo (enviandose los mismos parámetros) como el txt ocupará menos, repetirá lo mismo otra vez y cada vez quedará menos hasta que el txt ocupe 0. Pero vamos, eso es chapuza si no puedes cambiar lo del ini...

Un saludo.

djtonight

bueno, en principio lo "he arreglado" poniendo al inicio set_time_limit(0);

pero molaria mas aprender a programar bien teniendo en cuenta estas cosa, si alguien tiene alguna idea sobre lo que decia en #1, que lo comente

LOc0

#3

Jajaja. No sé cómo programas, pero hacerte Madrid-Alicante en 1 hora no es cosa de saber conducir bien xDD Y en cuanto a eso de dividir el proceso en trozos, en tu caso, tienes que pasar por un cuello de botella que es la lectura/excritua de disco, por lo que te da igual tener 1000 procesos "paralelos" escribiendo/leyendo 10 bytes cada uno, que uno escribiendo/leyendo 10 KB. Es más, creo que tardarías más teniendo que lanzar 1000 procesos...

(Por cierto, creo que PHP todavía no dispone de threads. Será de lo poco que no tiene...)

Salu2 ;)

bLaKnI

Pero que recoño haces en eso For para que te tarde minutos el procesar un texto!?
Y como es ese txt? De 1 GB?

Esq no concibo como puede tardarte tanto... :\

djtonight

es un txt con unas 10.000 lineas, y cada linea segun le toque, la inserta en varias tablas mysql previo tratamiento de los caracteres. y puede hacer hasta 3 inserts yun select por cada linea.

B

Estaran contentos los del hosting, espero que al menos no tengas un cron ejecutandolo cada minuto.

NeB1

#1 aunque no te solucionará el problema, tienes pcntl_fork que crea procesos hijos.

Lo que puedes hacer es optimizar el mysql, con triggers o con lo que haga falta no sé...

MULTIPROCESSING en PHP:

int pcntl_fork ( void )

int pcntl_waitpid ( int pid, int &status, int options)

int pcntl_wexitstatus ( int status)

Usuarios habituales