简体   繁体   中英

Is it possible for a web server to respond to a HTTP request with an extended time stream of output?

When you run PHP scripts in the console, all the standard output text from that script shows up in the console window while the script is running. Is it possible for a browser window to similarly receive status reports in the browser while a lengthy PHP script is running, instead of getting all the output dumped at the conclusion of the script?

Yes. Just call flush() and ob_flush() periodically. It's important to write some output at least every 120 seconds to keep the connection to the browser alive.

A rough example:

    while(!$done) {
        //doWork();
        echo number_format(100 * ($workDone/$workTotal)) . "% ";
        flush();
        ob_flush();
    }

Edit: here's an arbitrary proof of concept that works in my env:

print('hello');
print(str_repeat(".\n", 2048));
flush();
//this might be a safe way to only flush the buffer if necessary?
if(ob_get_length())
    ob_flush();
sleep(60);

Yes, one thing you'll need to worry about if you have a particularly long execution time is timing out. This can occur as a PHP timeout or as a browser timeout (generally about 2 minutes).

This PHP documentation about connection handling has quite a bit of good information about keeping connections alive.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM