【问题标题】:How to pass query string parameters to the PHP binary?如何将查询字符串参数传递给 PHP 二进制文件?
【发布时间】:2011-04-20 10:03:23
【问题描述】:

我正在开发一个调用 PHP 二进制文件(通过 CGI)来处理脚本的网络服务器。

问题来了:

PHP 脚本没有获取命令行参数。比如客户端请求path/to/file.php?test=value,则$_GET数组为空。

我尝试在环境变量 (QUERY_STRING) 中传递参数,但它们仍然没有出现。

如何将查询字符串参数传递给 PHP 应用程序?

【问题讨论】:

    标签: php http parameters cgi query-string


    【解决方案1】:

    -- 选项1:php-cgi--

    使用 'php-cgi' 代替 'php' 来运行你的脚本。这是最简单的方法,因为您无需专门修改 PHP 代码即可使用它:

    php-cgi -f /my/script/file.php a=1 b=2 c=3
    

    -- 选项 2:如果您有网络服务器--

    如果 php 文件位于 Web 服务器上,您可以在命令行中使用 'wget':

    wget 'http://localhost/my/script/file.php?a=1&b=2&c=3'
    

    或者:

    wget -q -O - "http://localhost/my/script/file.php?a=1&b=2&c=3"
    

    -- 访问php中的变量--

    在选项 1 和 2 中,您可以像这样访问这些参数:

    $a = $_GET["a"];
    $b = $_GET["b"];
    $c = $_GET["c"];
    

    【讨论】:

      【解决方案2】:

      正如Don’t call me DOM » Testing CGI scripts with QUERY_STRING, in PHP 中提到的,您可能必须使用parse_str 来解析通过cli 模式传递的环境变量-Linux 终端中的示例:

      $ QUERY_STRING="aa=bb&cc=dd" php -r 'parse_str(getenv("QUERY_STRING"),$_GET); print_r($_GET);'
      Array
      (
          [aa] => bb
          [cc] => dd
      )
      

      【讨论】:

      • 你能补充一些关于环境变量的信息吗?例如,它们的名称(特定名称或约定。可能的名称冲突等)。长度限制(Linux、Windows 等)。等等(Without“Edit:”、“Update:”或类似的 - 答案应该看起来好像是今天写的。)
      【解决方案3】:

      PHP 有多种 SAPI。其中之一是 cli SAPI,这显然是您正在使用的,cli SAPI 不会填充 $_GET, $_POST ... 因为它用于命令行脚本。

      在您的情况下,您需要 PHP cgi SAPI。 (例如,您需要在 shebang 中将 php 替换为 php-cgi[1])

      [1] 在大多数发行版中它被称为php-cgi,如果您自己编译 PHP,则需要启用 cgi。

      【讨论】:

      • 啊,这就解释了。谢谢!
      • 当你没有 php-cgi 但想在 cgi 上下文中模拟调用 php 时,你会怎么做?
      • 拼写出来,你可以运行php-cgi file.php a=1 b=2
      【解决方案4】:

      你说的是命令行参数还是$_GET参数?这些不一样。

      使用网络浏览器时,使用$_GET。但是如果你传递像/path/to/file.php arg1 arg2 这样的命令行参数,那么你必须使用$argv(并且$argc 包含元素的长度)。

      $argv[0] 始终包含运行文件,在本例中,/path/to/file.php
      $argv[1] 在本例中为 arg1$argv[2]arg2。所以$argc 包含 3 个。

      有用的资源:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-07
        • 2012-07-20
        • 2014-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多