ob_flush
écrit le tampon. En d'autres termes, ob_flush
dit à PHP de donner à Apache (ou nginx/lighttpd/quelquechose) la sortie et ensuite à PHP de l'oublier. Une fois qu'Apache a la sortie, il fait ce qu'il veut avec. (En d'autres termes, après ob_flush
, il est hors de votre contrôle si oui ou non il est immédiatement écrit dans le navigateur).
Donc, réponse courte: Il n'y a aucun moyen garanti de le faire.
Juste une supposition, vous êtes probablement à la recherche d'AJAX. Chaque fois que les gens essaient de manipuler quand le contenu de la page se charge comme vous le faites, AJAX est presque toujours le bon chemin.
Si vous souhaitez poursuivre une tâche en arrière-plan, vous pouvez utiliser cependant ignore_user_abort
, comme here détaillée, qui est souvent la meilleure approche. Vous perdez essentiellement le contrôle de ce thread, et à mon avis, un thread de serveur Web n'est pas là où le traitement lourd appartient. Je voudrais essayer de l'extraire de la toile face à des trucs. Cela pourrait signifier une entrée cron ou juste engendrer un processus d'arrière-plan de l'intérieur de PHP (un processus qui a commencé à partir de l'intérieur du script ne mourra pas avec le script, et le script n'attendra pas qu'il finisse avant de mourir).
Si vous suivez cette route, cela signifie que vous pouvez même créer un système de statut si nécessaire. Ensuite, vous pouvez surveiller l'exécution et donner à l'utilisateur des mises à jour périodiques sur la progression. (Techniquement, vous pouvez créer un système de statut avec un script ignore_user_abort
-ed aussi, mais cela ne me semble pas aussi propre.)
Après avoir fait le premier ob_flush, voulez-vous que l'autre sortie soit affichée? Ou voulez-vous que la demande soit complètement terminée dans la mesure où le client peut le dire et ensuite un traitement en arrière-plan? – Corbin
continuer en arrière-plan – aWebDeveloper
Ok, j'ai mis à jour ma réponse. – Corbin