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

时间:2010-11-15 16:18:30

标签: php linux

假设我们通常通过

访问
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?怀疑它会起作用。

谢谢!

13 个答案:

答案 0 :(得分:229)

从此answer on ServerFault

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

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

答案 1 :(得分:116)

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

// 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执行相同操作。

答案 2 :(得分:16)

我在Ubuntu上没有php-cgi二进制文件,所以我这样做了:

% alias php-cgi="php -r '"'parse_str(implode("&", array_slice($argv, 2)), $_GET); include($argv[1]);'"' --"
% php-cgi test1.php foo=123
<html>
You set foo to 123.
</html>

%cat test1.php
<html>You set foo to <?php print $_GET['foo']?>.</html>

答案 3 :(得分:11)

php file_name.php var1 var2 varN

然后在PHP的第一行设置$_GET变量,虽然这不是设置$_GET变量的理想方法,但您可能会遇到问题,具体取决于您稍后使用该变量执行的操作。

if (isset($argv[1])) {
   $_GET['variable_name'] = $argv[1];
}

您可以从PHP应用中的$argv数组访问启动脚本的变量。第一个条目将是它们来自的脚本的名称,因此如果要处理一堆变量,您可能希望执行array_shift($argv)删除第一个条目。或者只是加载到局部变量。

答案 4 :(得分:9)

尝试使用WGET

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

答案 5 :(得分:9)

有时你没有选择编辑php文件来将$ _GET设置为传入的参数,有时你不能或不想安装php-cgi。

我发现这是该案例的最佳解决方案:

php -r '$_GET["key"]="value"; require_once("script.php"); 

这可以避免更改您的php文件,并允许您使用plain php命令。如果您安装了php-cgi,请务必使用它,但这是下一个最好的事情。认为这个选项值得一提

-r表示在下面的字符串中运行php代码。您在那里手动设置$ _GET值,然后引用您要运行的文件。

值得注意的是,你应该在正确的文件夹中运行它,通常但不总是php文件所在的文件夹.Prosements语句将使用命令的位置来解析相对URL,而不是文件的位置

答案 6 :(得分:6)

- 选项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和&amp; 2你可以像这样访问这些参数:

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

答案 7 :(得分:1)

如果您需要传递$_GET$_REQUEST$_POST或其他任何内容,您还可以使用PHP互动模式:

php -a

然后输入:

<?php
$_GET['a']=1;
$_POST['b']=2;
include("/somefolder/some_file_path.php");

这将手动设置您想要的任何变量,然后使用这些变量设置运行您的php文件。

答案 8 :(得分:1)

如果您可以编辑PHP脚本,可以在脚本开头使用以下代码人工填充$ _GET数组,然后使用以下语法调用脚本:php -f script.php name1=value1 name2=value2

// When invoking the script via CLI like "php -f script.php name1=value1 name2=value2", this code will populate $_GET variables called "name1" and "name2", so a script designed to be called by a web server will work even when called by CLI
if (php_sapi_name() == "cli") {
    for ($c = 1; $c < $argc; $c++) {
        $param = explode("=", $argv[$c], 2);
        $_GET[$param[0]] = $param[1]; // $_GET['name1'] = 'value1'
    }
}

答案 9 :(得分:1)

在命令行粘贴以下

export QUERY_STRING="param1=abc&param2=xyz" ;  
POST_STRING="name=John&lastname=Doe" ; php -e -r 
'parse_str($_SERVER["QUERY_STRING"], $_GET); parse_str($_SERVER["POST_STRING"], 
$_POST);  include "index.php";'

答案 10 :(得分:0)

我只是这样传递它们:

php5 script.php param1=blabla param2=yadayada

工作得很好,$ _GET数组是:

array(3) {
  ["script_php"]=>
  string(0) ""
  ["param1"]=>
  string(6) "blabla"
  ["param2"]=>
  string(8) "yadayada"
}

答案 11 :(得分:-1)

php -r 'parse_str($argv[2],$_GET);include $argv[1];' index.php 'a=1&b=2'

您可以将第一部分作为别名:

alias php-get='php -r '\''parse_str($argv[2],$_GET);include $argv[1];'\'

然后简单地使用:

php-get some_script.php 'a=1&b=2&c=3'

答案 12 :(得分:-2)

或只是(如果你有LYNX):

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