Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2699 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  !i! RESOLU !i! fonction exec() attente fin du prog

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

!i! RESOLU !i! fonction exec() attente fin du prog

n°1302004
lyzergik25
Posté le 09-02-2006 à 13:36:13  profilanswer
 

Voila je doit lancer un .exe (programme C) à partir d'une page PHP, j'utilise donc la fonction :

Code :
  1. exec('C:\GSM\Timer.exe');


   
  Ce programme C (timer.exe) execute un fichier bat regulierement pendant 1H , donc ma page PHP se bloque etant donné que l'execution est longue.
  Après differentes rechezrches je pense que pour faire executer le timer en ariere plan sans pour autant figer ma page php est d'utiliser l'argument "nohup" mais je ne sais pas comment l'utiliser.
  Alors voilà est ce que cette méthode est bonne pour lancer mon programme et qu'il s'execute jusqu'à la fin sans figer la page PHP ?? si oui comment utiliser cette fonction ?? si non HELPPPP !!
 
Merci ...


Message édité par lyzergik25 le 13-02-2006 à 15:17:25
mood
Publicité
Posté le 09-02-2006 à 13:36:13  profilanswer
 

n°1302040
anapajari
s/travail/glanding on hfr/gs;
Posté le 09-02-2006 à 13:58:01  profilanswer
 

D'après la doc:

Citation :


Note : Si vous démarrez un programme en utilisant cette fonction et que vous voulez le laisser tourner en arrière plan, vous devez vous assurer que la sortie du programme est redirigée vers un fichier, ou un autre flux de sortie, sinon PHP attendra jusqu'à la fin de l'exécution du programme.

n°1302082
lyzergik25
Posté le 09-02-2006 à 14:38:52  profilanswer
 

Merci pour cette info anapajari mais j'ai déjà consulté ces differentes docs et je ne sais pas comment faire ... j'attends une aide un peu plus concrète ... merci malgré tout anapajari pour t'être penché sur mon problème ...

n°1302105
lyzergik25
Posté le 09-02-2006 à 14:57:18  profilanswer
 

Il faudrait donc que je puisse rediriger la sortie du "exec" vers un fichier ?!! comment faire ??
Il n'y aurait pas une autre manière ... le "nohup" ca ne vous parle pas ?
 

n°1302106
dwogsi
Défaillance cérébrale...
Posté le 09-02-2006 à 14:59:35  profilanswer
 

sinon tu execute la command "start" qui lancera ton timer.exe et php n'attendra normalement plus rien puisque start se sera terminée.
Je n'en suis pas certain mais il me semble que ca devrait fonctionner.

n°1302108
omega2
Posté le 09-02-2006 à 15:00:41  profilanswer
 

Code :
  1. exec('C:\GSM\Timer.exe >fichierdesortie.txt >>fichierderreur.txt');


Pour le ">", je sais que windows le reconais, pour le >>, je n'en sais rien.
 
Quand à ton "nohup", t'as vu ça où, je le vois pas dans la doc à premiére vue?

n°1302110
lyzergik25
Posté le 09-02-2006 à 15:01:23  profilanswer
 

merci omega2 je vais tester ca :)

n°1302121
lyzergik25
Posté le 09-02-2006 à 15:04:28  profilanswer
 

aparament cela ne change rien , la page PHP se fige parce que le programme timer.exe mets une heure avant d'arriver à son terme.
AAhh je craque , il faut que j'arrive à faire tourner ca pour 17h !!

n°1302127
lyzergik25
Posté le 09-02-2006 à 15:07:55  profilanswer
 

dwogsi ... qu'entends tu par la commande "start" ?? Je ne pense pas que cela soit une fonction PHP , je ne m'en sort pas ... H - 2

n°1302129
omega2
Posté le 09-02-2006 à 15:09:10  profilanswer
 

Idée bête : essaye

