Rumah  >  Soal Jawab  >  teks badan

Mengapa penyegaran perintah php tidak berfungsi dalam Safari?

<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粉141925181P粉141925181383 hari yang lalu600

membalas semua(2)saya akan balas

  • P粉684720851

    P粉6847208512023-09-05 13:36:23

    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.

    balas
    0
  • P粉762447363

    P粉7624473632023-09-05 09:01:35

    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):

    balas
    0
  • Batalbalas