Shell运行/执行带有参数的php脚本


Shell run/execute php script with parameters

我需要通过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参数。