exec()

exec() - PHP - Programmation

Marsh Posté le 11-05-2005 à 11:09:38    

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
Reply

Marsh Posté le 11-05-2005 à 11:09:38   

Reply

Marsh Posté le 11-05-2005 à 11:10:55    

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 -
Reply

Marsh Posté le 11-05-2005 à 11:11:48    

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.

Reply

Marsh Posté le 11-05-2005 à 11:12:03    

skeye a écrit :

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


 
oui  :??:

Reply

Marsh Posté le 11-05-2005 à 11:13:40    

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
Reply

Marsh Posté le 11-05-2005 à 11:34:08    

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
Reply

Marsh Posté le 11-05-2005 à 11:35:58    

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

Reply

Marsh Posté le 11-05-2005 à 11:41:18    

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.

Reply

Marsh Posté le 11-05-2005 à 11:49:53    

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éé.

Reply

Marsh Posté le 11-05-2005 à 13:07:05    

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

Reply

Marsh Posté le 11-05-2005 à 13:07:05   

Reply

Marsh Posté le 11-05-2005 à 16:17:22    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed