PHP 在 Linux 命令提示符下传递 $_GET

2022-08-30 06:59:43

假设我们通常通过以下方式访问

http://localhost/index.php?a=1&b=2&c=3

我们如何在Linux命令提示符下执行相同的操作?

php -e index.php

但是传递 $_GET 变量呢?也许像这样?我怀疑这会起作用。php -e index.php --a 1 --b 2 --c 3


答案 1

服务器故障上的这个答案

使用二进制文件而不是仅 ,并在命令行上传递参数,如下所示:php-cgiphp

php-cgi -f index.php left=1058 right=1067 class=A language=English

这就放进去了:$_GET

Array
(
    [left] => 1058
    [right] => 1067
    [class] => A
    [language] => English
)

您还可以设置由 Web 服务器设置的环境变量,如下所示:

REQUEST_URI='/index.php' SCRIPT_NAME='/index.php' php-cgi -f index.php left=1058 right=1067 class=A language=English

答案 2

通常,要将参数传递给命令行脚本,您将使用全局变量或 getoptargv

// Bash command:
//   php -e myscript.php hello
echo $argv[1]; // Prints "hello"

// Bash command:
//   php -e myscript.php -f=world
$opts = getopt('f:');
echo $opts['f']; // Prints "world"

$_GET引用 HTTP GET 方法参数,这些参数在命令行上不可用,因为它们需要 Web 服务器来填充。

如果您确实想填充,可以执行以下操作:$_GET

// Bash command:
//   export QUERY_STRING="var=value&arg=value" ; php -e myscript.php
parse_str($_SERVER['QUERY_STRING'], $_GET);
print_r($_GET);
/* Outputs:
     Array(
        [var] => value
        [arg] => value
     )
*/

您还可以执行给定的脚本,从命令行填充,而无需修改所述脚本:$_GET

export QUERY_STRING="var=value&arg=value" ; \
php -e -r 'parse_str($_SERVER["QUERY_STRING"], $_GET); include "index.php";'

请注意,您也可以对 和 执行相同的操作。$_POST$_COOKIE


推荐