我需要通过shell执行一个带有参数的php文件。
下面是我将如何运行php文件:php -q html/file.php
我需要传递参数'show'和
php -q htdocs/file.php?显示= show_name
不工作
如果有人能告诉我执行什么命令来获得php文件与设置参数执行,这将是非常感激的。如果不是,请试着引导我正确的方向。
test.php:
<?php
print_r($argv);
?>
壳:
$ php -q test.php foo bar
Array
(
[0] => test.php
[1] => foo
[2] => bar
)
如果你有webserver(不只是php解释器安装,但LAMP/LNMP/等)-就试试这个
wget -O - -q -t 1 "http://mysite.com/file.php?show=show_name" >/dev/null 2>&1
地点:
- «-O -»-(字母"O",不是零!)将"下载的html"重定向到标准输出
- «>/dev/null 2>&1»-重定向标准输出&错误输出到任何地方
- «-q»- quiet wget run
- «-t 1»-只是1尝试连接(不像默认的20)
在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,设置后台进程?从PHP代码
我在我的cron工作中使用wget方法;
您需要从$argc和$argv中读取命令行参数
使用问号是你在URL中做的事情,与从命令行执行PHP无关。
参见:http://www.sitepoint.com/php-command-line-1/
除了其他答案(非常正确)之外,还可以将参数作为环境参数传递,如下所示:
FOO=42 BAR=quux php test.php
它们将在超全局$_ENV
中可用。
如果你在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参数。