Mengapa penyegaran perintah php tidak berfungsi dalam Safari?
P粉141925181
2023-09-04 18:39:18
<p>Saya mempunyai skrip php yang memakan masa jadi saya ingin memberi maklum balas kepada pengguna. Permudahkan untuk menyelesaikan masalah utama. Skrip berjalan dengan baik dalam Firefox (memugar semula output serta-merta), tetapi Safari menunggu semua kandungan dijana. kenapa? Bagaimanakah saya boleh menyelesaikan masalah ini? </p>
<pre class="brush:php;toolbar:false;"><?php
ini_set('max_execution_time', 0);
header('Pengekodan Kandungan: tiada;');
header('Content-type: text/html; charset=utf-8');
$j = 8;
$k = pow(2, 10);
bergema "Tolong sekejap...".str_pad('', $k)."<br />n<br />n";
flush();
$i = 0;
manakala ($i < $j) {
$i++;
echo "Uji ".$i.str_pad('',$k)."<br />n";
flush();
tidur(1);
}
?></pra>
<p>BTW: Chrome tidak akan memuatkan halaman ini sama sekali, ia akan memberi saya <kod>ERR_CONTENT_DECODING_FAILED</code>. </p>
<p>Saya juga cuba meletakkan</p>
<pre class="brush:php;toolbar:false;"><IfModule mod_env.c>
SetEnv no-gzip 1
</IfModule></pre>
<p> dalam .htaccess tetapi tidak berjaya. Juga mencuba <kod>SetEnv no-gzip dont-vary</code>. Sebarang petunjuk bagaimana untuk mendapatkan Safari (dan Chrome) melakukan perkara yang sama seperti Firefox? </p>
<hr />
<p>Saya membaca di php.net tentang <code>flush()</code>, <code>ob_flush()</code>, <code>ob_start()</code> ; ., dan saya telah membaca hampir setiap soalan mengenai flush + setiap komen pada Stackoverflow sepanjang 20+ tahun yang lalu.
Saya cuba menambah <kod>ini_set('output_buffering', 'On');</code> atau <code>ini_set('output_buffering', 'Off');</code>, menambah <code> ob_start(null,Bab 4096<kod>header('X-Content-Type-Options: nosniff');</code> dan/atau<code>header('X-Accel-Buffering: no') ;< /code>. Saya meletakkan <code>@ob_flush();</code> dinaikkan kepada 2^16 (65,536) tetapi itu tidak membantu.
Malangnya, saya nampaknya tidak dapat mengawal pelayan Apache (menjalankan PHP 8.1 dan FastCGI) di pembekal pengehosan saya. Sekarang kerana ia berfungsi pada Firefox, saya rasa saya mesti melakukan sesuatu dengan betul. </p>
Terima kasih kepada hareth py Saya menemui jawapannya!
Saya meningkatkan $j kepada 200 dan menurunkan masa tidur kepada 0.1 saat. Safari memang bertindak balas dengan perlahan, tetapi akhirnya ia memaparkan baris demi baris. Sama seperti Firefox dan Chrome.
Editor:
ob_start("ob_gzhandler")
Bertujuan untuk digunakan sebagai fungsi panggil balik untuk ob_start() untuk membantu menghantar data berkod gz ke pelayar web yang menyokong halaman web yang dimampatkan. SumberOutput (pada Chrome):