PHP shell_exec

Parce qu'il en faut pour tout le monde, discutez ici d'ADA, de shell et autres Wolfram...

Modérateur : Francois

Répondre
salade
Messages : 18
Enregistré le : dim. 19 oct. 2014 20:36

PHP shell_exec

Message par salade » jeu. 26 mars 2015 16:46

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

Korhm
Raspinaute
Messages : 219
Enregistré le : ven. 19 sept. 2014 08:13
Localisation : Val de Marne

Re: PHP shell_exec

Message par Korhm » ven. 27 mars 2015 13:39

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) ?

Avatar du membre
Manfraid
Modérateur
Messages : 1401
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: PHP shell_exec

Message par Manfraid » ven. 27 mars 2015 14:07

question toute bête, l'utilisateur www-data a-t-il le droit d'utiliser la commande sudo ?
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

domi
Administrateur
Messages : 2290
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: PHP shell_exec

Message par domi » ven. 27 mars 2015 16:01

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:

Avatar du membre
EVOTk
Modérateur
Messages : 802
Enregistré le : sam. 20 sept. 2014 02:36

Re: PHP shell_exec

Message par EVOTk » ven. 27 mars 2015 17:17

NAS : DS3615xs Xpenology - 8To + 2x 3To + 2x 4To WD Red - APC Back-UPS Pro 900
Imprimante 3D : Dagoma DiscoEasy 200
Surveillance Réseau : Smokeping sur Rasp. B / Raspbian
Arcade : Raspberry Pi 3 sous RecalBox

salade
Messages : 18
Enregistré le : dim. 19 oct. 2014 20:36

Re: PHP shell_exec

Message par salade » mar. 31 mars 2015 08:00

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

Répondre

Retourner vers « Autres langages »