Khi tôi đọc, có vẻ như một pb thực sự khó khăn để giải quyết, và chỉ (bẩn) cách tôi tìm thấy là viết một cái gì vô dụng để đầu ra để lấp đầy bộ đệm.. - không có ssl - không có output_buffering, cần thiết, bộ đệm nginx có thể được hạ xuống cho đến khi kích thước tiêu đề php - với output_buffering, ob_flush cần được thêm vào để có cùng hành vi như trên - với ssl, có một bộ đệm khác ssl và NGX_SSL_BUFSIZE được cố định trong nginx biên soạn
đây là tập tin test.php của tôi (gọi nó với? size = ... để thay đổi không gian viết trong vòng lặp)
<!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>
và conf thấp hơn tôi có thể được đặt là
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? Tôi nghĩ nginx sẽ đủ. – jwueller
Bạn đang mong đợi điều gì sẽ xảy ra? –
Nên 'ob_flush()' đến sau 'flush()', và bạn cũng là vòng lặp. cần phải bắt đầu một bộ đệm đầu ra với 'ob_start()' trước vòng lặp – RobertPitt