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

  FORUM HardWare.fr
  Programmation
  PHP

  exec()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

exec()

n°1079072
andlio
Posté le 11-05-2005 à 11:09:38  profilanswer
 

bonjour za vous !
 
j'ai besoin d'éxecuter un commande unix dans le script que je lance en ligne de commande, je fais donc :

Code :
  1. $cmd="/usr/bin/crontab -l";
  2. $res=shell_exec($cmd);
  3. echo $res;


 
 
 
mais rien ne s'affiche. par contre quand je fais la même chose mais en mettant $cmd="ls -l", ça m'affiche bien le contenu du répertoire...
 
j'ai également essayé avec exec()... mais toujours la mm chose
 
une idée ??


Message édité par andlio le 11-05-2005 à 11:11:43
mood
Publicité
Posté le 11-05-2005 à 11:09:38  profilanswer
 

n°1079076
skeye
Posté le 11-05-2005 à 11:10:55  profilanswer
 

et quand tu l'exécutes à la main ton crontab -l, tu as quelquechose?:o


---------------
Can't buy what I want because it's free -
n°1079078
cerel
Posté le 11-05-2005 à 11:11:48  profilanswer
 

Et si tu essaye ca "/usr/bin/crontab -l | cat "
Tu as quelque chose en retour ?
 
C'est peut-etre une histoire de buffer de sortie.

n°1079079
andlio
Posté le 11-05-2005 à 11:12:03  profilanswer
 

skeye a écrit :

et quand tu l'exécutes à la main ton crontab -l, tu as quelquechose?:o


 
oui  :??:

n°1079081
andlio
Posté le 11-05-2005 à 11:13:40  profilanswer
 

cerel a écrit :

Et si tu essaye ca "/usr/bin/crontab -l | cat "
Tu as quelque chose en retour ?
 
C'est peut-etre une histoire de buffer de sortie.


 
ça marche pas non plus. J'ai également essayé de rediriger la sortie vers un fichier mais c'est pareil.


Message édité par andlio le 11-05-2005 à 11:14:33
n°1079124
cerel
Posté le 11-05-2005 à 11:34:08  profilanswer
 

Euhhh, au fait, quand tu executes tes commandes via php, c'est l'user avec lequel apache a ete lance qui les execute.
Donc c'est l'user "www-data" normalement, donc faut verifier que cet user a acces a cron.
 
Tu peux essayer ca :
"su www-data" (en tant que root, ca te permet de te "loguer" en tant que l'user www-data, apres tu peux essayer de voir si ta commande fonctionne).
 
Ce qui se passe, c'est que il y a peut-etre une erreur qui s'affiche, mais lors de nos tests on ne redirigeait que la sortie standard et non la sortie d'erreur.


Message édité par cerel le 11-05-2005 à 11:36:12
n°1079128
nORKy
Grmmph...
Posté le 11-05-2005 à 11:35:58  profilanswer
 

qq soit le user, le shell_exec/exec ne renvoi pas dans ce cas un message d'erreur ?? (style : permission denied)

n°1079138
cerel
Posté le 11-05-2005 à 11:41:18  profilanswer
 

Si un message est envoye, ce dernier risque d'etre envoye sur la sortie d'erreur, qui n'est pas la meme que la sortie standard.
 
La console a tendance a afficher la sortie standard et la sortie erreur a la fois, donc du coup on se rend pas forcement compte que c'est deux choses separees.

n°1079154
andlio
Posté le 11-05-2005 à 11:49:53  profilanswer
 

cerel a écrit :

Euhhh, au fait, quand tu executes tes commandes via php, c'est l'user avec lequel apache a ete lance qui les execute.
Donc c'est l'user "www-data" normalement, donc faut verifier que cet user a acces a cron.
 
Tu peux essayer ca :
"su www-data" (en tant que root, ca te permet de te "loguer" en tant que l'user www-data, apres tu peux essayer de voir si ta commande fonctionne).
 
Ce qui se passe, c'est que il y a peut-etre une erreur qui s'affiche, mais lors de nos tests on ne redirigeait que la sortie standard et non la sortie d'erreur.


nORKy a écrit :

qq soit le user, le shell_exec/exec ne renvoi pas dans ce cas un message d'erreur ?? (style : permission denied)


 
l'utilisateur www-data n'existe pas.
si l'utilisateur n'existe pas, une ligne s'affiche disant "no crontab for utilisateur".
Donc dans tous les cas je devrais avoir un message, mais meme en redirigeant la sortie d'erreur (en écrivant : /usr/bin/crontab -l >& ~moi/test.txt) ça ne marche pas. le fichier n'est même pas créé.

n°1079283
Phoxx
Posté le 11-05-2005 à 13:07:05  profilanswer
 

sacré andlio...
je suis d'accord avec toi

mood
Publicité
Posté le 11-05-2005 à 13:07:05  profilanswer
 

n°1079717
cerel
Posté le 11-05-2005 à 16:17:22  profilanswer
 

La "non creation" du fichier est encore un probleme de droits.
 
As-tu modifie les droits de ton repertoire afin d'autoriser l'ecriture pour tout le monde ? Si c'est pas le cas, tu ne pourra pas creer le fichier.
 
Le mieux dans ce genre de cas c'est d'utiliser "/tmp", ce repertoire est prevu pour ce genre de choses, et normalement n'importe qui peut ecrire dedans.
Alors essaye de creer le fichier la dedans.
 
[edit]
Apres un rapide test sur ma debian, j'ai ca :

$ crontab -u www-data -l &> /tmp/test_err
$ cat /tmp/test_err
no crontab for www-data
$ crontab -u www-data -l > /tmp/test_std
$ cat /tmp/test_std

test_err est cree et contient le message d'erreur
test_std est bien cree, mais ne contient rien
 
Par consequent le message s'affiche dans stderr, donc si l'user ne possede pas de crontab, c'est normal que l'exec via php ne donne rien en retour.
[/edit]


Message édité par cerel le 11-05-2005 à 16:23:29

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

  exec()

 

Sujets relatifs
Problème avec Runtime.exec()Pb safe_mode et safe_mode_exec_dir
Problème avec la commande "exec" en PHPExecuter commande externe (exec, system)
[PHP] exec et process cmd (windows 2000)Droits d'exec sur un batch distant
Problemes avec execExec() + free
Quelqu un connait Alg'Exec ?Pourquoi lancement JVM obligatoire avant exec appli.
Plus de sujets relatifs à : exec()


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