2017-09-09 1 views
0

J'ai un script qui appelle fswebcam pour capturer un jpg avec ma caméra USB. Je l'ai fait exécutable avec "chmod + x webcam.sh":Exécution d'un script bash depuis PHP sur raspbian

fichier: /var/www/html/webcam.sh

#!/bin/bash 
DATE=$(date + "%Y-%m-%d_%H%M") 
fswebcam -r 640x480 /home/pi/webcam/$DATE.jpg 

Cela fonctionne bien dans la ligne de commande sans sudo, donc Je l'ai fait une petite page PHP:

fichier: /var/www/html/index.php

<?php 
$output = shell_exec('sh /var/www/html/webcam.sh'); 
echo "<pre>$output</pre>"; 
?> 

Quand je vais à la page Web, je viens d'obtenir une page blanche et pas jpg est créé dans mon dossier webcam.

j'ai eu l'erreur suivante: Apache2 error log

J'ai essayé de modifier mon appel en PHP, à:

<?php 
$output = shell_exec('/usr/bin/sudo /bin/bash /var/www/html/webcam.sh'); 
echo "<pre>$output</pre>"; 
?> 

J'ai aussi ajouter ce qui suit pour déposer sudoers

www-data ALL=NOPASSWD: /path/to/script 

Mais je reçois toujours l'erreur: apache2 log error

J'ai tout essayé depuis ce fil: How to run .sh script with php?

Avez-vous une idée?

Merci à l'avance,

Victor

Répondre

0

Tout d'abord:

  • Ne pas utiliser sudo si vous ne disposez pas d'un très bonne raison pour cela.
  • sh n'invoque pas nécessairement bash.
  • sudo attend un mot de passe, mais vous n'avez pas fourni d'où l'erreur.

Je vous conseille d'essayer avec exec au lieu de shell_exec (il y a une différence entre les deux):

<?php 
    exec('/var/www/html/webcam.sh', $output, $exitCode); 

    echo 'Exit code: '.$exitCode.' <hr />'; 
    echo implode('<br />', $output); 

Une autre source de votre problème pourrait être l'autorisation liée:

Le serveur Web fonctionne habituellement comme un utilisateur différent.

Assurez-vous que le serveur Web peut réellement écrire dans le répertoire de sortie.

+0

Si cela ne fonctionne toujours pas, veuillez publier la sortie du script. – d3L

+0

J'ai essayé le code ci-dessus, mais j'ai reçu une erreur du serveur: Erreur HTTP 500. Dans le journal des erreurs je peux voir: "Erreur d'analyse PHP: erreur de syntaxe, 'echo' inattendu (T_ECHO) dans/var/www /html/index.php sur la ligne 3 ". Si je commente les lignes d'écho, je reçois une page blanche, et le journal des erreurs donne: « dispositif d'ouverture d'erreur:/dev/video0 ouvert: Autorisation refusée » –

+1

Ok, il travaille maintenant! J'ai vérifié la dernière chose que vous m'avez dite au sujet de la permission. J'ai donc donné l'autorisation au serveur pour accéder à la caméra: « adduser vidéo www-data » et lui a donné la permission d'écrire le dossier avec: « chown -R www-data/home/pi/webcam ». –