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?
n
n"; flush(); $i = 0; manakala ($i < $j) { $i++; echo "Uji ".$i.str_pad('',$k)."
n"; flush(); tidur(1); } ?>BTW: Chrome tidak akan memuatkan halaman ini sama sekali, ia akan memberi saya
ERR_CONTENT_DECODING_FAILED. Saya juga cuba meletakkan
SetEnv no-gzip 1 dalam .htaccess tetapi tidak berjaya. Juga mencuba
SetEnv no-gzip dont-vary. Sebarang petunjuk bagaimana untuk mendapatkan Safari (dan Chrome) melakukan perkara yang sama seperti Firefox?
Saya membaca di php.net tentang
flush()
,ob_flush()
,ob_start()
; ., dan saya telah membaca hampir setiap soalan mengenai flush + setiap komen pada Stackoverflow sepanjang 20+ tahun yang lalu. Saya cuba menambahini_set('output_buffering', 'On'); atau ini_set('output_buffering', 'Off');
, menambahob_start(null,Bab 4096
dan/atauheader('X-Content-Type-Options: nosniff'); header('X-Accel-Buffering: no') ;< /code>. Saya meletakkan
@ob_flush();
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.
Terima kasih kepadahareth pySaya 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):