2012-11-14 5 views
1

$ argv 배열에 이 거의 같으며 같은 값을 갖고 있으며 누가 그 값을 가지고 있는지 찾을 수 없습니다. 나는 모든 특수 문자의 탈출/인용이 사라진다는 것을 의미합니다. 따라서 다시 처리하지 않고도 동일한 매개 변수를 다른 스크립트에 전달 (또는 단순히 정확한 명령 호출) 할 수는 없으므로 쓸모없는 코드이므로 피하고 싶습니다. 여기 PHP 정확한 argv (현재 명령에 정확한 매개 변수)를 가져 오는 방법은 무엇입니까?

는 테스트 PHP 파일입니다 :

<?php 
var_dump($_SERVER["argv"]); 

데모 : 다음 조인을 사용하는 경우

[[email protected] ~]$ php test.php key="val space" key2=val\ space 
array(3) { 
    [0]=> 
    string(8) "test.php" 
    [1]=> 
    string(13) "key=val space" 
    [2]=> 
    string(14) "key2=val space" 
} 

을 따라서 ("", $의 ARGV는) 내가 얻을 것이다 :

test.php key=val space key2=val space 

어느 것이 동일한 호출이 아닌지 (4 개 매개 변수가 아니라 2 개 포함).

는 다시 : 이상적으로 난에서 실행하고있어 정확히 동일한 명령을받을 필요가

+2

당신 값. PHP가 보는 것과 정확히 일치합니다. 이스케이프는 PHP가 처리하기 전에 쉘에 의해 처리됩니다. – Amber

+2

사람들이 명령 줄 스크립트에서 기대하는 것처럼 getopt 스타일 인수를 사용하는 대신 key = value 쌍을 사용하는 이유는 무엇입니까? – ThiefMaster

+0

이 함수를 참조하십시오 : http://php.net/manual/en/function.getopt.php – fracz

답변

3

어레이 $real_arguments이 프로세스를 포함이

$arguments = $argv; 
array_shift($arguments); 
foreach($arguments as $value) { 
    $pieces = explode('=',$value); 
    if(count($pieces) >= 2) { 
     $real_key = $pieces[0]; 
     array_shift($pieces); 
     $real_value = implode('=', $pieces); 
     $real_arguments[$real_key] = $real_value; 
    } 
} 

처럼 인자를 처리 할 필요가

+0

고맙습니다. AFICS는 복잡한 논리를 피하고 싶습니다. AFICS는 매개 변수를 추측/수정하려고 시도합니다. 실수는 거의 없으며 정확히 동일하다는 보장은 없습니다. 동전의 또 다른 측면은 공통 코드베이스가없는 서로 다른 두 개의 프로젝트에서이 작업이 필요하다는 것입니다. 그래서 최소한의 라인/로직을 찾아서 복제하고 싶습니다. 단지의 경우, 나는 getopts()를 사용한다. –

+0

다른 해결책이 없으면 다음을 입력하십시오 : 누락 된 부분 만 = - 플래그없이 "else"(예 : --verbose) –