Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/09/2011, 16h45   #1
Invité de passage
 
Homme
Inscription : août 2011
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : août 2011
Messages : 21
Points : 4
Points : 4
Par défaut Exec : application qui ne rend pas la main

Bonjour à tous,

J'espère tout d'abord être dans la bonne section. Si ce n'est pas le cas, j'espère que vous me pardonnerez mon erreur !


Voici mon souci :

J'utilise la fonction exec tout simplement comme ceci :

Code :
exec('monFichier.bat');
monFichier.bat contient quant à lui, une commande qui lance un programme.

Dans mon ancien environnement de travail (Windows vista), une fois que ce programme avait terminé son boulot, il rendait la main et la suite de mon script PHP s'exécutait.

Lorsque j'ai voulu passer tout ça en test sur une machine Windows XP, le programme ne rend plus la main au script PHP.

Quelques précisions :
- Le programme a réalisé son travail, mais reste "bloqué" (obligé de tuer le processus via le gestionnaire des tâches);
- Lorsque je lance monFichier.bat "à la main", aucun problème;
- Je n'ai pas besoin de récupérer le résultat de la commande, mais j'ai besoin de savoir que le travail est terminé : j'ai donc BESOIN que mon script soit bloqué le temps de l'exécution dudit programme.


Le problème est-il lié au programme/monFichier.bat, à la fonction exec, ou se situe-t-il au niveau de l'environnement?

Merci de m'avoir lu,

Romain
Wilburdiskedur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 17h02   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
Hello

ça arrive que les scripts windows demandent à l'utilisateur une saisie pour se terminer et dans ce cas je ne vois pas bien comment il peut rendre la main à PHP.

Si tu y arrives, la solution serait de refaire ce que fait ce .bat en PHP.

Sinon, mais tu ne pourra pas savoir si l’exécution s'est terminée ni même si elle s'est correctement déroulée, tu peux utiliser popen qui rendra la main à PHP dans tous les cas (une sorte d’exécution asynchrone). Dans ce cas, une solution simple serait de modifier le .bat pour qu'il ajoute un fichier qui serait vérifié (puis supprimé) par PHP à intervalles réguliers (un jeton en somme).
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 17h35   #3
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
en CLI ça marche ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 11h40   #4
Invité de passage
 
Homme
Inscription : août 2011
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : août 2011
Messages : 21
Points : 4
Points : 4
Bonjour à vous,

Merci pour vos premières réponses.

Citation:
Envoyé par Benjamin Delespierre Voir le message
ça arrive que les scripts windows demandent à l'utilisateur une saisie pour se terminer et dans ce cas je ne vois pas bien comment il peut rendre la main à PHP.
L'application appelée dans ce .bat prévoit ce cas de figure avec un paramètre optionnel. Je l'utilise correctement dans mon cas.

Citation:
Envoyé par Benjamin Delespierre Voir le message
Si tu y arrives, la solution serait de refaire ce que fait ce .bat en PHP.
J'ai en effet essayé de me passer du fichier .bat et de lancer la commande directement dans le exec, mais ce n'est pas concluant.

Citation:
Envoyé par Benjamin Delespierre Voir le message
Sinon, mais tu ne pourra pas savoir si l’exécution s'est terminée ni même si elle s'est correctement déroulée, tu peux utiliser popen qui rendra la main à PHP dans tous les cas (une sorte d’exécution asynchrone). Dans ce cas, une solution simple serait de modifier le .bat pour qu'il ajoute un fichier qui serait vérifié (puis supprimé) par PHP à intervalles réguliers (un jeton en somme).
J'aurais bien voulu me passer de cette méthode... Mais si je ne trouve pas rapidement une solution, je l'envisagerai sérieusement.


Citation:
Envoyé par stealth35 Voir le message
en CLI ça marche ?
Que ce soit la commande ou le .bat, s'ils sont lancés manuellement en ligne de commande, aucun problème.



Romain
Wilburdiskedur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 11h52   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
je parle de ton PHP en CLI
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 14h44   #6
Invité de passage
 
Homme
Inscription : août 2011
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : août 2011
Messages : 21
Points : 4
Points : 4
Citation:
Envoyé par stealth35 Voir le message
je parle de ton PHP en CLI

Code :
php -r "exec(monfichier.bat);"
Ceci est OK, l'application effectue son boulot et rend la main correctement...

Qu'en conclure?
Wilburdiskedur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 14h46   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
Citation:
Envoyé par Wilburdiskedur Voir le message
Code :
php -r "exec(monfichier.bat);"
Ceci est OK, l'application effectue son boulot et rend la main correctement...

Qu'en conclure?
apache ne peut pas ouvrir n'importe quel process, essaye avec un proc_open au pire, mais sache que ça ne marche pas comme en CLI
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 14h56   #8
Invité de passage
 
Homme
Inscription : août 2011
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : août 2011
Messages : 21
Points : 4
Points : 4
Citation:
Envoyé par stealth35 Voir le message
apache ne peut pas ouvrir n'importe quel process, essaye avec un proc_open au pire, mais sache que ça ne marche pas comme en CLI
Je peux en effet imaginer qu'il s'agit d'un problème de droit d'exécution. Néanmoins, je trouve bizarre que l'application appelée dans le .bat s'exécute normalement (les données que cette application est censée traiter sont bien traitées) jusqu'au moment où elle doit rendre la main.

Je me renseigne et je teste avec proc_open, et je vous tiens au courant.

Encore merci pour les pistes.

Romain
Wilburdiskedur est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h58.


 
 
 
 
Partenaires

Hébergement Web