Mengapa penyegaran perintah php tidak berfungsi dalam Safari?
P粉141925181
P粉141925181 2023-09-04 18:39:18
0
2
551

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 menambah ini_set('output_buffering', 'On'); atau ini_set('output_buffering', 'Off');, menambah ob_start(null,Bab 4096header('X-Content-Type-Options: nosniff'); dan/atauheader('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.

P粉141925181
P粉141925181

membalas semua (2)
P粉684720851

Terima kasih kepadahareth pySaya menemui jawapannya!

\n
\n"; $i = 0; while ($i < $j) { $i++; echo "Test ".$i.str_pad('',$k)."
\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

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

    Output (pada Chrome):

      Muat turun terkini
      Lagi>
      kesan web
      Kod sumber laman web
      Bahan laman web
      Templat hujung hadapan
      Tentang kita Penafian Sitemap
      Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!