Mengapa penyegaran perintah php tidak berfungsi dalam Safari?
P粉141925181
P粉141925181 2023-09-04 18:39:18
0
2
696
<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>
P粉141925181
P粉141925181

membalas semua(2)
P粉684720851

Terima kasih kepada hareth py Saya menemui jawapannya!

<?php 
ini_set('max_execution_time', 0);
header('Content-Encoding: none;');
header('Content-type: text/html; charset=utf-8;');
ob_start("ob_gzhandler");
$j = 200;
$k = pow(2, 10);

echo "One moment please...".str_pad('', $k)."<br />\n<br />\n";


$i = 0;
while ($i < $j) {
    $i++;
    echo "Test ".$i.str_pad('',$k)."<br />\n";
    ob_flush();
    usleep(100000);
} 
?>

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.

P粉762447363

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. Sumber

<?php
ini_set('max_execution_time', 0);
header('Content-Encoding: none;');
header('Content-type: text/html; charset=utf-8');
ob_start("ob_gzhandler");
$j = 8;
$k = pow(2, 10);

echo "One moment please...".str_pad('', $k)."<br />\n<br />\n";


$i = 0;
while ($i < $j) {
    $i++;
    echo "Test ".$i.str_pad('',$k)."<br />\n";
    ob_flush();
    sleep(1);
}
?>

Output (pada Chrome):

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan