2011-03-22 3 views
2

Je cours une boucle PHP continue qui exécute un autre fichier PHP en utilisant exec("php ...");. Il est prévu que le script exécuté s'exécute, puis dormez pendant 2 secondes, puis recommencez. Cependant, il semble que ma boucle démarre une nouvelle instance toutes les 2 secondes à la place. Bref question courte, comment puis-je obtenir mon premier script php à attendre que l'exécution du script nr 2 soit terminée?PHP exec sur un autre fichier PHP - Comment faire attendre mon script?

Tout cela est exécuté en utilisant la ligne de commande. J'aimerais aussi que les fonctions d'écho du script n ° 2 apparaissent sur la ligne de commande.

Toutes les pensées aideraient.

Merci

Répondre

2

Exec ne conserve aucune information d'état entre les instances. Vous pouvez:
Boucler dans votre indice
OU
Vous pouvez définir une sorte de variable d'environnement ou la lire au début de l'indice et l'écrire à la fin.
OU
Vous pourriez avoir la lecture de l'indice/écrire dans un fichier d'une manière similaire
OU
Vous pouvez passer des paramètres à l'indice qui est sortie est capturé

Pour sortir à l'écran, vous pouvez jouer autour de l'autre appelle exec/système:
exec
shell_exec
passthru
système

I croire passthru() fonctionnera. Une autre possibilité, si ce n'est pas, est d'appeler exec(), en utilisant les paramètres de sortie pour capturer les chaînes de sortie de l'indice. Puis juste en écho à cette sortie au retour de l'indice. Je crois aussi qu'en utilisant les paramètres de sortie (ou en capturant le résultat de la fonction dans une variable), l'exec attendra jusqu'à ce que la commande soit terminée avant de continuer.

+0

C'est une théorie très intéressante et probable. Je vais le tester plus tard – Hubro

0

Le problème est, une fois que vous excute le script, il sera exécuté. Un autre exec démarrera une autre instance comme vous l'avez découvert.

Ce que vous pouvez faire est Mettez le sommeil dans le script exécuté. Une fois qu'il commence à courir, il fera son propre sommeil. Vous pouvez envisager de définir une limite de temps d'exécution et peut-être ignorer l'abandon de l'utilisateur. Vous pouvez créer une fonction et laisser votre script appeler cette fonction. Il dormira ensuite après l'exécution et appellera à nouveau la fonction.

 
// maybe set time limit here 
Function loop() 
{ 

Sleep(120); 
//you can make a check whether to loop or not. 
Loop(); 
} 

Loop();