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

Unix Discussion :

executer une commande system linux en php


Sujet :

Unix

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut executer une commande system linux en php
    Bonjour à tous,

    J'aimerais exécuter une commande linux sous php. J'ai essayé avec shell_exec et exec aussi mais ça ne passe pas.

    Voici la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    shell_exec('asterisk -rx "gsm send ussd 3 *222#" >> solde.txt');
    ?>
    Merci de m'aider

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Bonjour

    Question bête: Es-tu sûr que ton serveur est un serveur linux et non un serveur windows ?

    Sinon, comment sais-tu que la commande ne fonctionne pas ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Bah j'ai executé le script via la page web, après execution le script devrait me créér le fichier solde.txt y compris le resultat de la commande asterisk -rx .....

    J'ai un system linux Centos 6

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Et 'pwd' renvoie le dossier dans lequel tu cherches le fichier ?

    Si le serveur php est en safe-mode, pas d'exécution de shell.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Je ne cherche pas de fichier au fait, j'essaie d'executer la premier instruction asterisk -rx "gsm send ussd *222#" dont j'aimerais que le resultat soit renvoyé dans un fichier solde.txt. La commande shell_exec s'excute je crois car le fichier est créé mais le probleme est qu'il n'ya rien dedans.

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Les applications, quelles qu'elles soient, ont différents canaux pour communiquer.
    0 est l'entrée standard.
    1 est la sortie standard.
    2 est la sortie d'erreur.
    3 et + sont des canaux libres d'utilisation.

    Lorsque tu écris ">>fichier" tu sous-entends "1>>fichier".
    Mais si ton application renvoie des messages d'erreur, elle le fait sur le canal 2.

    Donc, 2 solutions pour avoir des messages:
    • En utilisant "2>>" pour rediriger le canal d'erreur.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      $ ls prout
      ls: impossible d'accéder à prout: Aucun fichier ou dossier de ce type
      $ ls prout >>/dev/null
      ls: impossible d'accéder à prout: Aucun fichier ou dossier de ce type
      $ ls prout 1>>/dev/null
      ls: impossible d'accéder à prout: Aucun fichier ou dossier de ce type
      $ ls prout 2>>/dev/null
      $
    • En redirigeant le canal d'erreur dans la sortie standard, auquel cas, les messages d'erreur et de sortie seront mélangés.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      $ ls >/dev/null 2>&1 
      $
      Attention, l'ordre est important! >/dev/null 2>&1 n'est pas équivalent à 2>&1 >/dev/null


    Sinon, en récupérant le code par la fonction exec() plutôt que shell_exec(), tu peux savoir ce qui s'est mal passé.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    si je comprends bien, je dois modifier ma syntaxe par asterisk -rx "gsm send ussd 1 *222#" > solde.txt >2&1 ?

  8. #8
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    J'ai essayé la commande que tu m'as suggérée Flodelarab
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    asterisk -rx "gsm send ussd 3 *222#"> solde.txt >2&1
    et j'ai ceci dans le fichier solde.txt : Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)

  9. #9
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Et bien BINGO!

    L'intuition était bonne: la commande que tu veux exécuter plante.

    Ton "asterisk" est-il bien installé ? Il ne semble pas trouver le fichier asterisk.ctl à sa place.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  10. #10
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Oui j'ai bien vérifié il est bien à sa place et quand j'executes la commande sur la console ça marche bien

  11. #11
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Salut,

    je m'immisce dans la discussion car un point n'est pas clair (pour moi) :
    Citation Envoyé par Flodelarab Voir le message
    Donc, 2 solutions pour avoir des messages:
    Avec cette commande (que j'ai quotée) les messages d'erreur disparaissent, donc comment peux-tu dire "solutions pour avoir des messages"

    Merci,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  12. #12
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    @ byaase:
    Ta question concernant la ligne de commande est résolue.
    Maintenant, c'est un autre problème.

    Quand ton serveur exécute Asterisk, il n'est pas le même utilisateur que toi. Il y a probablement un problème de droit d'accès au fichier.

    @Jipété:
    Les messages disparaissent car dans les deux cas le fichier utilisé comme réceptacle des messages est le fichier /dev/null, poubelle universelle.

    Mais si tu rediriges dans le fichier mon_fichier.txt, tu auras, dans le fichier mon_fichier.txt, les messages d'erreur dans le premier cas, et les messages d'erreur et de sortie dans le second cas.
    Et dans le cas d'inversion des redirections déjà décrite, tu auras les messages d'erreur dans la console (arrivés par le canal "sortie standard", donc récupérable par le pipe traditionnel) et la sortie dans ton fichier mon_fichier.txt.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  13. #13
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    ok, je vois. Comment regler le problème de droit avec apache. J'ai essayé toutes les solutions possibles mais ça me donne la meme chose. J'ai donner les droits à apache d'executer une commande en tant que root en allant dans le fichier /etc/sudoers:

    j'y ai mis: apache ALL=(ALL) NOPASSWD:ALL

    sur la console quand je tape: sudo -u apache sudo asterisk "show version" . ça marche mais sur la page web non. J'arrive toujours pas à trouver le soucis

Discussions similaires

  1. Linux executer une commande avec php
    Par xunil2003 dans le forum Langage
    Réponses: 6
    Dernier message: 14/04/2012, 11h05
  2. Executer une commande sur un serveur linux à partir de php
    Par lanjolanjo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 31/07/2009, 11h14
  3. Executer une commande System en silence ?
    Par t0ny95 dans le forum Débuter
    Réponses: 7
    Dernier message: 18/08/2008, 16h44
  4. executer une commande system
    Par warubi dans le forum VB.NET
    Réponses: 1
    Dernier message: 26/05/2007, 23h57
  5. [Debutant(e)][Système]Executer une commande DOS
    Par iceman dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 18/05/2004, 15h30

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