如何通过命令行将$ _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);

返回:

数组(0){}

$_GET调用PHP二进制文件时如何将参数传递给它?


哪个网络服务器?您如何配置Web服务器?您如何配置PHP?
joschi 2010年

@jos:是JetHTTP-我自己写的一个。
内森·奥斯曼

Answers:


29

您正在使用哪个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


是的,肯定。那就是问题所在。
内森·奥斯曼

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将包含您需要的数据,您可以传递它。


我需要$_GET像在Apache下使用PHP时一样可用的变量。
内森·奥斯曼

一切顺利,直到有人来访/index.php?test=asdf;rm%20-rf%20/
danlefree 2010年

@dan:不用担心,我的网络服务器足够聪明。
内森·奥斯曼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.