cgi bg

cgi bg

guy keren guy.choo.keren at gmail.com
Mon Aug 25 12:18:38 IDT 2014


you can re-open stdout and point it to a file (perhaps even to /dev/null).

On 08/25/2014 11:41 AM, Erez D wrote:
> thanks,
>
>
> not so easy to use, as i can not use stdout anymore
> but it works.
>
>
> On Mon, Aug 25, 2014 at 10:57 AM, shimi <linux-il at shimi.net
> <mailto:linux-il at shimi.net>> wrote:
>
>     On Mon, Aug 25, 2014 at 10:25 AM, Erez D <erez0001 at gmail.com
>     <mailto:erez0001 at gmail.com>> wrote:
>
>         hi
>
>         i have a php cgi scripts that
>         1. generates an http response , this takes less than a second
>         2. do some stuff that may take some time, lets say a minute
>
>         when posting to that cgi, although the html is returned in less
>         then a second, the request is not closed until the minute has
>         passed.
>
>     The request will end when PHP will tell its upstream that it has
>     ended. After all, it may still produce output, which the client is
>     supposed to receive.
>
>         i want the http transaction to be closed when done (i.e. less
>         than a minute)
>         but the php script to continue it's action (e.g. the minute it
>         takes)
>
>         can i do it in php ? i.e. flush, or send eof, which will finish
>         the request but leave the php running until done ?
>
>
>     You could at the worst case execute the code from an external file
>     with a system() and backgrounded (append & to the command), a
>     solution that will always work (but is ugly).
>
>     An alternative approach which was possible in the past was to use
>     http://php.net/register-shutdown-function to handle the request
>     'cleanup' (which is what I assume you are trying to do) - but since
>     PHP 4.1 this stuff is no longer possible because now this can also
>     send output to the client. Assuming you have a newer PHP... which is
>     highly likely... you could try this instead:
>
>     <?php
>     ob_end_clean();
>     header("Connection: close");
>     ignore_user_abort(); // optional
>     ob_start();
>     echo ('Text the user will see');
>     $size = ob_get_length();
>     header("Content-Length: $size");
>     ob_end_flush(); // Strange behaviour, will not work
>     flush();            // Unless both are called !
>     // Do processing here
>     sleep(30);
>     echo('Text user will never see');
>     ?>
>
>     ( Shamelessly copied from http://php.net/connection-handling )
>
>     The idea is to buffer all the response in memory, then measure the
>     buffer size of the response, then tell that to the server/client,
>     and also let the connection to not support keep-alive. Then throw
>     everything to the client. Since the response is of a given size, and
>     the server/client has got all of it, it has nothing to do further
>     with the server, so it has no reason not to close the socket.
>
>     HTH,
>
>     -- Shimi
>
>
>
>
> _______________________________________________
> Linux-il mailing list
> Linux-il at cs.huji.ac.il
> http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il
>




More information about the Linux-il mailing list