2012-03-20 1 views
0

Je travaille sur un simple site basé sur PHPPHP: Comment attendre un fichier écrit par un script externe d'exister

La structure de base est:

  • Il faut des données en entrée via un formulaire web, le remet à certains (fonction via le système())

  • scripts shell à traiter le résultat du traitement est écrit dans un fichier txt

  • Ce fichier est ensuite lu par le script et affiché dans le navigateur

Il faut environ 2-3 secondes pour générer le fichier txt après le transfert est terminé

Est-il possible de corriger faire PHP attendre que le fichier soit généré?

Actuellement, je mets le script PHP en veille pendant 5 secondes et ensuite lire le fichier existe. Ce n'est évidemment pas une très bonne idée car chaque fois que le script PHP s'exécute, cela prend 5 secondes quel que soit le temps réellement nécessaire.

Runs sur Apache sur Ubuntu si c'est pertinent

+1

Je pensais que 'system()' _does_ attend jusqu'à la fin du processus fils. – Izkata

+0

@Izkata du manuel PHP 'Si un programme est démarré avec cette fonction, afin qu'il continue à tourner en arrière-plan, la sortie du programme doit être redirigée vers un fichier ou un autre flux de sortie. Si vous ne le faites pas, PHP sera bloqué jusqu'à la fin du programme. » Dans mon cas, la sortie est redirigée vers un fichier – Akash

+0

Alors pourquoi ne peux-tu pas bloquer PHP jusqu'à ce que le fichier soit créé? Shell sur les scripts, et quand ils sont dunes, le script PHP va reprendre. – GrandmasterB

Répondre

3

Réponse simple: Ne pas utiliser system(), utilisez exec() sans redirection vers un fichier:

$foo = array(); 
exec('ls', $foo); 
$output = implode("\n", $foo); 
1

Je pense que la meilleure solution est de jeter un Javascript appel ajax sur la page qui s'exécute toutes les quelques secondes à la recherche du fichier mis à jour. Une fois trouvé la boucle s'arrête et la page se rafraîchit.

+0

Cela nécessite un stockage supplémentaire de sorte que vous ne commencez pas à interroger les données d'un autre utilisateur, avec une sorte d'identifiant unique à passer entre le javascript et PHP (ou utiliser des sessions PHP), qui est associé au fichier de sortie ... Les scripts ne sont supposés durer que quelques secondes, donc je qualifierais cela d'overkill. – Izkata

Questions connexes