커맨드 라인을 통해 $ _GET 변수를 PHP 스크립트에 전달하는 방법?


14

PHP 스크립트를 제공하는 웹 서버를 만들려고합니다. 현재 다음과 같이 작동합니다.

  1. 클라이언트는 /index.php?test=value를 요청합니다
  2. 서버가 호출 php index.php
  3. 서버는 HTTP 요청 헤더를 STDIN으로 PHP 프로세스에 공급합니다.
  4. 서버 php는 STDOUT 의 출력을 읽고 클라이언트로 리턴합니다.

다음과 같은 이유로 매개 변수가 PHP 스크립트로 전달되지 않는 것을 제외하고는이 모든 것이 작동합니다.

var_dump($_GET);

보고:

배열 (0) {}

$_GETPHP 바이너리가 호출 될 때 매개 변수는 어떻게 PHP 바이너리로 전달됩니까?


어떤 웹 서버? 웹 서버를 어떻게 구성 했습니까? PHP를 어떻게 구성 했습니까?
joschi

@ jos : JetHTTP입니다. 내가 직접 작성했습니다.
Nathan Osman

답변:


29

어떤 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


그래 ... 확실해 그게 문제였습니다.
Nathan Osman

3

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명령은이 변수를 무시하지만 스크립트에서 사용할 수 있습니다.


1

PHP script.php test = asdf를 전달하면

$result = parse_args($argv,$argc,$help);
print_r($result);

STDIN으로 전달하는 경우 STDIN을 읽고 헤더를 직접 구문 분석해야합니다. REQUEST_URI에는 필요한 데이터가 포함되어 있으며이를 전달할 수 있습니다.


$_GETPHP가 Apache에서 사용될 때와 같이 변수를 사용할 수 있어야합니다 .
Nathan Osman

누군가가 방문 할 때까지 모든 것이 좋습니다/index.php?test=asdf;rm%20-rf%20/
danlefree

@dan : 걱정하지 마세요. 내 웹 서버가이를 처리 할만큼 똑똑합니다.
Nathan Osman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.