2012-03-13 2 views
2

나는 내 arch Linux에서 카메라를 시작하기 위해 opencv를 사용하고 있습니다. 그것은 서버에서 커맨드 라인을 통해 실제로 수행 할 때 시작되고 잘 작동합니다. PHP로 초기화하고 싶습니다. 나는 PHP에서 shell_exec을 사용하여 그것을 시도했다.서버에서 카메라를 시작하기위한 php shell_exec()를 사용하여 명령 줄 실행

내 PHP 파일은 아래와 같다 다음에있는 I는 클라이언트와 OpenCV의 및 관련 파일로 내 창 웹 브라우저를 통해이 작업을 실행하고 ERROR: capture is NULL

:이 출력을 제공

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

내 아치 리눅스 서버.

Windows 웹 브라우저에서이 PHP 파일을 실행할 때 카메라를 시작하고 이미지를 캡처하고 싶지만 실행하면 언급 한대로 오류가 발생합니다.

+0

모든 출력을/dev/null로 리디렉션하므로 아무 것도 반환되지 않습니다. –

+0

ok ... 이제/dev/null 부분을 제거했습니다 ... 오류가 발생했습니다 .... bt 여전히 카메라가 서버 (아치)에서 시작하지 못했습니다 ... –

+0

웹 서버 사용자가 해당 파일을 실행할 권한이 있습니까? –

답변

0

서버로 SSH 할 때 작동 할 수도 있지만. 웹 서버 사용자는 귀하가 로그인 한 사용자와 다를 가능성이 큽니다. 웹 서버가 Linux 컴퓨터에서 실행하는 인기있는 사용자 ID/그룹은 http, www-data, nobody 등입니다.

이 시점부터 두 가지 옵션이 있습니다.

  1. 당신은 웹 서버 사용자가 실행해야 할 수 있습니다 당신이 PHP에서 실행해야하는 스크립트 (있는 경우 그것의 모든 어린이) 확인 할 수 있습니다.

  2. 웹 서버 사용자에게 해당 스크립트의 사용 권한 만 부여하도록 권한을 부여하는/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

이제 웹 서버가 어떤 사용자인지 알았으므로, 해당 사용자에게 스크립트에 대한 액세스 권한을 부여하겠습니다. 스크립트가 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이라는 스크립트를 실행할 수 있습니다. 그러나 카메라를 작동하려면 높은 권한이 필요할 수 있습니다. 호출하려는 카메라 설정에서 사용 권한 요구 사항이 무엇인지 잘 모르겠습니다.

행운을 빈다. 희망이 도움이!

관련 문제