2012-06-17 2 views
0

많은 사람들과 마찬가지로 저는 PHP의 shell_exec() 함수에 문제가 있습니다. 안전 모드가 비활성화되어 있으며 php.ini에서 disabled_functions가 삭제되었습니다.shell_exec() 및 exec()가 PHP에서 작동하지 않습니다.

터미널 (php print.php)에서 PHP 스크립트를 실행하면 완벽하게 작동하지만 웹 브라우저에서 실행하면 아무런 반응이 없습니다.

<?php 

$output = shell_exec('lp print.php'); 
echo "<pre>$output</pre>"; 

?> 

이 제발 도와주세요 : 여기

는 scipt입니다. Apache2에서 PHP 5.3.10을 실행 중입니다. 내 OS는 우분투 서버 12.4입니다. 다음은 phpinfo 페이지입니다. http://testni-server.info/info.php

+0

명령 줄과 웹 서버는 완전히 다른 두 가지 환경입니다. CLI는 쉘 환경에서 사용자 ID로 실행됩니다. 웹 서버 아래에서 웹 서버의 쉘 환경과 함께 웹 서버의 userID로 실행됩니다. 그것은 의미없는 비교입니다 - 사과와 오렌지. 유일한 공통점은 둘 다 과일입니다 (예 : 둘 다 PHP 임). –

+0

나는이 똑같은 유형의 문제로 책상에 머리를 두드 리고 있었다. 나는 마침내 shell_exec ('stuff_here 2> & 1')이 나에게 무엇이 잘못 될지에 대한 오류를 줄 것이라고 알았다. 그런 다음 문제를 해결하기 위해 문제를 해결할 수있었습니다. –

답변

0

사용자의 명령 행 (CLI) PHP가 CGI와 다른 작업 디렉토리 및/또는 경로를 사용 중일 수 있습니다. shell_exec()을 호출하기 전에 chdir()으로 명시 적으로 작업 디렉토리 (lp 명령 포함)를 정의 해보십시오.

1

프로그래밍 언어 PHP는 설정 명령 safe_mode_exec_dir을 통해 외부 명령의 실행을 제한 할 수 있습니다. 이 지시어는 PHP 스크립트가 실행할 수있는 프로그램에 관련된 디렉토리의 전체 경로를 포함해야합니다. 스크립트가이 디렉토리에없는 명령을 실행하려고하면 명령이 실행되지 않습니다. 이 구성 지시문은 안전 모드가 활성화 된 경우에만 활성화되며, 이는 사용자에게 더 많거나 때로는 원치 않는 제한을 의미합니다. PHP는 비활성화 된 안전 모드로 외부 명령을 실행하는 것을 제한 할 수있는 가능성이 없습니다. 따라서 여기에 특별 지시문 exec_dir을 PHP에 직접 추가하는 패치가 있습니다. 이 지시문은 safe_mode_exec_dir과 매우 유사하지만 안전 모드를 활성화하지 않았습니다.

패치 제한 또는 이러한 함수의 거동을 보정 :

exec() 
passthru() 
proc_open() 
shell_exec() 
system() 
popen() 
is_executable() 

패치가 PHP 버전 4.2.1에 대해 먼저 멀티 도메인 아파치 서버에있는 사용자의 외부 명령 제한 실행의 목적을 위해 만들어졌다. 이 패치는 PHP 개발자에게 보내어 PHP의 일부가 될 수는 있지만 PHP 개발자 중 누구도 관심이 없었습니다. 다른면에서 일부 PHP 사용자는이 패치를 원했기 때문에이 사이트가 만들어졌습니다.

+0

다른 말로하면 php.ini와 httpd.conf에서 "php_admin_flag safe_mode"를 끕니다. – GhostMaster75

관련 문제