2013-07-24 2 views
4

그래서 웹 서버에서 PHP의 bash 명령을 실행하고 싶습니다. shell_exec을 사용하여이 작업을 수행 할 수 있습니다. 그러나 실행하려는 명령 중 하나는 curl입니다. 나는 .wav 파일을 다른 서버에 보내고 그 응답을 기록합니다. 하지만 PHP에서 호출하면 curl이 작동하지 않습니다.PHP에서 호출했을 때 컬이 제대로 실행되지 않음

나는 아래의 작은 예제로 오류를 줄였습니다. 나는 포함 php_script.php라는 이름의 스크립트가 :

<?php 
$ver=shell_exec("curl -F [email protected]/2013-7-24-17-31-43-29097-flash.wav http://otherserver"); 
echo $ver 

호기심 것은 내가 php php_script.php 사용하여 명령 행에서이 PHP 스크립트를 실행할 때 내가 실행하는 경우, 내가 얻을 결과는, 그러나

Status: 500 Internal Server Error 
Content-type: text/html 

때문이다 curl -F [email protected]/2013-7-24-17-31-43-29097-flash.wav http://otherserver 직접, 나는 내가 기대 한 응답을 얻을 :

verdict = authentic 

(편집 : 나는 아마 내가 어떤 bash에 코드를 넣으면 언급해야 curl을 포함하지 않는 shell_exec 인수 내에서 bash 명령은 정상적으로 실행됩니다. 예를 들어, 행을 $ver = shell_exec("echo hello > world");으로 변경하면 "hello"라는 단어가 "world"파일에 있습니다 (존재하고 쓸 수있는 경우). (편집 끝내기)

PHP에서 호출 할 때 무엇인가가 컬의 실행을 막는 중입니다. PHP가 안전 모드로 실행되고 있을지도 모른다고 생각했지만 php.ini에서이 사실을 알 수 없습니다. (이것을 테스트하여 100 % 확신 할 수있는 방법이 있습니까?) 무엇이 컬을 막는가, 더 중요하게이 블록을 무시하거나 차단할 수 있습니까?

(그리고 그래, 나는 PHP는 컬 라이브러리. 그러나, 나는 디버깅 목적으로 나뿐만 아니라 명령 줄에서 실행할 수있는 명령을 사용하는 것을 선호가 알고 있습니다.)

환호, 앨런

+1

curl 명령에'-v'를 추가하면 어떻게 될까요? – Craig

+0

curl 명령에'-v'를 추가하면 PHP 호출의 결과가 변경되지 않습니다. direct cli invokation의 결과는보다 장황하다. 연결 데이터 및 헤더가 표시됩니다. 그러나 나는 직접적인 cli invokation이 정확한 결과물을 만들어내는 것만 큼 흥미로운 것은 아닌지 잘 모르겠다.) –

+0

컬링을 시도 했습니까?/usr/bin/curl 또는 플랫폼에 맞는 것이 무엇이든간에. – Craig

답변

-1

이것은 PHP에서 컬을 사용하는 코드 스 니펫입니다. 이 코드는 실제로 웹 사이트 및 게시물에 로그인하지만 적어도 당신은 컬을 사용하는 방법을 볼 수 있습니다 : 당신이 직접 명령을 실행 루트로 실행되므로 명령이 오면

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $host); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); 
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
curl_setopt($ch, CURLOPT_POST, 1); 

$result = curl_exec($ch); 
// Look at the returned header 
$resultArray = curl_getinfo($ch); 

curl_close($ch); 
+0

질문의 마지막 단락 인 _yes를 읽으면 PHP에 컬 라이브러리가 있다는 것을 알게되었습니다. – Barmar

+0

고마워요. 당분간은 디버깅 목적으로 쉘에서 실행 가능한 명령을 원합니다. 그 일을 많이하려면, 당신의 발췌 부분을 시도해 보겠습니다. –

0

이유는 관리 권한입니다 실행. 그러나 PHP를 통해 명령을 실행하면 사용자로 실행됩니다. 기본 사용자는 shell_exec 명령을 실행할 수있는 권한이 없습니다.

CPanel/Apache 구성 파일을 통해 shell_exec의 설정을 변경해야합니다. 그러나 해커가 서버에서 공격하는 데 도움이되므로 적절한주의를 기울여야하므로 사용자에게 shell_exec 액세스를 제공하는 것은 좋지 않습니다.

PHP에서 제공되는 컬 라이브러리를 사용하는 것이 더 적절할 것입니다.

+0

나는이 스크립트를 다음과 같이 변경하려고 시도했다 : ' world");' 스크립트는 동일한 PHP 명령 ('php php_script.php')을 사용하여 호출 할 때 잘 실행됩니다. 또한 다른 사용자의 사용자 이름이 아닌 다른 사용자의 사용자 이름을'world' 파일에 넣습니다. 1)'shell_exec'가 작동 중입니다 , 2) 나는 뿌리가 아닌가? –

+0
+0

직접 호출에 대한 출력은'ping : unknown host count'입니다. PHP 호출에 대한 출력은 동일하지만 추가 내용'Content-type : text/html'을 사용합니다 –