Estamos ejecutando PHP en un servidor de Windows (una fuente de muchos problemas, pero migrar no es una opción actualmente). Hay algunos puntos en los que una acción iniciada por el usuario deberá dar inicio a algunas cosas que tardan un tiempo y sobre las cuales el usuario no necesita saber si tienen éxito o fallan, como enviar un correo electrónico o asegurarse de que cuentas de terceros son actualizadas Si pudiera simplemente hornear con pcntl_fork()
, esto sería muy simple, pero las funciones de PCNTL no están disponibles en Windows.Bifurcación en PHP en Windows
Parece el más cercano que puedo conseguir es hacer algo de esta naturaleza:
exec('php-cgi.exe somescript.php');
Sin embargo, esto sería mucho más complicado. Las acciones que necesito iniciar dependen de un montón de contexto que ya existirá en el proceso de ejecución; para usar el ejemplo anterior, necesitaría averiguar los datos esenciales y suministrarlos al nuevo guión de alguna manera. Si pudiera bifurcar, solo sería cuestión de dejar que el proceso de los padres regresara temprano, dejando que el niño trabaje en algunas cosas más.
He encontrado algunas personas hablando de su propio trabajo para obtener varias funciones de PCNTL compiladas en Windows, pero ninguna parecía tener nada disponible (enlaces rotos, etc.).
A pesar de que this question tiene prácticamente el mismo nombre que el mío, parece que el problema fue más tiempo de espera de ejecución que necesidad de bifurcación. Entonces, ¿es mi mejor opción simplemente refactorizar un poco para tratar de llamar a php-cgi, o hay otras opciones?
Editar: Parece que exec()
no funcionará para esto, al menos no sin que imagine algún otro aspecto, ya que espera hasta que la llamada regrese. Pensé que podría usar START
, algo así como exec('start php-cgi.exe somescript.php');
, pero aún espera hasta que el otro script termine.
has considerado un trabajo cron para esto? (hay algunas opciones disponibles, http://www.google.com/search?q = cron + windows) – user187291
Por lo que puedo ver, parece que funcionaría tan bien como usar psexec, pero acabo de hacer que las cosas funcionen con psexec, así que probablemente solo me apegue a eso. –