Code :
  1. exec('C:\GSM\Timer.exe &" );


Sur un serveur de type unix, ca lance le programme en fond de tache et ca rend la main immédiatement. mais si tu veux voir ce que raconte le programme, il faut rediriger les sorties vers un fichier comme plus haut.


Message édité par omega2 le 09-02-2006 à 15:09:20
mood
Publicité
Posté le 09-02-2006 à 15:09:10  profilanswer
 

n°1302139
dwogsi
Défaillance cérébrale...
Posté le 09-02-2006 à 15:13:22  profilanswer
 

lyzergik25 a écrit :

dwogsi ... qu'entends tu par la commande "start" ?? Je ne pense pas que cela soit une fonction PHP , je ne m'en sort pas ... H - 2


 
Start est une command DOS (si mes souvenir sont bons) qui sert à exécuter un programme mais sans attendre que celui-ci se termine. Autrement dit, start exécute le programme qu'on lui demande puis s'arrête.
 
Donc en dos pour lancer explorer :
start explorer
 
Donc en php :
exec("start explorer" ) // ca marche chez moi

n°1302146
lyzergik25
Posté le 09-02-2006 à 15:15:09  profilanswer
 

Merci a vous deux , je m'en vais tester tout ceci tout de suite :)

n°1302151
dwogsi
Défaillance cérébrale...
Posté le 09-02-2006 à 15:17:28  profilanswer
 

Juste par curiosité j'ai testé ça : exec("command &" );
Et bien l'interprêteur ne reconnait plus les commandes externes....
Omega? t'es sur que ca fait pas d'autres choses que ce que tu as dit le "&"??

n°1302158
lyzergik25
Posté le 09-02-2006 à 15:25:59  profilanswer
 

 Donc j'ai essayé ce que tu m'as proposé dwogsi , du coup cela me lance bien le "timer.exe" dans une fenetre séparée alors qu'en faisant un exec simple , le programme se lancait en tache de fond.  
  Le problème de l'attente d'une réponse du programme par la page php persiste.
  Si je clike sur "arreter" dans le naviguateur ca stoppe bien l'attente de la page PHP et le programme tourne tout de même mais bon je doute qu'un utilisateur lamda comprenne ce qu'il se passe , car si on patiente la page affiche "délai dépassé etc .. etc..." mais au niveau du fonctionnement du programme aucun problème une fois lancé il roule jusqu'au bout. aaaah 3h25

n°1302185
omega2
Posté le 09-02-2006 à 15:38:52  profilanswer
 

Aprés test, windows ne reconais pas le caractére "&" en ligne de commande.
En fouillant dans la doc du côté de la création de la programmation avec plusieurs process en paralléle et je suis tombé sur ça : "popen ()"

Citation :

popen() ouvre un processus fils en faisant un fork de la commande command.  
 
popen() retourne un pointeur de fichier identique à celui retourné par fopen(), hormis le fait qu'il sera unidirectionnel (lecture seule, ou écriture seule), et doit être terminé par pclose(). Ce pointeur peut être utilisé avec fgets(), fgetss() et fputs().  


Un fork lancant un autre programme est exactement ce que tu cherches.


Message édité par omega2 le 09-02-2006 à 15:39:06
n°1302187
lyzergik25
Posté le 09-02-2006 à 15:42:34  profilanswer
 

je vais chercher la syntaxe de popen et tester ca mais il me semble avoir deja essayé .... ( Jai tellement essayé de choses différentes ...)  
:) j'espère un resultat

n°1302189
dwogsi
Défaillance cérébrale...
Posté le 09-02-2006 à 15:45:05  profilanswer
 

Tu es bien certain que le "&" ne fonctionne pas en ligne de commande sur Windows? Parceque si je fais un :  
format &
il me dis qu'il n'y a pas de paramètre mais si je fais un
format ¤
il me dit que le paramètre est in correcte, nuance...

n°1302190
lyzergik25
Posté le 09-02-2006 à 15:45:07  profilanswer
 

Non aucun résultat avec :    
 
popen("C:\GSM\Timer.exe" );
 
Le timer ne se lance même pas avec cette commande . . .


Message édité par lyzergik25 le 09-02-2006 à 15:46:26
n°1302191
dwogsi
Défaillance cérébrale...
Posté le 09-02-2006 à 15:46:07  profilanswer
 

Ba sinon tu te code une petite appli qui exécute ton timer.exe.

n°1302194
lyzergik25
Posté le 09-02-2006 à 15:47:29  profilanswer
 

Le truc c'est que je dois executer a partir de ma page PHP ce timer , l'utilisateur doit pouvoir lancer cette appli (pour 1h) quand il le souhaite

n°1302197
dwogsi
Défaillance cérébrale...
Posté le 09-02-2006 à 15:49:10  profilanswer
 

