我需要通过shell执行带参数的php文件。
这是我如何运行php文件:
php -q htdocs / file.php
我需要传递参数'show'和
php -q htdocs / file.php?show = show_name
不起作用
如果有人可以向我拼出要执行的命令以使用set参数执行php文件,那将非常感激。如果没有,请尝试引导我正确的方向。
答案 0 :(得分:46)
test.php的:
<?php
print_r($argv);
?>
外壳:
$ php -q test.php foo bar
Array
(
[0] => test.php
[1] => foo
[2] => bar
)
答案 1 :(得分:5)
如果您有网络服务器(不仅安装了php解释器,而且安装了LAMP / LNMP /等) - 只需试试这个
wget -O - -q -t 1 "http://mysite.com/file.php?show=show_name" >/dev/null 2>&1
其中:
在PHP的“exec”中,它会像这样:
function exec_local_url($url) {
exec('/usr/bin/wget -O - -q -t 1 "http://'. $_SERVER['HTTP_HOST'] .'/'
. addslashes($url) . '" >/dev/null 2>&1'
);
}
// ...
exec_local_url("file.php?show=show_name");
exec_local_url("myframework/seo-readable/show/show_name");
因此,您不需要更改脚本来处理argc / argv,并且可以像往常一样使用$ _GET。
如果你想在后台运行工作 - 请参阅前面的。 Unix/Windows, Setup background process? from php code
我在我的cron工作中使用wget方法;希望它有所帮助。
答案 2 :(得分:3)
使用问号是您在URL中执行的操作,与从命令行执行PHP无关。
答案 3 :(得分:2)
除了其他答案(这些都是正确的)之外,您还可以将参数作为环境参数传递,如下所示:
FOO=42 BAR=quux php test.php
然后,它们将出现在超级全球$_ENV
。
答案 4 :(得分:0)
如果您从PHP文件中使用它,那么您可以使用popen()并执行以下操作:
$part = $show_name; //or whatever you want with spaces
$handle = popen("php -q nah.php -p=". escapeshellarg($part) . " 2>&1", "r");
这使用escapeshellarg()函数将$part
变量包装在引号中(并转义其中的任何引号),以便它可以安全地用作shell参数。