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

说我们通常通过访问

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

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

 php -e index.php 

但是传递$ _GETvariables呢? 也许像php -e index.php – a 1 –b 2 –c 3? 怀疑这将工作。

谢谢!

通常,为了将parameter passing给命令行脚本,您将使用argv全局variables或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

从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服务器设置的环境variables,如下所示:

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

我在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>
你把foo设置为123。
 </ HTML>

 %cat test1.php
 <html>您将foo设置为<?php print $ _GET ['foo']?>。</ html>“

尝试使用WGET

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

…然后在PHP的第一行设置你的$ _GETvariables,虽然这不是设置$ _GETvariables的理想方法,你可能会遇到问题,这取决于你以后用这个variables做什么。

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

你启动脚本的variables将可以从你的PHP应用程序中的$ argv数组访问。 第一个条目是他们来自的脚本的名字,所以如果你想处理一堆variables,你可能想要做一个array_shift($ argv)来删除第一个条目。

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

我发现这是最好的解决scheme:

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

这避免了改变你的PHP文件,并让你使用普通的PHP命令。 如果你已经安装了php-cgi,尽一切办法来使用它,但这是第二好的。 以为这个选项值得一提

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

它值得注意的是你应该在正确的文件夹中运行这个,通常但不是总是php文件夹所在的文件夹。要求语句将使用你的命令的位置来parsing相关的URL,而不是文件的位置

– 选项1:php-cgi –

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

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

– 选项2:如果你有一个networking服务器 –

如果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中访问variables –

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

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

如果您有编辑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' } } 

在命令行中粘贴以下内容

 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";' 

如果您需要传递$ _GET,$ _REQUEST,$ _POST或其他任何东西,您也可以使用PHP交互模式:

 php -a 

然后键入:

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

这将手动设置你想要的任何variables,然后用这些variables设置运行你的PHP文件。

我只是通过他们这样的:

 php5 script.php param1=blabla param2=yadayada 

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

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

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'

或者只是(如果你有LYNX):

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