Mais pourquoi tu balance pas la sortie vers un fichier tout simplement???

n°1302201
lyzergik25
Posté le 09-02-2006 à 15:54:36  profilanswer
 

comme ceci ??
 
exec("C:\GSM\Timer.exe" >sortie.txt);   ????
 
comment utiliser ce fichier de sortie ??

n°1302203
dwogsi
Défaillance cérébrale...
Posté le 09-02-2006 à 15:57:03  profilanswer
 

Tu met ca :
exec("C:\GSM\Timer.exe" >sortie.txt);
 
ensuite s'i y a sortie ca ecrira un fichier et sinon rien mais le fichier tu t'en fou. Tu le supprime au besoin.

n°1302208
lyzergik25
Posté le 09-02-2006 à 16:02:21  profilanswer
 

exec("C:\GSM\Timer.exe" >sortie.txt);  
 
ne fonctionne pas , il doit y avoir une erreur de syntaxe pour rediriger vers un fichier de sortie !

n°1302212
dwogsi
Défaillance cérébrale...
Posté le 09-02-2006 à 16:06:33  profilanswer
 

désolé j'avais pas vu comme tu avais mis tes quote en c'est plutot ca :
exec("C:\GSM\Timer.exe >sortie.txt" );


Message édité par dwogsi le 09-02-2006 à 16:07:25
n°1302218
lyzergik25
Posté le 09-02-2006 à 16:09:53  profilanswer
 

Figure toi que j'ai déja essayé , cela lance bien le programme mais toujours cette attente sur la page PHP j'en puis plus ... en + ya que toi qui est solidaire lol ...:'|

n°1302225
dwogsi
Défaillance cérébrale...
Posté le 09-02-2006 à 16:16:56  profilanswer
 

Étrange parceque moi ça avait résole le problème pour un tcpdump, j'avais tout simplement mis :
exec("tcmpdump -D > list_chn.txt" );
 
Et ca marche à merveille. Elle fait quoi exactement l'appli que tu cherche à exécuter? T'as la source?

n°1302228
lyzergik25
Posté le 09-02-2006 à 16:22:25  profilanswer
 

oui j'ai le code source , c'est moi qui l'ai codé , je t'explique ... c'est tout simplement un timer qui execute un fichier .bat toutes les 2 minutes pendant 1heure ensuite il s'arrete.
 
Logiquement d'apres ce que je lis sur le net :  
 
  >>>>      Note : Si vous démarrez un programme en utilisant cette fonction et que vous voulez le laisser tourner en arrière plan, vous devez vous assurer que la sortie du programme est redirigée vers un fichier, ou un autre flux de sortie, sinon PHP attendra jusqu'à la fin de l'exécution du programme.
 
Logiquement rediriger vers un fichier de sortie empêcherais de faire pédaler ma page PHP dans le vide .. mais bon aucune différence entre
 
exec("C:\GSM\Timer.exe" );
et
exec("C:\GSM\Timer.exe >sortie.txt" );

n°1302237
dwogsi
Défaillance cérébrale...
Posté le 09-02-2006 à 16:35:18  profilanswer
 

Bon sinon ce que tu peux essayer, c'est créé une seconde appli en C qui va exécuter ton Timer.exe et qui se terminera ensuite.
 
En plus tu pourrais aussi vérifier si timer.exe s'est bien lancé et renvoyer TRUE ou FALSE selon les cas, récupérer ca dans php et afficher une erreur si besoin.

n°1302308
omega2
Posté le 09-02-2006 à 17:10:02  profilanswer
 

dwogsi a écrit :

Tu es bien certain que le "&" ne fonctionne pas en ligne de commande sur Windows? Parceque si je fais un :  
format &
il me dis qu'il n'y a pas de paramètre mais si je fais un
format ¤
il me dit que le paramètre est in correcte, nuance...


J'ai testé avec le programme "php.exe" vu que si on lui donne aucun paramettre, il attend qu'on saisisse du texte sur l'entré standard.
Si windows gérait le "&" comme n'importe quel unix, alors il m'aurait rendu la main dessuite malgré l'attente de php mais là, il attendait que php ai finis son boulot. En bref, "&" ne se préoccupe pas de ce caractére. Il s'en contrefiche.
 
