2013-02-02 11 views
7

セットアップではない: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 

私はウェブページを更新するときの出力は次のとおりです。

+1

最初のステップ: 'exec()'コールの戻り値と出力を確認します。暗闇の中でデバッグすることは無意味です。 –

+0

'su - $ {user}'はあなたがrootでない限り '$ {user}'パスワードを要求します。 'sudo su - $ {user}'を試して最初にrootにしてから、 '$ {user}'に切り替えることができます。しかし、私たちにもっと多くの情報を与えてください。さもなければ、これは20の質問のゲームに行くでしょう。 –

+0

投稿への2回目の更新を確認してください – armani

答えて

3

実際、私の記事の更新は最終的に私自身の試行錯誤やグーグルで見つけた答えを記録しています。

私は/ dev/ACM0にアクセスするためにユーザwww-dataをダイヤルアウトグループに割り当てる必要がありました。何らかの理由でnginxだけでなくサーバ全体の再起動が必要でした。

私はいつもこれがパスの問題であると答えていました。私はシェルスクリプトからPythonスクリプトランを、PHP-CLIではPHPファイルランを細かく指定していました。

とにかく、それが最後に解決したのです。試してみんなに感謝します。

+0

ユーザーがいるグループを変更した後に再ログオンする必要があるため、再起動しました。ログアウト - >ログインで十分でした。 – Tarilo

+0

私は、許可の問題である可能性があることを私の答えで指摘しました: "もう一つの可能​​性は、あなたがログインしているとき(おそらく' nouser')のWebサーバーが別のユーザーとして実行されていることです。いくつかのリソースにアクセスできます。 –

1

lights.pyファイルのchmodとは何ですか? followindコマンドを試すことができますか?

chmod +x lights.py 
+0

これはうまくいかなかった...元の投稿をファイル許可レベルで更新しています。 – armani

3

PHPは、おそらくあなたのウェブサイトの設定でsafe modeで実行するように設定されています。セーフモードで実行すると、execのような機能が無効になります。セーフモードを無効にしてみてください。

もう1つの可能性は、Webサーバーが実行されているディレクトリにlights.pyというスクリプトが見つかりません。これを解決するには、exec("/usr/bin/python /home/armani/lights.py")のようにスクリプトのフルパスを使用します。

もう1つの可能性は、ログされているときにWebサーバーが別のユーザー(おそらくnouser)として実行されている可能性があります。また、このユーザーは一部のリソースにアクセスできない可能性があります。

おそらく、このような考えられるエラーがさらに多くあります。エラーに関する詳細情報を提供してください(PHPでデバッグを有効にしてトレースバックを取得してみてください)。

1

パスが正しいかどうかを確認してください。phpスクリプトは/ var/wwww/testディレクトリ内から実行されます。 lights.pyファイルもそのディレクトリにありますか?

+0

はい、同じディレクトリにあります。 – armani

1

現在の作業ディレクトリがどれであるかを確認する必要があります。もし変更したいディレクトリがない場合は、pythonで完全パス

のスクリプトを実行してください。

exec( 'python /var/www/test/lights.py');

関連する問題