Well, really you can't do that.  A PHP request only takes interrupt input when 
it starts, from the GET, POST, COOKIE, and SESSION magic variables.  It 
doesn't run as a daemon.  A fresh Ajax call to the script starts a new 
instance of the script.  Fortunately, PHP's engine is fast enough that the 
performance is still not that much of a problem unless you're grossly 
over-including code.

The only way to have a "stay-resident" PHP daemon for Ajax callbacks would be 
to either (a) Use an Opcode cache, which is not really a stay-resident but 
would eliminate a lot of the repetitive initialization in the engine or (b) 
write a CLI PHP script that you load on the server as a daemon that listens 
on a port, essentially same way that apache or MySQL or postfix or any other 
daemon does.  For the latter you may have to use an off-port.  

For what you're trying to do, I'd suggest just writing your script normally 
and letting the Zend engine take care of it for you.  If you're really 
concerned about performance you can have two include conditions, one for a 
full page and one for an Ajax call, but you have to be very careful about how 
you structure your code then.  An Opcode cache would be easier and more 
flexible.

As for persistent data across requests, that's what sessions are for.

On Sunday 05 November 2006 06:04, David Négrier wrote:
> Hi All,
>
> Thanks a lot for your numerous answers.
> I've learned a lot from all your suggestions.
> Actually, combining all your answers, I'll come up with a solution.
> To be more explicit on what I want to do, I want in fact to start a
> script, I want that script to
> display a page, and then, I want that script not to stop, but I want to
> be able to access that script
> back using AJAX calls from the web page. So my script is opening a
> network connection after having displayed the
> web page and is waiting for incoming calls. Although no solution given
> here is fully satisfying (because I don't want
> to launch antother script, I want to remain in the same) I still can
> find a way to close my connection to the browser (using
> a header specifying the connection length) and then go back to my script
> using AJAX.
>
> Thanks a lot for the time you took to propose solutions.
> Best regards,
> David.
> www.thecodingmachine.com
>
> Eric Butera a écrit :
> > On 11/1/06, David Négrier <[EMAIL PROTECTED]> wrote:
> >> Hello there,
> >>
> >> I'm having a somewhat unusual question here, and I cannot find any way
> >> to solve it.
> >>
> >> I have a PHP page that displays a message, and then, performs a very
> >> long operation. Note that it displays the message first.
> >> I do not intend to give some feedback to the user when the operation is
> >> done.
> >>
> >> I've seen I can use ignore_user_abort() to prevent the user from
> >> stopping the ongoing operation, but that solves only part of my problem.
> >> Because as long as the page is not fully loaded, the mouse cursor in the
> >> user's browser is showing a watch.
> >>
> >> So ideally, what I would like is to be able to close the connection from
> >> the server-side, but without using the exit() function, so my script
> >> keeps running afterwards.
> >>
> >> I know I could use a system() call to launch another process to do the
> >> processing, but I would like to avoid doing that, because there are many
> >> variables in the context that I cannot easily pass in parameter.
> >>
> >> I also tried to use the register_shutdown_function() to perform my
> >> operation after the page is displayed but since PHP 4.1.0, the
> >> connection is closed after the function is called....
> >>
> >> Would any of you have an idea on how I could close that connection?
> >>
> >> Thanks a lot,
> >> David
> >> www.thecodingmachine.com
> >>
> >> --
> >> PHP General Mailing List (http://www.php.net/)
> >> To unsubscribe, visit: http://www.php.net/unsub.php
> >
> > If you haven't gone with any of the listed methods yet you could use
> > fsockopen with a timeout value to accomplish your goal.
> >
> > frontend.php:
> > <?php
> > $fp = fsockopen("localhost", 80);
> > fwrite($fp, "GET /long_processing_script.php HTTP/1.0\r\n\r\n");
> > stream_set_timeout($fp, 1);
> > echo "done!";
> > ?>
> >
> > long_processing_script.php:
> > <?php
> > ignore_user_abort();
> > set_time_limit(0);
> > // do stuff here
> > ?>

-- 
Larry Garfield                  AIM: LOLG42
[EMAIL PROTECTED]               ICQ: 6817012

"If nature has made any one thing less susceptible than all others of 
exclusive property, it is the action of the thinking power called an idea, 
which an individual may exclusively possess as long as he keeps it to 
himself; but the moment it is divulged, it forces itself into the possession 
of every one, and the receiver cannot dispossess himself of it."  -- Thomas 
Jefferson

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to