Ver Mensaje Individual
  #5  
Antiguo 17-12-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por MAXIUM Ver Mensaje
¿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
Responder Con Cita