How to disable output buffering with PHP and nginx

Ben Johnson ben at indietorrent.org
Mon Sep 16 17:19:05 UTC 2013


Hello,

In an effort to resolve a different issue, I am trying to confirm that
my stack is capable of servicing at least two simultaneous requests for
a given PHP script.

In an effort to confirm this, I have written a simple PHP script that
runs for a specified period of time and outputs the number of seconds
elapsed since the script was started.

-----------------------------------------------
<?php

$start = time();

echo 'Starting concurrency test. Seconds elapsed:' . PHP_EOL;
flush();

$elapsed = time() - $start;

echo $elapsed . PHP_EOL;
flush();

while ($elapsed < 60) {
	echo time() - $start . PHP_EOL;
	flush();
	
	sleep(5);
	
	$elapsed = time() - $start;
}

echo time() - $start . PHP_EOL;
flush();

-----------------------------------------------

For whatever reason, nginx *always* buffers the output, even when I set

output_buffering = off

in the effective php.ini, *and* I set

fastcgi_keep_conn on;

in my nginx.conf.

Of course, when I request the script via the command-line (php -f), the
output is not buffered.

Is it possible to disable PHP output buffering completely in nginx?

Thanks for any help!

-Ben



More information about the nginx mailing list