Shell使用参数运行/执行php脚本
我需要通过shell执行一个带有参数的php文件 下面是我将如何运行php文件: php-qhtdocs/file.php 我需要将参数“show”传递给 php-q htdocs/file.php?show=show\u name 不起作用Shell使用参数运行/执行php脚本,php,shell,parameters,cron,Php,Shell,Parameters,Cron,我需要通过shell执行一个带有参数的php文件 下面是我将如何运行php文件: php-qhtdocs/file.php 我需要将参数“show”传递给 php-q htdocs/file.php?show=show\u name 不起作用 如果有人能告诉我要执行什么命令才能让php文件以设置的参数执行,我将不胜感激。如果没有,请尝试引导我正确的方向。您需要从和读取命令行参数 使用问号是在URL中执行的操作,与从命令行执行PHP无关 另请参见:test.php: <?php print_
如果有人能告诉我要执行什么命令才能让php文件以设置的参数执行,我将不胜感激。如果没有,请尝试引导我正确的方向。您需要从和读取命令行参数 使用问号是在URL中执行的操作,与从命令行执行PHP无关 另请参见:test.php:
<?php
print_r($argv);
?>
除了其他答案(非常正确),您还可以将参数作为环境参数传递,如下所示:
FOO=42 BAR=quux php test.php
$part = $show_name; //or whatever you want with spaces
$handle = popen("php -q nah.php -p=". escapeshellarg($part) . " 2>&1", "r");
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");
然后,它们将在超级全局
$\u ENV
中可用。如果您是从PHP文件使用它,则可以使用popen()并执行以下操作:
FOO=42 BAR=quux php test.php
$part = $show_name; //or whatever you want with spaces
$handle = popen("php -q nah.php -p=". escapeshellarg($part) . " 2>&1", "r");
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");
它使用escapeshellarg()函数将$part
变量用引号括起来(并对其中的任何引号进行转义),这样就可以安全地将其用作shell参数。如果您安装了webserver(不仅安装了php解释器,还安装了LAMP/LNMP/etc)-只需尝试一下
wget -O - -q -t 1 "http://mysite.com/file.php?show=show_name" >/dev/null 2>&1
其中:
- «-O-»-(字母“O”,不是零!)将“下载的html”重定向到标准输出
- «>/dev/null 2>&1»-将stdout和stderr输出重定向到别处
- «-q»-quietwgetrun
- «-t 1»-仅1尝试连接(与默认值20不同)
FOO=42 BAR=quux php test.php
$part = $show_name; //or whatever you want with spaces
$handle = popen("php -q nah.php -p=". escapeshellarg($part) . " 2>&1", "r");
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,并且可以像通常一样使用$\u GET
如果您希望作业在后台运行,请参阅
我在cron工作中使用wget方法;希望有帮助。当我输入该命令时,我得到一个“FOO”错误。我在Windows上使用xampp的shell命令,这会改变什么吗?它可能在Windows上不起作用,但在大多数unix类型的shell上可以很好地工作。我成功了,我希望PHP的$\u GET[]函数能收到它。我花了一段时间才意识到$arvg包含了所有参数。谢谢。好的,所以我不能通过php中的$\u GET接收参数,但是通过$argv,谢谢。我花了一段时间才明白这一点。一个比公认的更好的答案是:使用“PHPCGI”可执行文件而不是“php”。请参阅:在使用
exec
运行作业时,使用wget
和php
命令在安全性或性能方面是否有任何区别?我确信安全性是相同的。性能-当然,wget
会比上面提到的更慢,但更方便。使用wget,请求进入所有隐藏阶段或请求处理,如apache/nginx/lighttpd缓存、重写等。当直接调用php
时,您会责怪如此复杂的解决方法,也就是说,它不适用于所有情况。不管怎样,我认为你们只需要把你们当前的案例、你们的大脑、基准测试工具重新整理一下就行了!;)