2013-03-11 3 views
2

exec 명령을 실행하려고하는데 문제가 있습니다. 다음 코드를 실행하면 브라우저를 통해 실행할 때 작동하지 않습니다. 하지만 출력을 $str으로 복사하여 터미널에 붙여 넣으면 잘 작동합니다. 이 문제의 원인은 무엇이며 어떻게 해결할 수 있습니까? 현재 localhost에서 실행 중입니다.PHP 스크립트는 터미널에서 작동하지만 브라우저에서는 작동하지 않습니다.

<?php 
set_time_limit(0); 
$args = $argv[1]; 

$data = json_decode(str_replace("\\\"", "\"", $args), true); 
echo "hello!"; 

답변

4

브라우저를 통해 실행하면 올바른 권한이 없을 수 있습니다 웹 서버의 사용자로 실행 :

$php_location = "/usr/bin/php"; 
$data = str_replace("\"", "\\\"", json_encode($_POST)); 
$cwd = __DIR__; 

shell_exec($str = "$php_locataion $cwd/phpExcel.php \"$data\" > /home/ryannaddy/Desktop/phpExcel.txt &"); 

echo $str; 

여기 shell_exec 호출하는 파일입니다. 터미널에서 실행할 때 로그인 한 사용자로 실행됩니다. 아파치 (아파치를 사용한다고 가정)가 스크립트/디렉토리에 대한 올바른 권한을 갖고 있는지 확인하십시오.

+0

아파치가'루트 '로 실행 중임을 나타냅니다. –

+0

아파치는 기본적으로 내 바탕 화면에 쓸 수있는 권한이 없으므로 웹에 기록하도록했습니다. 감사! –

2

문제는 권한과 관련이있을 수 있습니다.

쉘에서 실행하면 사용자 계정으로 실행됩니다. 웹 서버는 다르게, 일반적으로 거의 모든 권한으로 실행됩니다. 웹 서버의 계정에 적절한 권한을 부여하거나 다른 계정으로 서버를 실행하십시오 (권장하지 않음).

관련 문제