Maison  >  Questions et réponses  >  le corps du texte

Pourquoi la commande php actualiser ne fonctionne-t-elle pas dans Safari ?

<p>J'ai un script php qui prend beaucoup de temps, je voulais donc donner quelques commentaires aux utilisateurs. Simplifiez-le pour résoudre le problème principal. Le script fonctionne parfaitement dans Firefox (actualisant immédiatement la sortie), mais Safari attend que tout le contenu soit généré. Pourquoi? Comment puis-je résoudre ce problème? </p> <pre class="brush:php;toolbar:false;"><?php ini_set('max_execution_time', 0); header('Content-Encoding: aucun;'); header('Type de contenu : texte/html; charset=utf-8'); $j = 8 ; $k = pow(2, 10); echo "Un instant s'il vous plaît...".str_pad('', $k)."<br />n<br />n"; affleurer(); $je = 0 ; tandis que ($i < $j) { $i++; echo "Test".$i.str_pad('',$k)."<br />n"; affleurer(); dormir(1); } ?>≪/pré> <p>BTW : Chrome ne chargera pas du tout cette page, il me donnera <code>ERR_CONTENT_DECODING_FAILED</code>. </p> <p>J'ai aussi essayé de mettre</p> <pre class="brush:php;toolbar:false;"><IfModule mod_env.c> SetEnv sans gzip 1 </IfModule></pre> <p> dans .htaccess mais pas de chance. J'ai également essayé <code>SetEnv no-gzip dont-vary</code>. Avez-vous des indices pour que Safari (et Chrome) fasse la même chose que Firefox ? </p> <heure /> <p>J'ai lu sur php.net à propos de <code>flush()</code>, <code>ob_flush()</code>, <code>ob_start()</code> ; ., et j'ai lu presque toutes les questions sur flush + tous les commentaires sur Stackoverflow au cours des 20 dernières années. J'ai essayé d'ajouter <code>ini_set('output_buffering', 'On');</code> ou <code>ini_set('output_buffering', 'Off');</code>, en ajoutant <code> ob_start(null,Chapitre 4096<code>header('X-Content-Type-Options: nosniff');</code> et/ou<code>header('X-Accel-Buffering: no') ;< /code>. J'ai mis <code>@ob_flush();</code> avant ou après <code>flush();</code> et j'ai essayé <code>str_pad< a été augmenté à 2 ^ 16 (65 536) mais cela n'a pas aidé. Malheureusement, je n'arrive pas à contrôler le serveur Apache (exécutant PHP 8.1 et FastCGI) chez mon fournisseur d'hébergement. Maintenant que cela fonctionne sur Firefox, je suppose que je dois faire quelque chose de bien. </p>
P粉141925181P粉141925181383 Il y a quelques jours597

répondre à tous(2)je répondrai

  • P粉684720851

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

    Grâce à hareth py j'ai trouvé la réponse !

    <?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);
    } 
    ?>

    J'ai augmenté $j à 200 et réduit le temps de sommeil à 0,1 seconde. Safari répond un peu lentement, mais finit par afficher ligne par ligne. Tout comme Firefox et Chrome.

    répondre
    0
  • P粉762447363

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

    Éditeur :
    ob_start("ob_gzhandler") Destiné à être utilisé comme fonction de rappel pour ob_start() pour aider à envoyer des données codées en gz aux navigateurs Web prenant en charge les pages Web compressées. Source

    <?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);
    }
    ?>

    Sortie (sur Chrome) :

    répondre
    0
  • Annulerrépondre