Page 1 sur 1

PHP shell_exec

Posté : jeu. 26 mars 2015 16:46
par salade
Bonjour,

J'aimerais exécuter une commande shell via une page php.
Je "developpe" une interface pour générer des timelapses, le serveur apache/php tourne sur un raspberry pi.
Via un formulaire, je récupère les paramètres du timelapse en tant que variables puis je passe la commande.
Le formulaire brut de pomme: http://www.moreau-fr.net/tmp/timelapse/index.php
Je concatène ensuite la ligne de commande avec les variables, c'est fonctionnel.
Je stocke ma ligne de commande dans une variable "cmd"

Code : Tout sélectionner

<?
$cmd = "sudo raspivid -t $t -tl $tl -o $o%0$d.jpg -w $w -h $h -q $q -ev $ev -co $co -br $br -sa $sa -ex $ex -awb $awb"
;?>
Quand j'affiche le contenu, la syntaxe est correcte :

Code : Tout sélectionner

sudo raspivid -t 10000 -tl 1000 -o IMG_%04d.jpg -w 2592 -h 1944 -q 100 -ev 0 -co 0 -br 0 -sa 0 -ex auto -awb off
Le hic, c'est quand j'éssaie de passer la commande concaténée, soit $cmd via shell_exec.
Je me doute qu'il y a un problème de syntaxe.

Code : Tout sélectionner

<?
$output = shell_exec('echo "$cmd"');
echo "<pre>$output</pre>";
?>
En passant la commande non concaténée, donc sans utiliser $cmd, je n'arrive à rien non plus.
J'ai éssayé les syntaxes suivantes :

Code : Tout sélectionner

<?
//$output = shell_exec('sudo raspivid -t "'.$t.'" -tl "'.$tl.'" -o "'.$o.'" %0 "'.$d.'".jpg -w "'.$w.'" -h "'.$h.'"');
//$output = shell_exec('sudo raspivid -t '.$t.' -tl '.$tl.' -o '.$o.' %0 '.$d.'.jpg -w '.$w.' -h '.$h.'');
//$output = shell_exec('sudo raspivid -t "$t" -tl "$tl" -o "$o" %0 "$d".jpg -w "$w" -h "$h"');
//$output = shell_exec('sudo raspivid -t '.escapeshellarg($t).' -tl '.escapeshellarg($tl).' -o '.escapeshellarg($o).' %0 '.escapeshellarg($d).'.jpg -w '.escapeshellarg($w).' -h '.escapeshellarg($h).'');
echo "<pre>$output</pre>";
?>
En revanche, si je fais un :

Code : Tout sélectionner

<?
$ls = shell_exec('ls -la');
echo "<pre>$ls</pre>";
?>
Cela fonctionne parfaitement, idem si je lance la commande via un script :

Code : Tout sélectionner

<?php
//$output = shell_exec('sudo /home/pi/timelapse.sh');
//echo "<pre>$output</pre>";
?>
Voilà, je ne maitrise pas bien la syntaxe php, si quelqu'un "voit" le problème, je suis preneur.

Cordialement,

Laurent

Re: PHP shell_exec

Posté : ven. 27 mars 2015 13:39
par Korhm
Bonjour,

As-tu essayé avec le texte en dur directement

Code : Tout sélectionner

<?
$output = shell_exec("sudo raspivid -t 10000 -tl 1000 -o IMG_%04d.jpg -w 2592 -h 1944 -q 100 -ev 0 -co 0 -br 0 -sa 0 -ex auto -awb off");
echo "<pre>$output</pre>";
?>
Sinon, c'est peut-être un problème à cause du caractère "%".
Ca donne quoi en échappant ce caractère (ou en le supprimant juste pour des tests) ?

Re: PHP shell_exec

Posté : ven. 27 mars 2015 14:07
par Manfraid
question toute bête, l'utilisateur www-data a-t-il le droit d'utiliser la commande sudo ?

Re: PHP shell_exec

Posté : ven. 27 mars 2015 16:01
par domi
Manfraid a écrit :question toute bête, l'utilisateur www-data a-t-il le droit d'utiliser la commande sudo ?
+1
C'est la question que je me pose en lisant ce sujet.
et de plus c'est l'erreur la plus courante :lol:

Re: PHP shell_exec

Posté : ven. 27 mars 2015 17:17
par EVOTk

Re: PHP shell_exec

Posté : mar. 31 mars 2015 08:00
par salade
Bonjour,

Merci pour vos réponses, oui, le www-data a bien les droits.
J'ose à peine dire d'ou vient l'erreur tellement c'est grossier :
En fait je lançais la commande raspivid (vidéo) avec des paramètres propre à raspistill (image).
Du coup ça fonctionne parfaitement.

La question que je me pose maintenant parmis tant d'autres, c'est de trouver le moyen d'afficher les infos retournées par raspistill afin que l'on sache ou l'on en est, car en l'état, la page ne retourne rien avant la fin du processus.

Merci à tous pour vos réponses