Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[résolu] Erreur avec la fonction exec()


johnkro

Messages recommandés

Je crois que le choix de "ls" c'était surtout pour l'exemple :P

Mettre les commandes dans un script ok, mais ça ne change rien au fait que le script doit pouvoir être accessible depuis /usr/local/php/bin

 

Oui le ls, c'était juste un exemple. Le but de l'utilisation de la fonction exec() est de pouvoir gèrer des configurations de serveurs stockés dans une base CVS. Je veux donc pouvoir exécuter les commandes cvs à partir de la fonction exec. Ca marche, mais j'ai pas mal de problème de droits là, c'est casse-bonbon lol...

 

 

UP :

j'ai une erreur avec : exec ("cvs commit -m 'msg' /home/www/cvs/test_cvs");

Enfin c'est pas vraiment une erreur, mais il ne se pass rien...

Alors que quand je tape la commande n'importe ou dans l'arborescence, le commit s'effectue correctement...

Modifié par johnkro
Lien vers le commentaire
Partager sur d’autres sites

J'avais pas fait gaffe, en fait c'est la suite de ce topic : http://forum.zebulon.fr/utilisation-de-php...vs-t142378.html

 

j'ai une erreur avec : exec ("cvs commit -m 'msg' /home/www/cvs/test_cvs");

Enfin c'est pas vraiment une erreur, mais il ne se pass rien...

Comment tu récupères les entrée et sortie standards ?

Tu peux récupérer le code retour de ta commande ?

(Ouais, je sais, si je cherchais ces infos dans le manuel de PHP j'aurais peut-être les réponses....)

Comment est censé se comporter le "-m 'msg'" ? Il s'affiche quand, ce message ?

Pourquoi ne pas utiliser le switch "-Q" ?

Lien vers le commentaire
Partager sur d’autres sites

string exec ( string command , array output , int return_var )

 

Oui on peut rècupèrer le code retourner, comme ceci par exemple avec le ls :

exec('ls',$tab);

$length=count($tab);

for ($i=0; $i<$length; $i++) {

echo "$tab[$i]\n";

}

 

Cependant, avec mon appel de fonction cvs, ça ne me retourne rien... Bizarre. Pourtant le lien symbolique est bien dans le dossier safe_mode_exec_dir, comme pour le ls servant d'exemple...

 

Concernant le -m msg, faut pas faire gaffe, c'est juste un commentaire qui sert à commenter la mise à jour, utiliser pour cvs donc, mais ça ne pose pas de problème ça...

 

Qu'est-ce que le switch -Q ?

 

 

Up:

il y a un truc tres bizarre. Je me suis fait un petit test en CLI, et la ça marche ... Moi pas comprendre

test.php :

<?php

exec ('cvs update /home/www/cvs/test_cvs');

?>

 

j'exécute donc avec php test.php, qui me donne bien :

[www@wqis ~/test_cvs]$ php test.php

cvs update: Updating /home/www/cvs/test_cvs

cvs update: Updating /home/www/cvs/test_cvs/etc

cvs update: Updating /home/www/cvs/test_cvs/postconfigure

cvs update: Updating /home/www/cvs/test_cvs/root

Modifié par johnkro
Lien vers le commentaire
Partager sur d’autres sites

C'est à dire ?

Tu fais "php test.php" ça marche, et si tu demandes à ton serveur Web de charger test.php ça marche pas ?

Y'a (encore ?!?) des restrictions quelque part ?

 

Le switch "-Q" c'est "Quiet". Y'a certains exécutables qui ne supportent pas de ne pas être lancés dans un shell et en foreground, donc qui ont besoin d'être lancés en mode "quiet" pour fonctionner dans ces conditions. J'ignore si cvs en fait partie...

Lien vers le commentaire
Partager sur d’autres sites

C'est à dire ?

Tu fais "php test.php" ça marche, et si tu demandes à ton serveur Web de charger test.php ça marche pas ?

Y'a (encore ?!?) des restrictions quelque part ?

 

Bah je ne sais pas...

Car du coup j'ai essayer d'exécuter le commit en le mettant dans un test.php, que j'ai exécuté depuis mon script principal à l'aide de exec ('php test.php'), pareil ça ne fait rien...

 

(Euh j'espère que c'était clair hum hum)

 

Je continue les tests, mais ça commence à me faire peur la

Lien vers le commentaire
Partager sur d’autres sites

Personne n'a une idée?

 

A mon avis, ça vient d'apache, mais je ne sais pas trop ce qu'il faudrait que j'active ou désactive comme option dans le fichier de conf httpd pour que ça marche...

 

Je résume le problème:

J'arrive à exécuter une commande grâce à la fonction php exec() en ligne de commande : php test.php.

Mais quand je mets cette même fonction dans le code php qui est interprété par Apache pour mon interface graphique, ça ne fait rien.

 

PS: j'ai bien essayé de faire exec('php test.php') ou même d'exécuter un script depuis le code php interprété par Apache, mais rien n'y fait, ça ne marche pas...

 

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Hypothèse : si ça ne marche pas quand c'est Apache qui lance le processus, peut-être est-ce parce que le user qui a lancé httpd n'a pas les droits ?

Avec quel user Apache a-t-il été lancé ?

Quels sont les droits sur tes différents fichiers ?

Peux-tu envisager un script que tu appellerais par exec() et qui ferait d'une manière ou d'une autre un "sudo cvs ..." ?

Lien vers le commentaire
Partager sur d’autres sites

Hypothèse : si ça ne marche pas quand c'est Apache qui lance le processus, peut-être est-ce parce que le user qui a lancé httpd n'a pas les droits ?

Avec quel user Apache a-t-il été lancé ?

Quels sont les droits sur tes différents fichiers ?

Peux-tu envisager un script que tu appellerais par exec() et qui ferait d'une manière ou d'une autre un "sudo cvs ..." ?

 

Normalement, Apache utilise l'utilisateur www, celui là même que j'utilise pour lancer mon script... C'est pour cela que ça me paraît bizarre que ça provienne d'une histoire de droit.

 

J'ai même essayé de rajouté, exec ("su - www"), mais ça ne change rien...

PS: Quand je me connecte en super user www, il ne me demande pas de mot de passe, dcon ça aurait marché sinon...

 

Les droits sur mes différents fichiers? lesquels? car il n'y a pas de problème lorsque je fais le commit cvs avec le script...

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...