假设我们通常通过
访问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?怀疑它会起作用。
谢谢!
答案 0 :(得分:229)
使用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¶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";'
答案 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'