Safari で PHP コマンドの更新が機能しないのはなぜですか?
P粉141925181
2023-09-04 18:39:18
<p>時間のかかる php スクリプトを使用しているため、ユーザーにフィードバックを提供したいと思いました。本質的な問題を解決するためにそれを単純化します。このスクリプトは Firefox ではまったく問題なく実行されます (出力がすぐに更新されます)。ただし、Safari はすべてのコンテンツが生成されるまで待機します。なぜ?この問題はどうすれば解決できますか? </p>
<pre class="brush:php;toolbar:false;"><?php
ini_set('最大実行時間', 0);
header('Content-Encoding: none;');
header('コンテンツタイプ: text/html; charset=utf-8');
$j = 8;
$k = pow(2, 10);
echo "しばらくお待ちください...".str_pad('', $k)."<br />\n<br />\n";
流す();
$i = 0;
while ($i < $j) {
$i;
echo "テスト ".$i.str_pad('',$k)."
\n";
流す();
スリープ(1);
}
?></pre>
<p>ところで: Chrome はこのページをまったく読み込まず、<code>ERR_CONTENT_DECODING_FAILED</code> が表示されます。 </p>
<p>また、</p> も入れてみました。
<pre class="brush:php;toolbar:false;"><IfModule mod_env.c>
SetEnv no-gzip 1
</IfModule></pre>
<p> .htaccess にありますが、うまくいきません。また、<code>SetEnv no-gzip dont-vary</code> も試してみました。 Safari (および Chrome) に Firefox と同じ動作をさせる方法について何か手がかりはありますか? </p>
<p>php.net で <code>flush()</code>、<code>ob_flush()</code>、<code>ob_start()</code> などについて読みました。 .、そして私は過去 20 年以上にわたり、フラッシュに関するすべての質問に関する Stackoverflow のほぼすべてのコメントを読みました。
<code>ini_set('output_buffering', 'On');</code> または <code>ini_set('output_buffering', 'Off');</code> を追加してみました。 ob_start(null,Chapter 4096<code>header('X-Content-Type-Options: nosniff');</code> および/または<code>header('X-Accel-Buffering: no') ;< /code>。<code>@ob_flush();</code>を<code>flush();</code>の前後に置き、<code>str_pad<を入れてみました/の値を上げますcode> を 2^16 (65,536) に変更しても役に立ちませんでした。</p><p>
残念ながら、ホスティングプロバイダーでは Apache サーバー (PHP 8.1 および FastCGI を実行) を制御できないようです。 Firefox で動作するようになったので、何か正しいことをしているはずだと思います。 </p>
ありがとうhareth py答えを見つけました!
リーリー$j を 200 に増やし、スリープ時間を 0.1 秒に下げました。 Safari の応答は少し遅いですが、最終的には 1 行ずつ表示されます。 Firefox や Chrome と同じです。
######編集:######
ob_start("ob_gzhandler") ob_start() のコールバック関数として使用され、圧縮 Web ページをサポートする Web ブラウザに gz エンコードされたデータを送信するのに役立ちます。 ###ソース###### リーリー 出力 (Chrome 上):