Shell使用参数运行/执行php脚本

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_

我需要通过shell执行一个带有参数的php文件

下面是我将如何运行php文件:

php-qhtdocs/file.php

我需要将参数“show”传递给

php-q htdocs/file.php?show=show\u name

不起作用


如果有人能告诉我要执行什么命令才能让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不同)
在PHP的“exec”中,它将是这样的smth:

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
时,您会责怪如此复杂的解决方法,也就是说,它不适用于所有情况。不管怎样,我认为你们只需要把你们当前的案例、你们的大脑、基准测试工具重新整理一下就行了!;)