lyzergik25 > C'estpas un probléme de solidarité mais de nombre d'idée. Et là, j'en ai plus.

n°1302315
dwogsi
Défaillance cérébrale...
Posté le 09-02-2006 à 17:15:03  profilanswer
 

Je pense que le "&" doit avoir un sens sous windows, mais pas le même que sur Unix car son utilisation produit des résultats pour le moins étranges.

n°1302352
anapajari
s/travail/glanding on hfr/gs;
Posté le 09-02-2006 à 17:39:43  profilanswer
 

Suis pas expert en dos mais a vu de nez je dirais que "&" sert a executer plusieurs commandes en même temps:

Code :
  1. echo a & echo b


donne

Code :
  1. a
  2. b


alors que  

Code :
  1. echo a; echo b


donne

Code :
  1. a;echo b

n°1304155
lyzergik25
Posté le 13-02-2006 à 11:23:26  profilanswer
 

Toujours le meme probleme ... je resume ?? ou ... vous avez eu la force de lire ?

n°1304161
lyzergik25
Posté le 13-02-2006 à 11:28:56  profilanswer
 

j'ai un timer (en "C" ) qui execute un fichier .bat toutes les 2 minutes pendant 1heure ensuite il s'arrete .  
 
Sur ma page PHP j'utilise la fonction " exec(); " pour lancer le timer ;
 
Logiquement d'apres ce que je lis sur le net :  
 
  >>>>      Note : Si vous démarrez un programme en utilisant cette fonction et que vous voulez le laisser tourner en arrière plan, vous devez vous assurer que la sortie du programme est redirigée vers un fichier, ou un autre flux de sortie, sinon PHP attendra jusqu'à la fin de l'exécution du programme.  
 
Logiquement rediriger vers un fichier de sortie empêcherais de faire pédaler ma page PHP dans le vide .. mais bon aucune différence entre  
 
exec("C:\GSM\Timer.exe" );  
et  
exec("C:\GSM\Timer.exe >sortie.txt" );  
 
voilà en gros le problème est là !!

n°1304224
afbilou
pouet your life
Posté le 13-02-2006 à 12:43:44  profilanswer
 

pense a echapper les \ dans ta chaine de caractere (\ -> \\)

n°1304249
lyzergik25
Posté le 13-02-2006 à 13:11:19  profilanswer
 

Rien n'y fait la page PHP pedale toujours autant dans le vide

n°1304411
lyzergik25
Posté le 13-02-2006 à 15:14:43  profilanswer
 

Pour info j'ai résolu le problème en utilisant la fonction "psexec" lien >> http://www.sysinternals.com/Utilities/PsExec.html ;
Il faut copier le psexec.exe dans C:\Windows\System32 , cela permet d'utiliser cette commande en ligne de commande ... (est-ce bien clair , j'ai un doute lol..)
Ensuite j'ai donc fait un  " exec("psexec \\127.0.0.1 -d C:\GSM\timer.exe" ); "
Cela permet donc de lancer en arriere plan le programme et plus de blocage de la page PHP .... voila j'espère que ca pourra aider quelqun !!!

n°1304545
afbilou
pouet your life
Posté le 13-02-2006 à 16:51:14  profilanswer
 

lyzergik25 a écrit :

cela permet d'utiliser cette commande en ligne de commande ... (est-ce bien clair , j'ai un doute lol..)


Non ca permet d'utiliser la commande sans specifier le chemin absolu ou relatif pour peu que windows\system32 soit defini dans le path ... et il y est par defaut.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  !i! RESOLU !i! fonction exec() attente fin du prog

 

Sujets relatifs
[Sql] Besoin d'aide pour une requête ( simple pourtant ... ) [résolu][Résolu]Obtenir le code source.
[Résolu]Variance de taille de page entre FF et IEExcel 2002 - longueur à l'ouverture d'un fichier (résolu)
[Excel] Fonction - appel a une macro comp.[ANT Resolu] cactus Ant Task
Existe-t-il une fonction qui cherche dans un flux ?[resolu]Debutant en php - derniere connection
[RESOLU]verification d'un formulaire[CSS]css non reconnu par ie mais OK avec firefox et opera [Résolu]
Plus de sujets relatifs à : !i! RESOLU !i! fonction exec() attente fin du prog


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR