2013-03-14 6 views
0

이 문제가 생겼습니다. php exec() 명령에서 freeradius 명령을 실행하고 싶지만 작동하지 않습니다. 코드는 간단하다 :php shell_exec() freeradius command

<?php 
    exec('radzap -x -N 192.168.0.1 localhost secret'); 
?> 

내가 쉘 작업의 코드를 실행하면되지만 스크립트 PHP는 doeesn't 작업으로, 'CD'와 다른 '고전'특공대 작업 '1!'와 같은 다른 명령 . 저는 Fedora를 사용합니다. 아마도 Freeradius 사전을 활용하는 사용자 'Apache'의 사용 권한이 없습니다.

내 영어로 불편을 끼쳐 드려 죄송합니다. 감사

업데이트 : 오류입니다 : 내가 selinix permessive 작업을 설정하면 가능 경우

dict_init: Couldn't open dictionary "/etc/raddb/dictionary": Permission denied 

좋아, 난, 오류가 (아마도), SELinux가이 명령의 실행을 permict하지 않습니다 발견 작동하지 않습니다. 마지막으로, 사용자 Httpd에 대한 파일 사용 권한을 변경하고 명령을 실행합니다.

+0

질문의 "작동하지 않음"부분을 자세히 설명해주십시오. –

+0

실행할 PHP 스크립트를 게시 할 수 있습니까? –

+0

PHP 사용자가 프로그램에 액세스 할 수 있습니까? – h2ooooooo

답변

0

문제는 명령이 실패하고있는 것이 아니라 어떻게 실패했는지 모르는 것입니다. (표준 오차 포함) exec()은 그 자체로 당신에게 정보의 전체를 많이 제공하지 않습니다, 그래서 당신은 명령 출력을 캡처해야합니다 :

$output = array(); 
$retcode = 0; 
exec('radzap -x -N 192.168.0.1 localhost secret 2>&1', $output, $retcode); 
echo "Return code: $retcode\n"; 
print_r($output); 

을이가 당신을 허용, 당신에게 명령의 리턴 코드와 출력을 제공 명령이 실패한 이유를 확인하십시오. 특정 답변을 드릴 수있는 가능한 문제가 너무 많습니다.

그런데 명령 실패의 가장 일반적인 이유는 $ PATH 환경 변수로 인해 바이너리를 찾을 수 없다는 것입니다. exec에 절대 경로를 radzap으로 지정하십시오. 예 : /usr/bin/radzap.

+0

감사합니다. 오류 : radclient : dict_init : "/ etc/raddb/dictionary"사전을 열 수 없습니다 : 사용 권한이 거부되었습니다. –

+0

감사합니다.이 특정 명령을 실행할 수없는 selinux입니다. –