Ver Mensaje Individual
  #4  
Antiguo 26-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.110
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A ver... yo creo que más bien estás queriendo ejecutar un Script PHP que cargar una página Web. Según lo poco que sé de este tema el asunto es que si quieres hacerlo contando "sólo con PHP" necesitarás simular el comportamiento de un programa del tipo "Cron" (de cronógrafo) que existe en Linux y no nos engañemos... nunca utilizé.

El caso es que para lo que nos interesa en PHP el asunto está basado en las peticiones al Servidor. Es decir, cada vez que se hace una petición a nuestro Servidor (más concretamente cada vez que se solicita una determinada página Web) hemos de encargarnos de ejecutar el Script PHP que simule el comportamiento del mencionado programa "Cron", es decir, un Script PHP que se encargue de revisar si hay "tareas pendientes" y de ejecutar dichas tareas si fuera preciso.

Hay alguna función como "ignore_user_abort" que puede serte de utilidad. Esta función en concreto permite que un Script siga ejecutándose (en segundo plano) incluso si el usuario "aborta" la carga de una determinada página. Ahora bien, esto parece aplicarse a Scripts que produzcan salida al cliente, y me explicaré.

El "cron.php" conque cuenta el proyecto WordPress utiliza la función mencionada para continuar la ejecución de dicho Script ("cron.php") incluso cuando el usuario cancele la carga de la página Web de marras. Pero, ¿de qué página Web hablamos? Pues de la que solicitase dentro del proyecto WordPress.

Lo que ocurre es que cuando cargas la página principal del proyecto (ya sabes que es un sistema de Blogs, pues vale decir cuando solicitas la portada del Blog) el sistema incluye (según va preparando la salida de la petición) el Script PHP "cron.php", de tal modo que comprueba en el mismo si hay tareas que llevar a cabo, y hacerlo, si fuera preciso, y seguir haciéndolo incluso si el usuario cancela la petición: la portada del Blog tal vez no termine de conformarse, pero, según entiendo el Script "cron.php" seguirá ejecutándose en el Servidor.

Otra forma sería utilizar el propio programa "Cron" o unas llamadas "Cron Task" que algunos Servidores tienen habilitado. Lo digo porque todo lo anterior entra dentro del "bueno es el pan si no hay tortas" o dicho de otro modo, puede que tenga algunas limitaciones, pero, es una posible solución que en muchos casos puede ser útil.

Una de las limitaciones que yo en mi ignorancia de este tema creo ver es qué ocurriría si no se realizan peticiones al Servidor en, digamos, un mes. Si no se realizan peticiones no se prepará el Script "cron.php" y ¡las tareas pendientes no se ejecutarán!

Bien. Pero lo cierto es que también puede pensarse de otro modo: si no se realizan peticiones, y las tareas están intrínsecamente relacionadas con el funcionamiento del sistema, es que no hace falta realizar tareas, porque el sistema puede considerarse "parado", "en suspensión", esperando nuevas peticiones.

Por ejemplo. Considerando que quisiéramos realizar un "backup" de la base de datos de nuestra aplicación todas las noches, podría pensarse que la cosa no funcionaría bien si una noche no se ejecuta el "backup" (porque no hay peticiones), pero, si no hay peticiones... ¿qué ha cambiado para tener que guardarlo, para hacer el "backup"?

Y así puede ser que la solución que se usa en WordPress y Drupal, entre otros (estoy seguro) conocidos sistemas escritos con PHP, no sea un "Cron" en toda regla, pero, puede hacer su apaño y de hecho lo está haciendo. Ahora, lo que no sé es si con esto te doy alguna idea o si estoy desbarrando completamente.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita