Ver Mensaje Individual
  #8 (permalink)  
Antiguo 23/02/2009, 17:36
Remsankar
 
Fecha de Ingreso: octubre-2003
Ubicación: Cerca de una wifi o 3G
Mensajes: 328
Antigüedad: 20 años, 6 meses
Puntos: 4
De acuerdo Respuesta: ¿Correr funciones php a nivel de servidor?

hay varias formas y trucos

hay una funcion en php que si la incluyes en tu script, aunque el usuario cierre la pagina el script sigue funcionando hasta que termina, lo del time limit tambien es necesario, tambien puedes usar fsockopen o curl en tus paginas para que el script haga la llamada desde el mismo servidor asi el usuario no tiene que estar esperando a que cargue tu script.

tengo pesima memoria pero voy a buscar en los script que tengo funcionando

una de las cosas interesantes que realice con estos codigos es que cree un monitor de carga en php, lo que hace es almacenar tareas que generan carga en el servidor, como pro ejemplo la creacion de archivos zip grandes, tratamiento de lotes de imagenes o de video etc, entonces tengo una bd con las tareas pendientes las que se estan ejecutando (pueden ser mas de una para servidores multinucleo)
y el resultado de las tareas, algunas se ejecutan de noche otras en forma inmediata y en fin es re entretenido.

Ocupa php pero la version cli, en los release de php siempre se incluye esta version que es el mismo motor de php pero puro, sin headers (son innecesarios y un poco molestos ya que no se ejecutan por un navegador, sino desde consola)

configuras el schedule task
New task
Run: C:\PHP\phpcli.exe C:\sites\script.php
start in: C:\sites\

el start in: es para que el archivo tenga como ruta relativa la misma carpeta donde esta el script

es importante que el usuario de windows tenga acceso al script.php y a phpcli.exe (generalmente siempre hay errores en esta parte, yo desconfio mucho de la seguridad de un windows ocupo usuarios distintos para todo, asi si hackean una cuenta o se meten por un script igual estan limitados y monitorizados xD)

es importante que el script.php llame a rutas completas y no relativas, sobre todo si lo vas a llamar desde otras partes tambien, me refiero a los includes etc etc

configuras para todos los dias, cada 5 minutos, en forma repetitiva, y hasta una duracion de 23:59 (no recuerdo porque 23:59 pero aveces no se ejecutaba o se producian errores)

es importante que el script detecte si ya esta corriendo otros script (yo he dejado que corran 4 script simultaneos pero si detecta que ya hay 4 procesos no se ejecuta, claro que en servidores multinucleo)

bueno hay hartas cosas que tomar en cuenta, puedes generar un archivo de log para ver como va funcionando y despues para fallas mas complicadas puedes hacer que te envie un email por ejemplo si el proceso se esta demorando mucho (cuelgue del servidor o del programa que este ejecutando tu script) piensa en todo lo que puede pasar y siempre genera respuestas aunque sea un echo "ok"; asi podras corroborar que las tareas si se estan haciendo.

-----------
//este es el codigo para impedir que el script pare cuando se cierra la pagina, con esto podrias hacer un include desde cualquier pagina dentro del servidor.

ignore_user_abort(TRUE);

//tu codigo

//obviamente queremos que pare en algun momento
ignore_user_abort(FALSE);die;

hay otras cosas que se pueden configurar en el php.ini o en el httpd.conf de apache o en iis en un archivo xml que hay que activar en iis (sino se usa el registro lo cual es una mierda)

si tienes algun problema me dices seguro voy recordando mas cosas en el camino
__________________
Ayuda!! firmar y compartir
No a la privatizacion de semillas http://www.thepetitionsite.com/1/no-...n-de-semillas/
Mas info: http://chilesintransgenicos.cl/

Última edición por Remsankar; 23/02/2009 a las 18:15