2

Arch Linuxでカメラを起動するためにopencvを使用しています。サーバー自体のコマンドラインから実際に実行すると、開始され、うまく機能します。PHPで初期化したい。shell_execPHPから使ってみました。

私のPHPファイルは次のようになります:

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

次の出力が得られます。 ERROR: capture is NULL

これをクライアントとしてWindows Webブラウザから実行しています。opencvと関連ファイルは、私のarch Linuxであるサーバー上にあります。

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

4

1 に答える 1

0

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

この時点から、2つのオプションがあります。

  1. PHPから実行しようとしているスクリプト(およびそのすべての子)がWebサーバーユーザーによって実行できることを確認できます。

  2. / etc / sudoersファイルを変更して、Webサーバーユーザーにそのスクリプトの権限を昇格させるためのアクセス権のみを与えることができます。(注:これによりセキュリティホールが開かれる可能性があるため、注意してください)。

Webサーバーが実行しているユーザーを確認するには、次の手順を実行します。ps aux 出力を確認すると、出力の最初の列に、そのプロセスが実行されているユーザーが一覧表示されます。これが私のボックスの1つにある私のウェブサーバー(nginx)の抜粋です:

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

ここで、nginxがユーザーwww-dataで実行されていることがわかります。grepを使用してコマンドを実行し、プロセスをすばやく見つけることもできます。Grepは、送信したものと一致する行のみを表示します。次に例を示します。ps aux | grep nginx

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

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

ファイルの所有権を変更した後、PHPページからコマンドを再実行して、機能するかどうかを確認してください。

完全を期すために、Webサーバーユーザーにそのファイルに対するsudo特権を与えることもできます。/etc/sudoersこれを行うには、ファイルの最後に次の行を追加する必要があります。

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

次に、shell_execコマンドを次のように切り替えることができます。

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

rootこれを行うと、さまざまな状況で非常に危険なスクリプトをWebサーバーユーザーが実行できるようになることに注意してください。ただし、カメラが機能するには、昇格された権限が必要な場合があります。呼び出そうとしているカメラのセットアップに必要な権限がわかりません。

幸運を。お役に立てれば!

于 2012-06-18T22:33:52.300 に答える