2014-02-05 2 views
7

일부 서버에서는 PHP가 shell_exec를 통해 쉘 명령어를 실행할 수 없습니다. 현재 서버에서 PHP를 통해 셸 명령을 실행할 수 있는지 여부를 어떻게 알 수 있습니까? PHP를 통해 쉘 명령을 실행하려면 어떻게해야합니까? 그런데PHP - 서버가 shell_exec를 허용하는지 확인하는 방법

if(function_exists('shell_exec')) { 
    echo "exec is enabled"; 
} 

:

+0

'어떻게하면 PHP를 통해 쉘 명령을 실행할 수 있습니까? '루트 구성에서만 가능합니다. 그것은 보안 기능입니다. –

+2

' ' – DanFromGermany

답변

9
는 사용하지 않도록 아니라고 다음 호출하고 있다는

먼저 확인 :

당신이 그것을 genericize 수 있도록이 일반적인 접근 방식은, 기능에 내장 된 모든 작동
is_callable('shell_exec') && false === stripos(ini_get('disable_functions'), 'shell_exec'); 

:

function isEnabled($func) { 
    return is_callable($func) && false === stripos(ini_get('disable_functions'), $func); 
} 
if (isEnabled('shell_exec')) { 
    shell_exec('echo "hello world"'); 
} 

참고 stripos를 사용하는 왜냐하면 PHP 함수 이름은 대소 문자를 구별하지 않기 때문입니다.

+0

safe-mod가 활성화되어 있는지 확인해야합니다. –

+1

@ChristopherWill : [안전 모드는 5.3에서 더 이상 사용되지 않으며 5.4에서 치명적입니다] (http://php.net/manual/en/features.safe-mode.php), 나는 그것을 포함시키지 않았습니다. 나는 그것을 포함하지 않음으로써 무언가를 놓치고 있는가? (분명히 <5.2를 제외하고, 그것이 EOL이다)? – bishop

+1

아, 그게 더이상 사용되지 않는 줄도 몰랐습니다. 업데이트 주셔서 감사합니다. 그게다고 생각해. –

2

당신은 함수 자체의 availablility을 확인 할 수있다 '' 'exex을' ''shell_exec '보다는를 사용하는 특별한 요구 사항이 있습니까?

php.net

Note: 
This function can return NULL both when an error occurs or the program 
produces no output. It is not possible to detect execution failures using 
this function. exec() should be used when access to the program exit code 
is required. 

편집 # 1

DanFromGermany는 지적이 실행하는 경우, 당신은 아마 다음 확인. 위의 예제는 더 적절한 방법으로 당신이 그것을 할 수있는 경고를 생성 할 수 있다면 이런 식으로 뭔가는

if(shell_exec('echo foobar') == 'foobar'){ 
    echo 'shell_exec works'; 
} 

편집 # 2

할 것입니다. 그냥 see this SO answer.

+1

아니요.이 기능은 사용할 수 없지만 존재합니다. 이것은 작동하지 않습니다. – DanFromGermany

+0

-1'function_exists'는 "enable"을 테스트하고 "shell_exec"를 호출하여 "작동하는지"를 과장된 것으로 판단하기에 충분하지 않습니다. – bishop

+0

@ 비숍 예, 당신은 완전히 옳습니다. 그래서 내 대답을 업데이트하고 좋은 SO 답변에 대한 참조를 삽입했습니다. –

관련 문제