假设我们通常访问
http://localhost/index.php?a=1&b=2&c=3
Run Code Online (Sandbox Code Playgroud)
我们如何在linux命令提示符下执行相同的操作?
php -e index.php
Run Code Online (Sandbox Code Playgroud)
但是传递$ _GET变量怎么样?也许像php -e index.php --a 1 --b 2 --c 3?怀疑它会起作用.
谢谢!
qri*_*ris 237
从这个关于ServerFault的答案:
使用php-cgi二进制而不仅仅是php,并在命令行上传递参数,如下所示:
php-cgi -f index.php left=1058 right=1067 class=A language=English
Run Code Online (Sandbox Code Playgroud)
这把它放在$_GET:
Array
(
[left] => 1058
[right] => 1067
[class] => A
[language] => English
)
Run Code Online (Sandbox Code Playgroud)
您还可以设置由Web服务器设置的环境变量,如下所示:
REQUEST_URI='/index.php' SCRIPT_NAME='/index.php' php-cgi -f index.php left=1058 right=1067 class=A language=English
Run Code Online (Sandbox Code Playgroud)
net*_*der 121
通常,要将参数传递给命令行脚本,您将使用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
Run Code Online (Sandbox Code Playgroud)
$ _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
)
*/
Run Code Online (Sandbox Code Playgroud)
您还可以执行给定脚本,$_GET从命令行填充,而无需修改所述脚本:
export QUERY_STRING="var=value&arg=value" ; \
php -e -r 'parse_str($_SERVER["QUERY_STRING"], $_GET); include "index.php";'
Run Code Online (Sandbox Code Playgroud)
请注意,您也可以使用$_POST和执行相同的操作$_COOKIE.
小智 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>
der*_*ite 12
有时您没有选择编辑php文件来将$ _GET设置为传入的参数,有时您不能或不想安装php-cgi.
我发现这是该案例的最佳解决方案:
php -r '$_GET["key"]="value"; require_once("script.php");'
Run Code Online (Sandbox Code Playgroud)
这可以避免更改您的php文件,并允许您使用plain php命令.如果您安装了php-cgi,请务必使用它,但这是下一个最好的事情.认为这个选项值得一提
-r表示在下面的字符串中运行php代码.您在那里手动设置$ _GET值,然后引用您要运行的文件.
值得注意的是你应该在正确的文件夹中运行它,通常但不总是php文件所在的文件夹.Prosements语句将使用命令的位置来解析相对URL,而不是文件的位置
T. *_*nes 10
php file_name.php var1 var2 varN
Run Code Online (Sandbox Code Playgroud)
然后在PHP的第一行设置$ _GET变量,尽管这不是设置$ _GET变量的理想方法,并且您可能会遇到问题,具体取决于您稍后使用该变量执行的操作.
if (isset($argv[1])) {
$_GET['variable_name'] = $argv[1];
}
Run Code Online (Sandbox Code Playgroud)
您启动脚本的变量可以从您的php应用程序中的$ argv数组访问.第一个条目是它们来自的脚本的名称,所以如果你想处理一堆变量,你可能想要做一个array_shift($ argv)来删除第一个条目.或者只是加载到局部变量.
尝试使用WGET:
WGET 'http://localhost/index.php?a=1&b=2&c=3'
Run Code Online (Sandbox Code Playgroud)
-选项1:php-cgi-
使用“ php-cgi”代替“ php”来运行脚本。这是最简单的方法,因为您无需专门修改php代码即可使用它:
php-cgi -f /my/script/file.php a=1 b=2 c=3
Run Code Online (Sandbox Code Playgroud)
-选项2:如果您有网络服务器-
如果php文件位于网络服务器上,则可以在命令行上使用“ wget”:
wget 'http://localhost/my/script/file.php?a=1&b=2&c=3'
Run Code Online (Sandbox Code Playgroud)
要么:
wget -q -O - "http://localhost/my/script/file.php?a=1&b=2&c=3"
Run Code Online (Sandbox Code Playgroud)
-在php中访问变量-
在选项1和2中,您都可以像下面这样访问这些参数:
$a = $_GET["a"];
$b = $_GET["b"];
$c = $_GET["c"];
Run Code Online (Sandbox Code Playgroud)