Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Evitar el 504 Gateway Time-out (https://www.clubdelphi.com/foros/showthread.php?t=91274)

MAXIUM 16-12-2016 17:11:41

Evitar el 504 Gateway Time-out
 
Hola a todos.

Tengo el siguiente problema y quiero saber si tiene solución o mejor modo de tratar.

Tengo un archivo PHP en un web hosting externo que ejecuta algo y comienza por:

Código PHP:

<?php
    set_time_limit
(0);
...

El proceso debería durar varias horas, sin embargo me arroja ese error a los minutos.

La otra consulta es:

Para ejecutar dicho proceso, abro el archivo desde un navegador web en otro equipo. ¿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?

Si me explique mal, me avisan :D

Luis F. Orjuela 16-12-2016 18:20:05

Con todo respeto. Pero..... este es un foro de Delphi? o algo pasa con mi computador........:confused::confused:

maeyanes 16-12-2016 22:14:56

Hola..

Luis, es un foro de Delphi, pero esta es una sección para dudas relacionadas a PHP.


Saludos...

roman 17-12-2016 00:58:02

Cita:

Empezado por Luis F. Orjuela (Mensaje 511832)
Con todo respeto. Pero..... este es un foro de Delphi? o algo pasa con mi computador........:confused::confused:

Como dice maeyanes, si revisas el listado de foros notarás que abarcamos muchos temas además de Delphi :)

LineComment Saludos

roman 17-12-2016 01:15:04

Cita:

Empezado por MAXIUM (Mensaje 511829)
¿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

MAXIUM 17-12-2016 03:18:38

Excelente. Muchas gracias Roman ^\||/


La franja horaria es GMT +2. Ahora son las 18:09:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi