Pourquoi la commande php actualiser ne fonctionne-t-elle pas dans Safari ?
P粉141925181
2023-09-04 18:39:18
<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>
Grâce à hareth py j'ai trouvé la réponse !
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.
É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. SourceSortie (sur Chrome) :