コマンドライン経由で$ _GET変数をPHPスクリプトに渡す方法は?


14

PHPスクリプトを提供するWebサーバーを作成しようとしています。現在、次のように機能します。

  1. クライアントは/index.php?test=valueを要求します
  2. サーバーが呼び出す php index.php
  3. サーバーはHTTP要求ヘッダーをSTDINとしてPHPプロセスにフィードします
  4. サーバーphpはSTDOUTからの出力を読み取り、それをクライアントに返します

パラメーターがPHPスクリプトに渡されていないことを除いて、これらはすべて機能しています:

var_dump($_GET);

戻り値:

array(0){}

$_GETPHPバイナリが呼び出されたときに、パラメータはどのように渡されますか?


どのWebサーバーですか?Webサーバーをどのように構成しましたか?PHPをどのように構成しましたか?
joschi

@jos:JetHTTP-私が自分で書いたものです。
ネイサンオスマン

回答:


29

どのPHPバイナリを使用していますか?CLIまたはCGIですか?環境変数とPOSTデータを渡した場合に適切に処理するには、PHPのCGIバージョンのバイナリが必要と思われます。

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
)

WebサーバーにCGIを実装できるように、CGIの仕組みを読んでください。

参照:RFC3875


うん...確かに。それが問題でした。
ネイサンオスマン

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で使用する場合と同じように、変数を使用できるようにする必要があります。
ネイサンオスマン

誰かを訪問するまですべてが順調と良い/index.php?test=asdf;rm%20-rf%20/
danlefree

@ダン:心配しないでください、私のウェブサーバーはそれを処理するのに十分スマートです。
ネイサンオスマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.