Re: asynchronous launch of a script

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Jun 26, 2011 at 7:42 PM, Tamara Temple <tamouse.lists@xxxxxxxxx>wrote:

> How do I launch a php script from another running php script
> asynchronously?
>

You can perform the long-running job in the same process that handles the
request by sending appropriate headers. We use this to run reports that take
ten minutes without making the user keep the browser tab open. Call this
method before starting the job:

    /**
     * Effectively causes PHP to keep running after flushing everything and
closing the client connection
     *
     * @param mixed $status JSON-encoded and sent to the client
     */
    public function flushAndCloseConnection($status) {
        // disable any apache or php gzipping
        if (function_exists('apache_setenv')) {
            apache_setenv('no-gzip', 1);
        }
        ini_set('zlib.output_compression', 0);
        // Tell the server and client we intend for it to disconnect
        ignore_user_abort(true);
        // Tell the client we are done!
        header('Connection: close');
        header('Content-type: application/json');
        $json = json_encode($status);
        header('Content-Length: ' . strlen($json));
        echo $json;
        flush();
    }

In our case we send a JSON status string ("ok") as well.

Another option is to fork the process using pcntl_fork() [1]. I haven't used
this in PHP before so I can't give an example.

Peace,
David

[1] http://www.php.net/manual/en/function.pcntl-fork.php

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux