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 :

Executer une commande shell


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 208
    Points : 174
    Points
    174
    Par défaut Executer une commande shell
    Bonjour,

    Je souhaite executer une commande dans un terminal, par exemple :
    ffmpeg -i mavideo.mp4 -r 1/10 -s 640x360 -f image2 foo-%03d.jpeg

    Mais je ne parviens pas à executer ce code en passant par la commande exec(ou shell_exec), alors que ce code fonctionne si je le rentre dans le terminal...

    Ya t il une subtilité dans la méthode ? J'avoue que c'est la 1ere fois que je l'utilise...

    Merci par avance de vos lumière.

    Tepaze

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Points : 582
    Points
    582
    Par défaut
    Salut,

    Est-ce que les droits du serveur web sont suffisants pour exécuter une commande shell ? (par exemple est-ce qu'un simple "ls" fonctionne ?)

    Sinon en faisant quelques recherches, ça pourrait venir des flux d'entrée/sortie (cf. https://trac.ffmpeg.org/wiki/Using%2...0PHP%20scripts)

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Points : 582
    Points
    582
    Par défaut
    Je ne connaissais pas ce genre de commande, donc j'ai voulu essayer chez moi^^

    Du coup, en utilisant avconv (qui est un fork de ffmpeg mais qui fonctionne pareil), j'ai réussi à exécuter la commande en mettant les droits d'accès à la vidéo à 777, en rajoutant "2>&1" à la fin de la commande et en mettant des simples quotes autours du nom des photos générées.

    Donc si tu mets du 777 sur la vidéo et que tu écris dans ton script...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shell_exec("ffmpeg -i mavideo.mp4 -r 1/10 -s 640x360 -f image2 'foo-%03d.jpeg' 2>&1")
    ... ça devrait marcher. Petit conseil pour ne pas faire la même connerie que moi, crée un dossier "images" et remplace 'foo-%03d.jpeg' par 'images/foo-%03d.jpeg' (sans oublier de donner les droits d'accès au dossier). Ça t'évitera de te retrouver avec 6 000 images à la racine de ton script

  4. #4
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    C'est en effet probablement un problème de droit.

    Quand tu lances la commande dans ton terminal, tu la lances en tant que toi qui t'es connecté à la machine.

    Quand tu la lancer via une fonction php (telle que "exec" ou autre), c'est un utilisateur spécifique qui lancera la commande (ceci est bien sur configurable dans le httpd.conf).

    Assure toi que cet utilisateur possède bien les droits nécessaires pour pouvoir lancer la commande.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 208
    Points : 174
    Points
    174
    Par défaut
    Merci Thomas et Spartacusply pour vos réponses,

    Je réponds un peu tard, car j'ai été occupé par d'autres choses, je vous prie de m'en excuser.

    Le serveur à bien les droits, puisque la commande ls fonctionne. C'est juste la commande FFMPEG qui ne fonctionne pas.

    Je n'avais pas lu le document que tu me met en lien sur les bonnes pratique conseiller pour et par FFMPEG, merci, c'est très interessant. Je vais peux être changer de technique du coup, bien que ce soit une commande non destiner à un site web public :-)

    J'ai essayé ton code, il fonctionne sous linux, mais sur mac il ne trouve pas la commande (FFMPEG ou AVCONV) alors que FFMPEG est installer (via brew) et fonctionne...

    Je n'en n'était pas loin, mais j'avais des erreurs de syntaxe (' ")...

    Bon ce n'est pas grave pour le mac, mais si il y a des pistes je suis preneur...

    Mais je crois que je vais explorer la piste daemon.

    Bien a vous

    Tepaze

  6. #6
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Le serveur à bien les droits, puisque la commande ls fonctionne.
    Non, cela ne le signifie en rien. Tu peux avoir les droits de lecture mais ne pas avoir les droits en écriture ! Tu peux le vérifier avec cette commande par exemple, qui fait appel au droit d'écriture :


  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 208
    Points : 174
    Points
    174
    Par défaut
    Merci Spartacusply pour cette precision,

    Par chance, les droits en écriture sont bon aussi :-)

    Sous LUbuntu cela fonctionne, sous Mac toujours pas... Ce n'est pas hyper important, mais c'est étrange non ???

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Points : 582
    Points
    582
    Par défaut
    Peut-être un problème de chemin

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 208
    Points : 174
    Points
    174
    Par défaut
    Bravo Thomas, et merci pour ton aide.

    Effectivement il faut indiquer le chemin vers ffmpeg. Pour moi c'est /user/local/bin/

    J'en profite pour indique un autre lien, utile si comme moi vous avez une erreur de ce type :
    /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO Expected in: /opt/local/lib/libJPEG.dylib

    Pour moi, utilisant MAMP, le "Expected" pointant dans un dossier de MAMP. Il suffit alors d'indiquer ce chemin dans la commande indiquer la :
    https://lists.macosforge.org/piperma...er/022665.html

    Pour finir, ca ne fonctionnait toujours pas, alors j'ai utilisé avconv (qui ne fonctionnait pas non plus avant) et la oh miracle tout fonctionne....

    Merci à tous.

    Tepaze

  10. #10
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : amateur
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2014
    Messages : 16
    Points : 11
    Points
    11
    Par défaut après la bataille...
    je me réveille après la bataille mais on ne sait jamais, ça peut servir à quelqu'un d'autre dans le futur.

    J'ai eu exactement le même problème et en fait c'est le caractère "%" qui ne passe la fenêtre MS-DOS car c'est un caractère spécial et si on regarde bien la commande, on s'aperçoit que ce qu'on a scrupuleusement et correctement tapé sous NOTEPAD (ou autre éditeur) avec le "%" ne se retrouve pas sur la ligne de commande (ou alors il faudrait doubler le caractère "%" ou quelque chose dans le genre mais du coup, j'avais trouvé une autre solution).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. iptable peut il executer une commande shell ?
    Par htristra dans le forum Sécurité
    Réponses: 2
    Dernier message: 02/01/2011, 15h18
  2. Réponses: 8
    Dernier message: 25/09/2008, 21h22
  3. executer une commande shell en c++
    Par robux dans le forum Linux
    Réponses: 4
    Dernier message: 25/09/2007, 19h01
  4. [C] code pour executer une commande shell
    Par waldoun dans le forum Linux
    Réponses: 3
    Dernier message: 05/05/2007, 23h41
  5. execute une commande shell en java
    Par freakfm dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 07/10/2006, 18h03

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