php flush not working
You're using ob_flush
without ob_start
, so there is nothing to flush for it.
It also depends on the webserver and proxy and its settings.
You should disable buffering for Nginx (add proxy_buffering off;
to the config file and restart Nginx)
Also, check if your php.ini contains output_buffering = Off
and zlib.output_compression = Off
.
How to flush data to browser but continue executing
ob_flush
writes the buffer. In other words, ob_flush
tells PHP to give Apache (or nginx/lighttpd/whatever) the output and then for PHP to forget about it. Once Apache has the output, it does whatever it wants with it. (In other words, after ob_flush
it's out of your control whether or not it gets immediately written to the browser).
So, short answer: There's no guaranteed way to do that.
Just a guess, you're likely looking for AJAX. Whenever people are trying to manipulate when page content loads as you're doing, AJAX is almost always the correct path.
If you want to continue a task in the background, you can use ignore_user_abort
, as detailed here, however, that is often not the optimal approach. You essentially lose control over that thread, and in my opinion, a web server thread is not where heavy processing belongs.
I would try to extract it out of the web facing stuff. This could mean a cron entry or just spawning a background process from inside of PHP (a process that though started from inside of script execution will not die with the script, and the script will not wait for it to finish before dying).
If you do go that route, it will mean that you can even make some kind of status system if necessary. Then you could monitor the execution and give the user periodic updates on the progress. (Technically you could make a status system with a ignore_user_abort
-ed script too, but it doesn't seem as clean to me.)
ob_implicit_flush(), flush(), ob_flush() - not working on remote server
I didn't take into account nginx, which has it's own output buffer.
I simply added 'header("X-Accel-Buffering: no");' to the top of the php script and it all works fine now.
Related Topics
Missing CSS File and Images After Url Rewrite
Upload Progress Using Pure PHP/Ajax
Selenium2 Firefox: Use the Default Profile
Zend Framework - Multiplate Navigation Blocks
Visits Counter Without Database with PHP
Post Ajax Data to PHP and Return Data
Converting Nsarray -> JSON -> Nsdata -> PHP Server ->JSON Representation
PHP Resize Image on or Before Upload
When Do/Should I Use _Construct(), _Get(), _Set(), and _Call() in PHP
How to Avoid Request Entity Too Large 413 Error
Difference Between Directoryiterator and Filesystemiterator
What's the Difference Between Post and Raw Post in PHP at All