我需要通过shell执行一个带有参数的php文件。Shell参数运行/执行php脚本
这里是我会怎样运行PHP文件:
PHP -q的htdocs/file.php
我需要有参数 '秀' 进行传递,并且
PHP -q的htdocs/file.php?显示= SHOW_NAME
不起作用
如果有人可以向我解释执行什么命令来获取php文件以设置参数执行,它将不胜感激。如果不是,请尝试引导我正确的方向。
我需要通过shell执行一个带有参数的php文件。Shell参数运行/执行php脚本
这里是我会怎样运行PHP文件:
PHP -q的htdocs/file.php
我需要有参数 '秀' 进行传递,并且
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
)
好的,所以我不能通过PHP中的$ _GET接收参数,但通过$ argv,谢谢。我花了一段时间才弄清楚。 –
使用问号是您在URL中执行的操作,与命令行执行PHP无关。
除了其他答案(这是相当正确的),你也可以传递参数作为环境参数,如下所示:
FOO=42 BAR=quux php test.php
然后他们将在超全球$_ENV
中可用。
当我输入该命令时,出现“FOO”错误。我在Windows上使用xampp的shell命令,这会改变什么吗? –
它可能无法在Windows上运行,但它在大多数unix类型的shell上可以正常工作。 – troelskn
我得到它的工作,我期待它被PHP的$ _GET []函数接收。我花了一段时间才意识到$ arvg拥有所有参数。谢谢。 –
如果您正在使用它从一个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参数。
如果您有Web服务器(安装不只是PHP解释器,但LAMP/LNMP /等) - 只是试试这个
wget -O - -q -t 1 "http://mysite.com/file.php?show=show_name" >/dev/null 2>&1
其中:
在PHP中的 “执行” 这将是水木清华这样的:
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的方法;希望能帮助到你。
使用'wget'和'php'命令在使用'exec'运行作业时关于安全性或性能有没有区别? – Gixty
我确定安全是一样的。性能 - 当然'wget'会比上面说的更慢,但非常方便。使用wget,请求会执行所有隐藏阶段或请求处理,如apache/nginx/lighttpd缓存,重写等。当直接调用'php'时,你会责怪如此复杂的解决方法,即它不适用于所有情况。无论如何,我认为你只需要把你目前的案例,你的大脑,基准测试工具,只是洗一个好! ;) – FlameStorm
比接受的更好的答案:使用“php-cgi”可执行文件而不是“php”。请参阅:http://stackoverflow.com/a/11965479/543738 –