<div dir="ltr"><div><div><div>thanks,<br></div><br><br></div>not so easy to use, as i can not use stdout anymore<br></div>but it works.<br><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Aug 25, 2014 at 10:57 AM, shimi <span dir="ltr"><<a href="mailto:linux-il@shimi.net" target="_blank">linux-il@shimi.net</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>On Mon, Aug 25, 2014 at 10:25 AM, Erez D <span dir="ltr"><<a href="mailto:erez0001@gmail.com" target="_blank">erez0001@gmail.com</a>></span> wrote:<br>




<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div><div><div><div>hi<br><br></div>i have a php cgi scripts that<br>




</div>1. generates an http response , this takes less than a second<br></div>2. do some stuff that may take some time, lets say a minute<br>

<br></div>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.<br><br></div></div></div></div></div></div></blockquote></div><div>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.<br>




 <br></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div><div><div><div></div>i want the http transaction to be closed when done (i.e. less than a minute)<br>






</div>but the php script to continue it's action (e.g. the minute it takes)<br><br></div>can i do it in php ? i.e. flush, or send eof, which will finish the request but leave the php running until done ?<br><br></div>




</div></div></blockquote></div><div><br>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).<br>


</div>

<div><br></div><div>An alternative approach which was possible in the past was to use <a href="http://php.net/register-shutdown-function" target="_blank">http://php.net/register-shutdown-function</a> 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:<br>




<br><?php<br>ob_end_clean();<br>header("Connection: close");<br>ignore_user_abort(); // optional<br>ob_start();<br>echo ('Text the user will see');<br>$size = ob_get_length();<br>header("Content-Length: $size");<br>




ob_end_flush(); // Strange behaviour, will not work<br>flush();            // Unless both are called !<br>// Do processing here<br>sleep(30);<br>echo('Text user will never see');<br>?><br><br></div><div>( Shamelessly copied from <a href="http://php.net/connection-handling" target="_blank">http://php.net/connection-handling</a> )<br>




</div><div><br></div><div>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.<br>




<br></div><div>HTH,<br><br></div><div>-- Shimi<br></div><div><br></div></div></div></div>
</blockquote></div><br></div></div>