IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Système] Lancer un script shell


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut [Système] Lancer un script shell
    Hello !

    Je viens de me mettre au php et je suis devant un problème que je n'arrive pas à résoudre après 10h de recherche sur le net... donc voici mon prob : j'aimerai lancer un script shell depuis une page php (sur le même serveur). Est-ce un problème de droit ? car apache a l'utlisateur www et le script est sous le bureau de Root. Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $command = '/bin/bash /root/Desktop/robot-copyright2/robot-copyright';
    	system($command,$retval);
     
    	print "$retval ";
    Merci bcp

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Essaye d'abord ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $command = '/root/Desktop/robot-copyright2/robot-copyright';
    echo system($command, $retval);
    En cas d'échec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $command = '/root/Desktop/robot-copyright2/robot-copyright 2>&1';
    echo system($command, $retval);

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Aïe non désolé, aucune des deux solutions foncitonne... une autre idée ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Si la deuxième ne retourne pas d'erreur du shell et que la première ne retourne pas le résultat escompté, le problème se situe, sans doute, au niveau du script (droits, path...). Mais, dans ce cas le shell doit retourner une erreur. Quelle valeur a $retval?

    As-tu essayé avec une commande simple du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<pre>', system('ls');

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Ben avec le code ci-dessous, il ne me retourne rien du tout..., là je dois dire que je sèche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<pre>', system('ls');
    Mais le script en lui même (il est lancé chaque 6 heures grâce au crontab) tourne parfaitement.
    Lorsque j'ajoute :
    il m'affiche quand même le message "hello world" mais aucune erreur.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par wappyboy
    Ben avec le code ci-dessous, il ne me retourne rien du tout..., là je dois dire que je sèche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<pre>', system('ls');
    Et:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    error_reporting(E_ALL);
    echo '<pre>', system('ls');
    echo 'err -> ', system('ls 2>&1');
    Citation Envoyé par wappyboy
    Mais le script en lui même (il est lancé chaque 6 heures grâce au crontab) tourne parfaitement.
    Lorsque j'ajoute :
    il m'affiche quand même le message "hello world" mais aucune erreur.
    Il affiche ça quand tu l'exécutes en shell, en cron ou quand tu l'appelles depuis PHP avec system()?

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    J'ai mis ton code dans ma page php et le résultat est "err ->". Il n'y a rien d'autre.

    Pour ta question, il n'y a rien qui s'affiche sur ma page web en php. Depuis le shell, ça fonctionne nickel quand je tape la commande directement.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Si ça ne fonctionne pas avec une commande aussi basique que ls, il y un problème au niveau PHP.

    A tout hasard, essaye les autres fonctions shell:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    echo '<pre>';
    echo '<h2>shell_exec</h2>';
    echo shell_exec('ls');
     
    echo '<h2>exec</h2>';
    exec('ls', $sortie);
    print_r($sortie);

  9. #9
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    le résultat du code que tu m'as donné est le suivant :
    shell_exec
    exec
    Array
    (
    )

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Quelle est la valeur de safe_mode dans ton phpinfo()?

  11. #11
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Alors les valeurs sont les suivantes :
    safe_mode Off Off

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Curieux.

    Que donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo (int) function_exists('exec');

  13. #13
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    La réponse :
    1
    Quel est votre diagnosique doctor ?

    J'ai vu une page sympa : http://www.amen.fr/forum/read.php?f=...870&t=9864&v=f, d'après ce que j'ai lu le gars veut faire la même chose que moi mais lui y arrive à la fin...

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Il y est question d'exécuter un script avec les droits root avec sudo. Si www n'a pas les droits, le shell *doit* renvoyer une erreur, soit par le redirection 2>&1 soit dans ta variable $retval. Au fait, tu n'as toujours pas donné sa valeur.

    Essaye toujours de faire un chmod +x ton-script-bash pour que tout le monde puisse l'exécuter.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Pour la question que tu m'avais posée précédemment ? Ben il me sort comme je t'ai marqué : 1
    J'ai fait un chmod +x sur mon script, mais comment vérifier que php peut passer des commandes au système car on dirait qu'il n'a pas le droit d'exécuter des commandes systèmes.

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Je parlais de $retval dans system($command,$retval);

    Pour vérifier si www a les droits pour exécuter ton script (ou ls puisque ls ne semble pas fonctionner non plus), tu te log sous root en console et tu fais un Tu essayes ensuite ton script (et ls).

  17. #17
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    C'est bien vu chef !
    En fait là je remarque que lorsque j'exécute mon script avec root il passe sans problème mais lorsque j'exécute avec le compte apache, il me bloque à chaque fois qu'il veut écrire dans un fichier par le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print logFile "------------- ";
    (c'est du perl).
    Que dois-je faire ? l'autoriser dans la conf de sudoers ?

  18. #18
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Et pr info, $retval me renvoie la valeur 127 qui est une erreur, mais laquelle ?

  19. #19
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    J'ai du nouveau... il n'arrive pas à exécuter un script perl car il n'arrive pas à ouvrir en écriture. Que dois-je faire ?

  20. #20
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Lorsque je fais une simple script perl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    open(File,">>log");
    close(File);
    il me met cette erreur en bas de vim :
    "test.pl" 3L, 35C written
    E138: Can't write viminfo file /var/www/.viminfo!
    Hit ENTER or type command to continue
    As-tu une idée ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/03/2006, 11h27
  2. Réponses: 6
    Dernier message: 01/02/2006, 15h59
  3. [Système] Lancer un script perl avec PHP
    Par pepite dans le forum Langage
    Réponses: 2
    Dernier message: 09/01/2006, 12h30
  4. [Système] Lancer un script sans attendre sa fin ?
    Par parisien dans le forum Langage
    Réponses: 9
    Dernier message: 03/11/2005, 22h09
  5. [Système] Lancer un script Perl
    Par ebaynaud dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 14/10/2004, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo