在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¶m2=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'