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?
n
n"; affleurer(); $je = 0 ; tandis que ($i < $j) { $i++; echo "Test".$i.str_pad('',$k)."
n"; affleurer(); dormir(1); } ?>≪/pré>BTW : Chrome ne chargera pas du tout cette page, il me donnera
ERR_CONTENT_DECODING_FAILED
.J'ai aussi essayé de mettre
SetEnv sans gzip 1 dans .htaccess mais pas de chance. J'ai également essayé
SetEnv no-gzip dont-vary
. Avez-vous des indices pour que Safari (et Chrome) fasse la même chose que Firefox ?J'ai lu sur php.net à propos de
flush()
,ob_flush()
,ob_start()
; ., 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'ajouterini_set('output_buffering', 'On');
ouini_set('output_buffering', 'Off');
, en ajoutantob_start(null,Chapitre 4096
header('X-Content-Type-Options: nosniff');
et/ouheader('X-Accel-Buffering: no') ;< /code>. J'ai mis
@ob_flush();
avant ou aprèsflush();
et j'ai essayé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.
Grâce àhareth pyj'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) :