2013-03-06 1 views
0

다른 유사한 라인이 작동하고 있음에도 불구하고 쉘 명령 중 하나가 실행되지 않습니다. Ubuntu 12.04 기반 OS를 사용하는 Linux 컴퓨터에서 실행됩니다. 나는 exec도 사용하려고 시도했지만 여전히 작동하지 않는다.PHP exec 연산자가 특정 명령을 실행하지 않습니다.

저는 실제로이 작업이 어느 시점에서 행해졌습니다. (명령 출력 대기 중) 문제가 발생하여 출력을/dev/null로 리디렉션하고 있습니다. 개발에서 무언가가 바뀌 었습니다. 우리는 데비안 패키지를 만들었고 설치 패키지를 실행 했으므로 파일을 덮어 쓸 때 사용 권한이 변경되어 모든 사용자/그룹/소유자에게 읽기/쓰기/실행을 추가했지만 그 중 하나는 작동하지 않는다고 생각했습니다 .

코드

은 여기에 있습니다 :

if(isset($_POST['activateXML'])) 
{ 
    if (videoConsistencyCheck()) 
    { 
     `cp {$fileXML} /apps/video/xml.xml`; 
     `sudo /apps/video/vsss restart >/dev/null 2>&1 &`; 
     systemUnvalidate(); 
     header('Location: index.php?app='.$_GET['app']); 
     die(); 
    } 
} 

나는 경우 문장의 첫 번째 행이 실행됩니다 것을 알고있다. 코드 줄은 실제 터미널에서 잘 작동하므로 문제가되지 않습니다. 나는 많은 인터넷 검색을했고 대답 할 수없는 대답은 조언이 도움이 될 것입니다.

편집 : 의도 한대로 명령을 호출 사실했지만 bash는 스크립트에서 내가 시작 - 정지 데몬이

편집 2를 작동하지 않는 호출 된 작동하지 않는 것처럼 보였다 그래서 무엇을 : 나는 테스트 PHP 파일을 만든 터미널에서 코드를 실행하고 sudo를 명령에 추가하여 start-stop-daemon 오류를 수정했지만 여전히 내 코드에서 작동하지 않습니다. 제출 버튼을 누르면이 코드를 호출합니다.

+0

실행중인 PHP 사용자에게'/ apps/video/vsss'에 대한 실행 권한이 있습니까? –

+0

위에서 언급 한 것처럼 'sudo chmod a + rwx/apps/video/vsss'를 수행했습니다. 특정 사용자를 추가해야한다고 제안하고 있습니까? 그렇다면 어떻게 PHP 코드가 사용하게 될 사용자를 결정할 수 있습니까? 이 경우처럼 실행 권한이없는 것 같습니다. – xsdf

+0

실행되지 않는다는 표시는 무엇입니까? 무슨 일이야? –

답변

0

문제는 루트로만 실행할 수있는 vsss 스크립트의 이진 파일을 호출하는 것과 같습니다. 우리는 그 바이너리 파일에 대한 액세스를 다른 사람에게 허용하고 싶지 않았습니다. 우리가 생각해 낸 해결책은 사용자 및 그룹 ID에 대한 권한을 허용하지만 소유자 권한을 유지하는 vsss 스크립트에서 chmod + s를 호출하는 것입니다. 그런 다음 NOPASSWD 매개 변수를 사용하여 sudoers 파일에 www-data라는 PHP 사용자를 추가했습니다.

exec('sudo /apps/video/vsss restart >/dev/null 2>&1 &') 

shell_exec()/역 따옴표는이 방법으로 작동하지 않을 것입니다 : 내 PHP 코드에서 나는 행을 사용했다.

0

추가 매개 변수, 특히 출력을 사용하십시오. exec ($ command, $ output); var_dump ($ output); 명령에 무엇이 잘못 될 수 있는지 확인하십시오. 작동하지 않는 경우 임원을 사용하는 코드를 알려주십시오.

+0

물론 출력을 리디렉션하지 않고 시도했지만 출력 변수는 null입니다. – xsdf

+0

코드가 제출 단추에서만 실행되기 때문에 출력을 읽는 것이 더 어려워 지므로 파일에 쓰지 않아도되었습니다. 하지만 실제로 출력되었습니다. – xsdf