2017-09-09 33 views
0

USBカメラでjpgをキャプチャするfswebcamを呼び出すスクリプトがあります。私は "chmodの+ X webcam.sh" と、それが実行可能にしました:PHPからraspbianでbashスクリプトを実行する

ファイル:/var/www/html/webcam.sh

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

これには、sudoをせずにコマンドラインで正常に動作しています私は小さなPHPページを作りました:

ファイル:/var/www/html/index.php

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

私がウェブページに行くと、私は空白のページを取得し、何のJPGは作成されません私のwebcamフォルダにあります。

私は、次のエラーを得た: Apache2 error log

だから、私は、PHPで私のコールを修正しようとしました:私もsudoersのファイル

www-data ALL=NOPASSWD: /path/to/script 
に以下を追加しました

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

しかし、私はまだエラーが発生します:apache2 log error

私はこのスレッドからすべてを試しました:How to run .sh script with php?

ご存知ですか?事前に

おかげで、

ビクター

答えて

0

まずオフ:

  • あなたはそれのため非常良い理由を持っていない場合はsudoを使用しないでください。
  • shは必ずしもbashを呼び出すとは限りません。
  • sudoにはパスワードが必要ですが、エラーは表示されませんでした。

私は(二つの違いがある)execの代わりshell_execにしようと提案する:

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

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

問題のもう一つのソースは、許可に関連することができます

ウェブサーバは通常通り動作します別のユーザー。

Webサーバーが出力ディレクトリに実際に書き込むことができることを確認してください。

+0

まだ動作しない場合は、スクリプトの出力を投稿してください。 – d3L

+0

上記のコードを試しましたが、サーバーからエラーが発生しました:HTTPエラー500です。エラーログに「PHP解析エラー:構文エラー、予期しない 'echo'(T_ECHO)/ var/www /html/index.php on line 3 "を参照してください。 私はそれらのエコー行をコメントすると、空白のページが表示され、エラーログに "デバイスを開くエラー:/ dev/video0 open:許可が拒否されました"というメッセージが表示されます –

+1

あなたが許してくれたことを最後に確認しました。だから私はサーバーに "adduser www-data video"でカメラにアクセスする許可を与え、 "chown -R www-data/home/pi/webcam"でフォルダを書き込む許可を与えた。 –

関連する問題