web-dev-qa-db-ja.com

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

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

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

次の理由により、パラメータがPHPスクリプトに渡されないことを除いて、これはすべて機能しています。

var_dump($_GET);

戻り値:

配列(0){}

$_GETパラメータは、起動時にPHPバイナリにどのように渡されますか?

14
Nathan Osman

PHPバイナリを使用していますか?CLIまたはCGIですか?PHPのバイナリの CGIバージョン 適切に処理して、環境変数と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 [〜#〜] がどのように機能するかを読んで、それをWebサーバーに実装することができます。

参照: RFC3875

29
Zoredache

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コマンドはこの変数を無視しますが、スクリプトがそれを使用する場合があります。

3
Nathan Osman

Php script.php test = asdfを渡す場合

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

STDINに渡す場合は、STDINを読み取り、自分でヘッダーを解析する必要があります。 REQUEST_URIには必要なデータが含まれており、それを渡すことができます。

1
karmawhore