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 confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 209
    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 chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    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 chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    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

    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
    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 confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 209
    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

    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
    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 confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 209
    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 chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

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

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 209
    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 averti
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 16
    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, 14h18
  2. Réponses: 8
    Dernier message: 25/09/2008, 20h22
  3. executer une commande shell en c++
    Par robux dans le forum Linux
    Réponses: 4
    Dernier message: 25/09/2007, 18h01
  4. [C] code pour executer une commande shell
    Par waldoun dans le forum Linux
    Réponses: 3
    Dernier message: 05/05/2007, 22h41
  5. execute une commande shell en java
    Par freakfm dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 07/10/2006, 17h03

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