だけで、スクリプトの先頭でob_end_flush()
またはob_end_clean()
を使用し、php.ini
を変更したり、.htaccess
ファイルがなくても、PHPでの実行時に出力バッファリングをオフにします。例えば:
このすべきバッファリングせずに出力:
<?php
ob_end_clean();
for ($i = 0; $i < 5; $i++)
{
echo "$i\n";
flush();
usleep(0.5e6);
}
これは、(一度にすべて)バッファと出力output_buffering
に関係なくflush()
コールの上にある場合:にもかかわらず
<?php
for ($i = 0; $i < 5; $i++)
{
echo "$i\n";
flush();
usleep(0.5e6);
}
そのob_implicit_flush
は、すべての出力後に暗黙的にflush()
ではなく、ob_flush()
を呼び出します。これは、最初に出力バッファを閉じた後のこのインスタンスでは便利です:
<?php
ob_end_clean(); // disable output buffer
ob_implicit_flush(); // call flush() automatically after every output
for ($i = 0; $i < 5; $i++)
{
echo "$i\n";
usleep(0.5e6);
}
これはPHP側を修正しています。 mod_deflate
など(テッド・コリンズの答えを参照)で何か他のことが起こっている可能性があります。何かを出力する前に少なくとも1024バイト必要です。
PHP5.6でこれが間違っていたり、何かが変更されているかどうかはわかりませんが、 'php_flag output_buffering Off'を使って' Off'を動作させなければなりませんでした。 – RiggsFolly
php.iniの "output_buffering"を4096からOffに設定し、サーバ全体を再起動し、phpinfo()で検証しました。私はまだ同じ問題に直面している、サーバーはブラウザにデータを送信する前にページの読み込みを待っています。 Apache2またはUbuntu 16.04に別の設定がありますか?私はPHP7を使用しています。 – Tarik