PHP 스크립트를 제공하는 웹 서버를 만들려고합니다. 현재 다음과 같이 작동합니다.
- 클라이언트는 /index.php?test=value를 요청합니다
- 서버가 호출
php index.php
- 서버는 HTTP 요청 헤더를 STDIN으로 PHP 프로세스에 공급합니다.
- 서버
php
는 STDOUT 의 출력을 읽고 클라이언트로 리턴합니다.
다음과 같은 이유로 매개 변수가 PHP 스크립트로 전달되지 않는 것을 제외하고는이 모든 것이 작동합니다.
var_dump($_GET);
보고:
배열 (0) {}
$_GET
PHP 바이너리가 호출 될 때 매개 변수는 어떻게 PHP 바이너리로 전달됩니까?
답변
어떤 PHP 바이너리를 사용하고 있습니까? CLI 또는 CGI? CGI 버전 이 필요하다고 생각합니다PHP가 환경 변수와 POST 데이터를 전달하면 올바르게 처리하려면 의 바이너리 .
php-cgi
바이너리 구현 명령 줄에서 매개 변수를 전달할 수있는 CGI 인터페이스 :
php-cgi -f index.php left=1058 right=1067 class=A language=English
결국 $_GET
:
Array
(
[left] => 1058
[right] => 1067
[class] => A
[language] => English
)
웹 서버에서 CGI 를 구현할 수 있도록 CGI의 작동 방식을 읽어보십시오 .
참조 : RFC3875
답변
Wikipedia 에 따르면 , QUERY_STRING
환경 변수 를 설정하는 것이 답입니다 .
QUERY_STRING='user=foo&pass=bar&left=1234' php-cgi index.php
또는 별도의 단계로 :
export QUERY_STRING='user=foo&pass=bar&left=1234'
php-cgi index.php
이 php-cgi
명령은 CGI 사양의 일부이므로 명령 을 사용하면 작동합니다 . 일반 php
명령은이 변수를 무시하지만 스크립트에서 사용할 수 있습니다.
답변
PHP script.php test = asdf를 전달하면
$result = parse_args($argv,$argc,$help);
print_r($result);
STDIN으로 전달하는 경우 STDIN을 읽고 헤더를 직접 구문 분석해야합니다. REQUEST_URI에는 필요한 데이터가 포함되어 있으며이를 전달할 수 있습니다.