Fonction exec()

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fonction exec()

par Sékiltoyai » 21 juil. 2009, 23:58

djutopie a écrit:
mais le programme tourne en boucle sans s'arreter.

Est ce que c'est son exécution normale ?
Trace le au besoin pour savoir pourquoi il boucle.
Non j'avais dit qu'il s'arretait correctement avec une console ms-dos donc je suis sur qu'il marche.
Je n'ai pas remis en cause qu'il marchait, je voulais te demander de regarder pourquoi il se comporte différemment si tu le lances par PHP.
D'où vient ce System.exit(0). Est ce qu'il signifie une erreur. A vrai dire, on s'en fout de son code d'erreur (sauf si le code d'erreur est documenté). Ce qui importe, c'est ce qui a causé la fin du programme.
Il est a la fin du programme pour signaler que tout s'est bien passé. Par convention le code
sortie 0 signifie cela.
Je sais ce que signifie le code de retour 0. Mais comment peut-il boucler et retourner sans erreur ?

T'es sûr que tu cherches à régler ton problème ? Tu sais moi je m'en fous que ça ne marche pas, j'essaye de te donner des pistes pour que tu règles ton problème. Depuis tout à l'heure je te demande de regarder le code java et de voir ce qui le fait "boucler", ce qui le fait se comporter différemment. Si tu ne veux pas le faire c'est ton problème.

alors je comprends toujours pas alors pourquoi t'a répondu
var_dump() est ton ami Smile
J'ai mal lu. Voilà, t'as gagné, t'es content ? :)
Tu parles du programme php. Tu exécutes php en ligne de commande ?

par djutopie » 21 juil. 2009, 23:46

djutopie a écrit:
mais le programme tourne en boucle sans s'arreter.

Est ce que c'est son exécution normale ?
Trace le au besoin pour savoir pourquoi il boucle.
Non j'avais dit qu'il s'arretait correctement avec une console ms-dos donc je suis sur qu'il marche.

---
D'où vient ce System.exit(0). Est ce qu'il signifie une erreur. A vrai dire, on s'en fout de son code d'erreur (sauf si le code d'erreur est documenté). Ce qui importe, c'est ce qui a causé la fin du programme.
Il est a la fin du programme pour signaler que tout s'est bien passé. Par convention le code
sortie 0 signifie cela.

---
var_dump() est la plupart du temps plus détaillé, mais en l'occurrence, si le tableau est vide, le tableau est vide…
alors je comprends toujours pas alors pourquoi t'a répondu
var_dump() est ton ami Smile
a mon post :
renvoie array quand je l'affiche avec print_r pardon
---
Tu parles du programme php. Tu exécutes php en ligne de commande ?
J'ai un serveur apache en local, et je n'éxecute pas en ligne de commande j'ai des
fichiers php codé avec bloc-note.

---

Mais je suis persuadé que l'erreur vient de l'allocation mémoire car quand j'éxecute
sous ms dos avec -xmx<256M ca boucle aussi enfin du moins le programme ne se termine pas.
Donc il me faudrait ce moyen de pouvoir règler ce paramètre mais malheuresement
memory_limit n'a pas l'air chaud de faire ce que je lui demande :P

---

EDIT : Bon en fait j'ai trouvé... Le programme java prenait des chemins absolus et du
coup vu que je lançait "java -jar ressources/monfic.jar..." il trouvait pas les bon path.


Merci pour votre aide

par Sékiltoyai » 21 juil. 2009, 23:40

mais le programme tourne en boucle sans s'arreter.
Est ce que c'est son exécution normale ?
Trace le au besoin pour savoir pourquoi il boucle.
Ca fini par un System.exit(0) mais le probleme viens surement de php vu qu'avec
Ms-dos "l'éxécution se déroule correctement avec un magnifique exit".
D'où vient ce System.exit(0). Est ce qu'il signifie une erreur. A vrai dire, on s'en fout de son code d'erreur (sauf si le code d'erreur est documenté). Ce qui importe, c'est ce qui a causé la fin du programme.
D'autre part je ne vois pas la diff entre print_r et var_dump.
var_dump() est la plupart du temps plus détaillé, mais en l'occurrence, si le tableau est vide, le tableau est vide…

par Sékiltoyai » 21 juil. 2009, 23:35

Tu parles du programme php. Tu exécutes php en ligne de commande ?

par djutopie » 21 juil. 2009, 23:26

Pour le débuggage, il faut garder un var_dump sur la sortie du script, donc le $str_ret. Il faut aussi faire des sorties sur le programme java si tu as la main dessus. Donc si possible, tu places des System.out.println() pour tracer le code et regarder où il s'arrête.
mais le programme tourne en boucle sans s'arreter.
Donc tu as mis la limite à 512K et non 512M
j'ai aussi essayé avec 524288000 mais ca marche pas non plus ca alloue toujours pas plus de 20meg
Il faut aussi faire des sorties sur le programme java
Ca fini par un System.exit(0) mais le probleme viens surement de php vu qu'avec
Ms-dos "l'éxécution se déroule correctement avec un magnifique exit".

D'autre part je ne vois pas la diff entre print_r et var_dump..
cf. post #7.

par Sékiltoyai » 21 juil. 2009, 23:09

EDIT4: bon ben apparemment ca va pas etre possible... voici l'erreur que j'obtiens :
Fatal error: Allowed memory size of 512000 bytes exhausted (tried to allocate 24576 bytes) in D:\Program Files\ms4w\apps\Atlas\fonctions\fn_legende.php on line 21
Donc tu as mis la limite à 512K et non 512M

par Sékiltoyai » 21 juil. 2009, 23:08

Mais qu'est ce que tu racontes? mon probleme c'est pas l'affichage d'une variable mais l'éxecution d'un bat.
Ouh, attention, ne dépasse pas les bornes hein :)
J'ai très bien compris ton problème. Seulement on essaye de t'apprendre à débugguer. Donc au lieu de caractériser ton impatience en essayant de nous faire croire qu'on ne sait pas ce qu'on dit, remets toi plutôt en question. :)
Parce que, d'une part, si tu avais appliqué mon conseil, en plus de régler le problème, tu saurais pourquoi ça ne marchait pas, et d'autre part, si tu savais utiliser un var_dump(), lire la doc, et chercher avec google, tu n'aurais même pas eu besoin de venir poster ici, puisque tu aurais réglé le problème depuis longtemps.

Donc si tu viens ici, ne remets pas en cause nos conseils :)
EDIT3: j'ai règlé le memory_limit a 512M (ce qui est suffisant pour mon programme)
dans le php.ini et vérifié dans le phpinfo() c'est bon.
Par contre on dirai qu'il ne le prends pas en compte.. quand je regarde dans le
gestionnaire de taches -> processus lorsque j'éxécute le prog via php il consomme
pas plus de ~20M (insuffisant) alors que avec une commande ms dos il consomme
~250M et fonctionne.
De un ne pas fonctionner, ça ne veut rien dire, quand ça fonctionne c'est qu'il y a un comportement anormal, donc différent, donc qui se décrit. Dans ce cas là il faut donner l'erreur, s'il n'y a pas d'erreur, vérifier que le niveau d'erreur est au maximum.
Pour le débuggage, il faut garder un var_dump sur la sortie du script, donc le $str_ret. Il faut aussi faire des sorties sur le programme java si tu as la main dessus. Donc si possible, tu places des System.out.println() pour tracer le code et regarder où il s'arrête.
Tu parles du programme php. Tu exécutes php en ligne de commande ? Si c'est le cas, ce n'est peut être pas le même php.ini, donc utilise php -i et non le phpinfo().

