2010-03-25 11 views
3

Donc, j'écris un script jetable pour mon usage personnel et je veux être capable de voir comment le processus se déroule. Fondamentalement, je suis en train de traiter quelques milliers de communiqués de presse et de les envoyer à notre nouveau CMS.Existe-t-il un moyen de rendre PHP progressivement lors de l'exécution du script?

Donc, je ne martèle pas le CMS, je fais le script sleep pour quelques secondes après toutes les 5 demandes. Je voudrais - comme le script est en cours d'exécution - pouvoir voir mes echo en me disant que le script va se mettre en veille ou que la dernière transaction avec le webservice a réussi.

Est-ce possible en PHP?

Merci pour votre aide!

Iain

+0

Je remarque que sur les scripts particulièrement longs, PHP semble commencer à envoyer ce qu'il a dans le tampon même si le script n » t fini d'exécuter - une façon de détourner cela? –

+0

Hmmmm ... après coup - peut-être que PHP ** est en train d'envoyer le tampon au fur et à mesure et que c'est juste mon navigateur qui ne me le montre pas ... ermmm .. aide ?! –

+0

Courez-vous le script dans une console? Ou dans un navigateur? –

Répondre

10

Utilisez ob_flush pour envoyer des données dans la mémoire tampon. Vous pouvez donc exécuter certaines commandes, vider la sortie, puis dorer un peu avant de traiter d'autres commandes.

Je remarque que sur les scripts particulièrement longs, PHP semble commencer à envoyer ce qu'il a dans le tampon même si le script n'a pas fini d'exécuter

Par défaut, PHP ne sera jamais rien d'écho jusqu'à ce que le script entier finit d'être exécuté. C'est juste votre navigateur qui essaye de sortir beaucoup trop de données à la fois, ou vous avez quelque chose qui le fait vider quelque part.

+4

PHP tamponne la sortie, sur les longs scripts ce tampon est saturée si ses données sont envoyées (vous pouvez ajuster la taille de la mémoire tampon ou de force php pour tamponner toutes les sorties avant d'envoyer) – Michael

+2

Je donne ce la tique parce que cela me conduit à la bonne réponse. N'importe qui d'autre qui fait cela note: Vous devez mettre 'output_buffering' dans votre fichier php.ini à 0 - ce qui est un coup de performance que je suis amené à croire que cela fonctionne pour moi - mais je serais sceptique à l'utiliser dans production. De plus, après avoir appelé 'ob_flush()', vous devez également appeler 'flush()' pour envoyer la sortie. J'espère que cela t'aides! –

0

Vous pouvez explorer les commandes flush http://php.net/manual/en/function.flush.php

+0

car la sortie est mise en mémoire tampon et ne sera pas nécessairement sortie lorsque l'instruction 'echo' est appelée. –

1

Vous pouvez essayer d'utiliser flush et regarder l'autre output control functions, mais ils peuvent ne pas être utiles. Votre logiciel de serveur Web peut tamponner la réponse indépendamment.