Pourquoi la commande php actualiser ne fonctionne-t-elle pas dans Safari ?
P粉141925181
P粉141925181 2023-09-04 18:39:18
0
2
648
<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粉141925181
P粉141925181

répondre à tous(2)
P粉684720851

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.

P粉762447363

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal