2013-06-05 1 views
14

shell_exec 메소드를 사용하여 PHP에서 test.sh를 호출하려고합니다.shell_exec()에 변수 전달?

$my_url="http://www.somesite.com/"; 
$my_refer="http://www.somesite.com/"; 
$page = shell_exec('/tmp/my_script.php $my_url $my_refer'); 

그러나, 명령 줄 스크립트는 단지 1 개 인자받은 말한다 :

코드 :

$page = shell_exec('/tmp/my_script.php {$my_url} {$my_refer}'); 
/tmp/my_script.php

를 내가 호출을 변경하는 경우

3 개의 인수를 받았지만 argv [1]과 argv [2]는 비어 있다고합니다.

내가 호출을 변경하는 경우 :

코드 : 의도 한대로

$page = shell_exec('/tmp/my_script.php "http://www.somesite.com/" "http://www.somesite.com/"'); 

스크립트는 마지막 3 개 인수를받습니다.

항상 스크립트로 인용 된 텍스트 만 보내야하고 $ var와 같은 변수를 보낼 수 없습니까? 아니면 $ var를 보내야하는 특별한 방법이 있습니까?

답변

11

:

$page = shell_exec("/tmp/my_script.php '".$my_url."' '".$my_refer."'"); 
+1

이것이 작동 중입니다 – user2314387

+1

어떻게 읽습니까? my_script.php? –

+0

예 "/tmp/my_script.php"에서 이러한 매개 변수를 잡는 방법은 무엇입니까? –

16

변경

$page = shell_exec('/tmp/my_script.php $my_url $my_refer');

$page = shell_exec("/tmp/my_script.php $my_url $my_refer");

또는

$page = shell_exec('/tmp/my_script.php "'.$my_url.'" "'.$my_refer.'"');

에 또한 할 escapeshellarg을 사용하십시오 두 값 모두에.

예 :

당신이 그것을 사용해야과 같이 할당량 인수를 보낼 필요가있다
$my_url=escapeshellarg($my_url); 
$my_refer=escapeshellarg($my_refer); 
+0

PHP는 구문 분석''$ 변수는 큰 따옴표로 감싸 (' "') –

+2

는 또한 당신이의 문서를 참조하십시오 – Orangepill

+0

을 escapseshellarg와 sanatize해야합니다. 작은 따옴표와 큰 따옴표 사이의 차이점 : http://php.net/manual/en/language.types.string.php – DaoWen

2

변경

$page = shell_exec('/tmp/my_script.php $my_url $my_refer'); 

$page = shell_exec('/tmp/my_script.php "'.$my_url.'" "'.$my_refer.'"'); 

그러면 코드에서 filename의 공백을 허용합니다.

+0

예, 의도적으로 말씀드립니다. 내 진짜 실수는 문자열에서'$ my_url'과'$ my_refer'를 꺼내는 것을 잊었습니다. –

6

변수는 작은 따옴표로 묶은 문자열 내부를 보간하지 않습니다. 또한 인수가 제대로 이스케이프 처리되는지 확인해야합니다.

$page = shell_exec('/tmp/myscript.php '.escapeshellarg($my_url).' '.escapeshellarg($my_refer)); 
+0

고맙습니다. Orangepill ..이 작업 중입니다. – user2314387

2

당신은 sprintf 도움이 여기에서 찾을 수 있습니다 : 다른 답변에서 권장하는대로 입력을 공급하는 일하지 않으면

$my_url="http://www.somesite.com/"; 
$my_refer="http://www.somesite.com/"; 
$page = shell_exec(sprintf('/tmp/my_script.php "%s" "%s"', $my_url, $my_refer)); 

당신은 확실히 escapeshellarg를 사용해야합니다.

2

나는이 코드가 너무 복잡하여 내 코드 조각을 공유 할 수 없다는 생각이 들었습니다.

{} 브라켓을 추가

$output = shell_exec("/var/www/sites/blah/html/blahscript.sh 2>&1 $host {$command}"); 

$output = shell_exec("/var/www/sites/blah/html/blahscript.sh 2>&1 $host $command"); 

하기 전에 나를 위해 그것을 고정 것입니다.

또한 확인하려면 escapeshellarg이 필요합니다. 스크립트를 제외하고

$host=escapeshellarg($host); 
$command=escapeshellarg($command); 

도 필요 :

set host [lindex $argv 0] 
set command [lindex $argv 1]