Mientras leo, parece un pb muy difícil de resolver, y la única manera (sucio) que he encontrado es escribir algo inútil de salida para llenar los ≠ buffers. - sin ssl - sin output_buffering, se necesita color, los búferes nginx se pueden bajar hasta que el tamaño del encabezado php - con output_buffering, ob_flush deba agregarse para tener el mismo comportamiento que el anterior - con ssl, hay otro buffer para SSL y NGX_SSL_BUFSIZE se fija en la compilación nginx
Aquí está mi archivo test.php (llamarlo con? size = ... para cambiar la escritura de espacio en el bucle)
<!DOCTYPE html>
<html>
<head></head>
<body>
<?php
$vars = array('output_buffering', 'zlib.output_compression');
print('<p>');
foreach ($vars as $var) {
print("$var : ");
var_dump(ini_get($var));
print('<br />');
}
print("ob_get_level() : " .ob_get_level());
print('</p>');
if (ob_get_level()) {
$bytes = ob_get_length();
ob_flush();
}
$nb_iterations = !empty($_GET['nb']) ? max(2, (int) $_GET['nb']) : 5;
$size = !empty($_GET['size']) ? $_GET['size'] : 0;
for ($i = 1; $i < $nb_iterations; $i++) {
sleep(1);
print(str_repeat(' ', 1024 * $size));
print("<p>wait $i s</p>");
if (ob_get_level()) {
$bytes += ob_get_length();
print($bytes + strlen($bytes));
ob_flush(); // this is working, results aren't depending on output_buffering value
}
flush(); // this is needed
}
?>
</body>
</html>
y la conf más baja que pueda el conjunto es
location ~ ^/test.php$ {
gzip off;
fastcgi_pass unix:/var/run/php5-fpm/ssl.socket;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param SCRIPT_FILENAME $request_filename;
# if too low => upstream sent too big header while reading response header from upstream
fastcgi_buffer_size 128;
fastcgi_buffers 2 128;
fastcgi_busy_buffers_size 128;
}
Apache _AND_ nginx? Creo que nginx sería suficiente. – jwueller
¿Qué esperas que pase? –
Debe 'ob_flush()' venir después de 'flush()', y también usted el ciclo. Necesito iniciar un buffer de salida con 'ob_start()' antes del loop – RobertPitt