답변:
일반적으로 인수를 명령 행 스크립트에 전달하려면 argv
전역 변수 또는 getopt를 사용합니다 .
// bash command:
// php -e myscript.php hello
echo $argv[1]; // prints hello
// bash command:
// php -e myscript.php -f=world
$opts = getopt('f:');
echo $opts['f']; // prints world
$ _GET은 HTTP GET 메소드 매개 변수를 나타냅니다. HTTP GET 메소드 매개 변수는 웹 서버가 채워 져야하기 때문에 명령 행에서 사용할 수 없습니다.
어쨌든 $ _GET을 채우려면 다음과 같이하십시오.
// bash command:
// export QUERY_STRING="var=value&arg=value" ; php -e myscript.php
parse_str($_SERVER['QUERY_STRING'], $_GET);
print_r($_GET);
/* outputs:
Array(
[var] => value
[arg] => value
)
*/
해당 스크립트 $_GET
를 수정하지 않고도 명령 줄에서 지정된 스크립트를 실행할 수도 있습니다 .
export QUERY_STRING="var=value&arg=value" ; \
php -e -r 'parse_str($_SERVER["QUERY_STRING"], $_GET); include "index.php";'
당신이 가진 동일한 할 수있는 주 $_POST
및 $_COOKIE
뿐만 아니라입니다.
getopt()
, 이것은 옵션 (콜론에서 마이너스로 지정)이 아닌 인수 를 원한다는 것을 PHP에게 알려줍니다 . 그래서 그것은 단지 구문입니다. f
f
ServerFault에 대한 이 답변에서 :
php-cgi
just 대신 바이너리를 사용하고 php
다음과 같이 명령 행에서 인수를 전달하십시오.
php-cgi -f index.php left=1058 right=1067 class=A language=English
이것은 이것을 넣습니다 $_GET
:
Array
(
[left] => 1058
[right] => 1067
[class] => A
[language] => English
)
다음과 같이 웹 서버에서 설정 한 환경 변수를 설정할 수도 있습니다.
REQUEST_URI='/index.php' SCRIPT_NAME='/index.php' php-cgi -f index.php left=1058 right=1067 class=A language=English
<b>Notice</b>: Undefined index: testing in <b> ... </b><br />
php-cgi -f /var/www/vhosts/example.com/public_html/index.php action=DoSomething
작동합니다.
우분투에는 php-cgi 바이너리가 없으므로 다음과 같이하십시오.
별명 % php-cgi = "php -r '"'parse_str (implode ( "&", array_slice ($ argv, 2)), $ _GET); include ($ argv [1]); ' "'-" % php-cgi test1.php foo = 123 <html> foo를 123으로 설정했습니다. </ html> % cat test1.php <html> foo를 <? php print $ _GET [ 'foo']?>로 설정했습니다. </ html>
때로는 전달 된 매개 변수에 $ _GET을 설정하기 위해 php 파일을 편집 할 수있는 옵션이없고, 때로는 php-cgi를 설치하거나 설치하고 싶지 않을 수도 있습니다.
나는 이것이 그 경우에 가장 적합한 해결책이라는 것을 알았습니다.
php -r '$_GET["key"]="value"; require_once("script.php");'
이렇게하면 PHP 파일을 변경하지 않아도되고 일반 PHP 명령을 사용할 수 있습니다. php-cgi를 설치했다면 반드시 이것을 사용하십시오. 그러나 이것이 다음으로 가장 좋습니다. 이 옵션은 언급 할 가치가 있다고 생각했습니다.
-r은 다음 문자열에서 PHP 코드를 실행한다는 의미입니다. 여기에서 $ _GET 값을 수동으로 설정 한 다음 실행할 파일을 참조하십시오.
이 파일을 올바른 폴더에서 실행해야하지만 PHP 파일이있는 폴더는 아닙니다.
php file_name.php var1 var2 varN
그런 다음 $_GET
PHP에서 첫 번째 줄에 변수를 설정하십시오. 변수를 설정하는 바람직한 방법은 아니며 $_GET
나중에 해당 변수로 수행하는 작업에 따라 문제가 발생할 수 있습니다.
if (isset($argv[1])) {
$_GET['variable_name'] = $argv[1];
}
스크립트를 시작하는 변수는 $argv
PHP 앱 의 배열에서 액세스 할 수 있습니다. 첫 번째 항목은 스크립트의 이름이므로 array_shift($argv)
여러 변수를 처리하려는 경우 첫 번째 항목을 삭제 하려고 할 수 있습니다 . 또는 로컬 변수에로드하십시오.
사용해보십시오 WGET
:
WGET 'http://localhost/index.php?a=1&b=2&c=3'
$_GET
웹 서버가 실행 중임을 나타냅니다.
-옵션 1 : php-cgi-
스크립트를 실행하려면 'php'대신 'php-cgi'를 사용하십시오. PHP 코드를 수정하기 위해 특별히 수정하지 않아도되므로 가장 간단한 방법입니다.
php-cgi -f /my/script/file.php a=1 b=2 c=3
-옵션 2 : 웹 서버가있는 경우-
PHP 파일이 웹 서버에있는 경우 명령 행에서 'wget'을 사용할 수 있습니다.
wget 'http://localhost/my/script/file.php?a=1&b=2&c=3'
또는:
wget -q -O - "http://localhost/my/script/file.php?a=1&b=2&c=3"
-PHP에서 변수에 접근하기-
옵션 1과 2에서 다음과 같이 이러한 매개 변수에 액세스합니다.
$a = $_GET["a"];
$b = $_GET["b"];
$c = $_GET["c"];
PHP 스크립트를 편집 할 수있는 경우 스크립트 시작 부분에 다음 코드를 사용하여 $ _GET 배열을 인위적으로 채우고 구문을 사용하여 스크립트를 호출 할 수 있습니다. php -f script.php name1=value1 name2=value2
// When invoking the script via CLI like "php -f script.php name1=value1 name2=value2", this code will populate $_GET variables called "name1" and "name2", so a script designed to be called by a web server will work even when called by CLI
if (php_sapi_name() == "cli") {
for ($c = 1; $c < $argc; $c++) {
$param = explode("=", $argv[$c], 2);
$_GET[$param[0]] = $param[1]; // $_GET['name1'] = 'value1'
}
}
나는 이것을 다음과 같이 전달합니다.
php5 script.php param1=blabla param2=yadayada
$ _GET 배열은 다음과 같습니다.
array(3) {
["script_php"]=>
string(0) ""
["param1"]=>
string(6) "blabla"
["param2"]=>
string(8) "yadayada"
}
또는 그냥 (LYNX가있는 경우) :
lynx 'http://localhost/index.php?a=1&b=2&c=3'
php [script name] "a=1&b=2&c=3"
하면을 채우지$_SERVER['QUERY_STRING']
않지만 참조를 통해 같은 것에 쉽게 영향을 줄 수 있습니다$_SERVER['argv'][1]
.