Cita:
Empezado por MAXIUM
¿Existe forma de darle la orden de ejecutar el PHP y que quede procesando sin necesidad de tener que abrir algo y mantenerlo así hasta que finalice?
|
Sí, desde luego no es adecuado ejecutar un
script que va a durar horas y esperar que el navegador no proteste o que el proceso no se interrumpa. Puedes ejecutar el
script directamente desde la terminal:
Código:
$ /usr/local/php/bin/php script.php
suponiendo que el ejecutable de php está en esa ruta. O bien, puedes arrancar el proceso desde la
web (con un
script lanzador) pero mandándolo al
background. Aquí te pongo una clase muy sencilla que uso para eso:
Código PHP:
class BgProcess
{
const FMT_COMMAND = "%s %s > %s 2>&1 & echo $!";
public function __construct($command, $output = '/dev/null') {
$this->command = $command;
$this->output = $output;
}
public function execute() {
$params = implode(' ', func_get_args());
return shell_exec(sprintf(self::FMT_COMMAND, $this->command, $params, $this->output));
}
}
La forma de usarla sería así:
Código PHP:
$bgprocess = new BgProcess('/usr/local/php/bin/php script.php');
$bgprocess->execute();
Si requieres pasarle parámetros al script, lo haces en el método execute. Sólo recuerda que, en tu
script, esos parámetros los vas a leer en el arreglo $argv ya que son parámetros en la línea de comandos. Al ejecutar php de esta forma no tienes los arreglos $_GET y $_POST como cuando lo haces desde la
web.
Cuando llamas al método execute, el flujo regresará de inmediato a la siguiente línea y así podrás terminar el
script lanzador y cerrar el navegador mientras en el servidor se continúa ejecutando script.php.
Esto funciona en Unix/Linux. No sé en
Windows.
LineComment Saludos