セットアップではない:PHPはウェブページから実行[しかしPHP-CLIから大丈夫です]ラズベリーパイ
- ラズベリーパイ
- PHP5 & PHP-CLIがインストールされたWebサーバ
- nginxの
私のPythonスクリプト "lights.py"は、Arduino Unoに接続されたリレー(USB経由でPiに接続されている)を介してリビングルームのライトをオン/オフにするので、本当にクールです。私はPiのGPIOピンを使っていた可能性があることを知っています。それはとにかくここでは関係ありません。
私は私のパイが主催サイトを通じてWebブラウザからスクリプトをアクティブにできるようにしたかったので、私はこのコードを含む/var/wwww/test/lights.phpあります
<?php
exec('python lights.py');
?>
シンプルに、いいえ?まあ、ブラウザでそのページを参照すると、何も表示されませんが、ライトは状態を変えません(予期しない)。 しかし、は、コマンドラインで、ユーザPiとしてログインして、 "php /var/wwww/test/lights.php"を実行することができます。
これは、nginxがwww-dataと呼ばれるこのユーザーを使用していると思われるためだと思います。今私は私のために未知の領域にさまよっています...私はそのユーザーとしてスクリプトを試みることができるかどうかを見るために "www - データ"を試しましたが、決して設定しないパスワードパスワードが機能しませんでした)。
ここのお手伝いをよろしくお願いいたします。
UPDATE - それを確認してください - ここでの "ls -laを/ var/www /のテスト/ライト*"
-rw-r--r-- 1 www-data root 37 Feb 1 23:56 /var/www/test/lights.php
-rwxr-xr-x 1 www-data root 129 Feb 1 23:51 /var/www/test/lights.py
SECOND UPDATEです:
[email protected] ~ $ sudo su - www-data
$ pwd
/var/www
$ php ./test/lights.php
python: can't open file 'lights.py': [Errno 2] No such file or directory
$ python ./test/lights.py
Traceback (most recent call last):
File "./test/lights.py", line 4, in <module>
ser = serial.Serial('/dev/ttyACM0', 9600)
File "/usr/local/lib/python2.7/dist-packages/serial/serialutil.py", line 260, in __init__
self.open()
File "/usr/local/lib/python2.7/dist-packages/serial/serialposix.py", line 276, in open
raise SerialException("could not open port %s: %s" % (self._port, msg))
serial.serialutil.SerialException: could not open port /dev/ttyACM0: [Errno 13] Permission denied: '/dev/ttyACM0'
は「/ devのこと/ ttyACM0 'デバイスが私のArduino接続であるため、そのファイルに出力できないため、ユーザー "www-data"はそのPythonスクリプトを実行するアクセス権がないようです。私はそのデバイスを "chmod"できますか?
サード更新 - 私たちはほとんど終わりに近づいているように感じる!
「ls -g/dev/ttyACM0」を使用して、グループ「dialout」が所有していることがわかりました。 "grep dialout/etc/group"を使って、私はユーザー "Pi"だけが割り当てられていることがわかりました。したがって、私は、今
「は、usermod -a -GダイヤルアウトWWWデータ」と、そのグループにWWW-データを追加したことを確認してください。
[email protected] ~ $ sudo su - www-data
$ cd test
$ php lights.php
$ python lights.py
$
をPHPやPythonスクリプトの作業、およびライトの両方が行ってきましたオンとオフ! BUTブラウザからウェブページ "lights.php"を読み込んでも何も起こりません!
私はこれにPHPファイルを変更し FOURTH UPDATE:私は、それは、EXEC()文からいくつかのデバッグ情報を取得するための適切な方法です集めるものから、
<?php
exec('python lights.py', $output, $return);
print "Output:";
print $output;
print "<br />";
print "Return:";
print $return;
?>
。
Output:Array
Return:1
私はウェブページを更新するときの出力は次のとおりです。
最初のステップ: 'exec()'コールの戻り値と出力を確認します。暗闇の中でデバッグすることは無意味です。 –
'su - $ {user}'はあなたがrootでない限り '$ {user}'パスワードを要求します。 'sudo su - $ {user}'を試して最初にrootにしてから、 '$ {user}'に切り替えることができます。しかし、私たちにもっと多くの情報を与えてください。さもなければ、これは20の質問のゲームに行くでしょう。 –
投稿への2回目の更新を確認してください – armani