2012-03-13 7 views
2

私はarchinuxでカメラを起動するためにopencvを使用しています。それは私がサーバー自体のコマンドラインから実際にやってみるとうまくいきます。 私はそれを使用して初期化したいと思います。私はPHPからshell_execを使ってやってみました。サーバ上でカメラを起動するためにphp shell_exec()を使用してコマンドラインを実行する

私のPHPファイルは次のようになります。上にある私は、クライアントとOpenCVのと関連ファイルとしての私の窓のWebブラウザを介してこれを実行しています ERROR: capture is NULL

:それは、この出力を与える

<?php 
$output=shell_exec('LD_LIBRARY_PATH=usr/local/lib ./a.out 0 2>&1 1>/dev/null'); 
echo $output; 
?> 

私のarch linuxのサーバです。

WindowsのWebブラウザからこのphpファイルを実行すると、カメラを起動して画像をキャプチャしますが、実行すると、前述のようにエラーがスローされます。

+0

すべての出力を/ dev/nullにリダイレクトしているので、何も返されません。 –

+0

ok .../dev/nullの部分を削除しました...エラーが発生しました....まだカメラはサーバー(アーチ)で起動していません.... –

+0

Webサーバーのユーザーは、そのファイルを実行する権利? –

答えて

0

これはサーバーにSSH接続されているときには機能するかもしれませんが。ウェブサーバーのユーザーは、ログインしたユーザーとは異なる可能性があります。 WebサーバーがLinuxマシン上で実行するような一般的なユーザーID /グループは、http、www-data、nobodyなどです。

ここから2つの選択肢があります。

  1. あなたは(もしあれば、それの子のすべて)を使用すると、PHPから実行しようとしているスクリプトはWebサーバのユーザーが実行することが可能であることを確認することができます。

  2. webserverユーザにそのスクリプトの権限のみを昇格させるアクセス権を与える/ etc/sudoersファイルを変更することができます。 (注:潜在的にセキュリティホールを開くので、注意してください)。

この実行すると、あなたのウェブサーバが実行されますどのようなユーザーを見つけるために:ps aux は出力を見て、出力の最初の列は、そのプロセスがで実行されていることをユーザーに示していますが。ここに私のボックスのいずれかに私のウェブサーバ(nginxの)の抜粋です:

www-data 26852 0.0 0.0 29768 3840 ? S Jun04 0:50 nginx: worker process

あなたはそのnginxのは、ここでユーザーのWWW-データで実行されます見ることができます。 grepコマンドを実行すると、プロセスをより早く見つけるのに役立ちます。 Grepはあなたに送るものと一致する行だけを表示します。ここに例があります:ps aux | grep nginx

ここで、Webサーバーがどのユーザーとして実行されているかを知っているので、そのユーザーにスクリプトへのアクセスを許可してみましょう。スクリプトがfooで、/usr/local/binにあるとします。あなたは、次のコマンドを実行します:

chown www-data /usr/local/bin/foo

ファイルに所有権を変更した後、あなたのPHPページから再度コマンドを再実行し、それが動作するかどうかを確認してみてください。

私はあなたのウェブサーバーのユーザーにそのファイルへのsudo特権を与えることができるとも言いました。次に、あなたはshell_execコマンドは、これに切り替えることができ

www-data ALL= NOPASSWD: /usr/local/bin/foo

:あなたの/etc/sudoersファイルの末尾に以下の行を追加する必要があることを行うために

shell_exec('sudo /usr/local/bin/foo');

を覚えておいてください。これを行うと、ウェブサーバーのユーザーはrootというスクリプトを実行することができ、これはさまざまな状況で非常に危険です。ただし、カメラの動作には高い権限が必要な場合があります。私はあなたが呼び出しようとしているカメラの設定にどのような権限要件があるのか​​分かりません。

幸運。お役に立てれば!

関連する問題