par djutopie » 21 juil. 2009, 21:23

Mais qu'est ce que tu racontes? mon probleme c'est pas l'affichage d'une variable mais l'éxecution d'un bat. Bref j'avance un peu finalement j'ai mis directement ca dans le code (je ne passe plus par le .bat):

Code : Tout sélectionner

exec("java -Xmx1024M -jar ModuleExport.jar 2 1 F:/t.tif",$str_ret, $flag);
mais le programme tourne en boucle sans s'arreter.
Je continue les recherches.

EDIT: mon programme consomme pas mal de ressources serai-ce du a ca?
il faut que je regle le xmx au minimum a 256m sinon le programme java crash
(java heap space).

EDIT2: j'ai tester avec un simple

Code : Tout sélectionner

System.out.println("test");
dans le main et la ca fonctionne, donc ca doit etre bel et bien du a l'allocation de mémoire
pour l'exécution des programmes...

EDIT3: j'ai règlé le memory_limit a 512M (ce qui est suffisant pour mon programme)
dans le php.ini et vérifié dans le phpinfo() c'est bon.
Par contre on dirai qu'il ne le prends pas en compte.. quand je regarde dans le
gestionnaire de taches -> processus lorsque j'éxécute le prog via php il consomme
pas plus de ~20M (insuffisant) alors que avec une commande ms dos il consomme
~250M et fonctionne.

EDIT4: bon ben apparemment ca va pas etre possible... voici l'erreur que j'obtiens :
Fatal error: Allowed memory size of 512000 bytes exhausted (tried to allocate 24576 bytes) in D:\Program Files\ms4w\apps\Atlas\fonctions\fn_legende.php on line 21
j'ai aussi essayé avec 524288000 mais ca marche pas non plus ca alloue toujours pas plus de 20meg

Merci.

par Sékiltoyai » 21 juil. 2009, 21:07

var_dump() est ton ami :)

par djutopie » 21 juil. 2009, 20:56

renvoie array quand je l'affiche avec print_r pardon

par Sékiltoyai » 21 juil. 2009, 20:50

Oui str_ret renvoie Array()
1/ Ya pas quelquechose qui te mets la puce à l'oreille ?
2/ RTFM : exec()

par djutopie » 21 juil. 2009, 20:03

Oui str_ret renvoie Array(), exec renvoie rien et flag renvoie 1.
Mais ce qui est bizarre c'est que quand je l'exécute avec une commande ms dos ca fonctionne.

par Ryle » 20 juil. 2009, 22:23

Et as-tu regardé ce que contient $str_ret ? et ce que retourne exec() ?
Puisqu'il ne s'agit plus de commande php, il serait utile de récupérer les éventuels messages d'erreur :)

par djutopie » 20 juil. 2009, 21:48

J'ai testé sans les guillemets même résultat..

par Ryle » 20 juil. 2009, 21:41

La fonction exec() attend une chaine en paramètre qu'elle va exécuter... or toi tu lui passe une chaine (entre guillemets) qui contient une chaine (entre apostrophes). Résultat le dos ne la reconnait pas comme une commande et ne peut l'exécuter...