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

时间:2011-07-20 15:01:08

标签: php shell parameters cron

我需要通过shell执行带参数的php文件。

这是我如何运行php文件:

  

php -q htdocs / file.php

我需要传递参数'show'和

  

php -q htdocs / file.php?show = show_name

不起作用

如果有人可以向我拼出要执行的命令以使用set参数执行php文件,那将非常感激。如果没有,请尝试引导我正确的方向。

5 个答案:

答案 0 :(得分:46)

test.php的:

<?php
print_r($argv);
?>

外壳:

$ php -q test.php foo bar
Array
(
    [0] => test.php
    [1] => foo
    [2] => bar
)

答案 1 :(得分:5)

如果您有网络服务器(不仅安装了php解释器,而且安装了LAMP / LNMP /等) - 只需试试这个

wget -O - -q -t 1 "http://mysite.com/file.php?show=show_name" >/dev/null 2>&1

其中:

  • «-O - » - (字母“O”,不为零!)将“下载的html”重定向到stdout
  • «&gt; / dev / null 2&gt;&amp; 1» - 重定向标准输出&amp; stderr输出无处
  • «-q» - 安静 wget 运行
  • «-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, Setup background process? from php code

我在我的cron工作中使用wget方法;希望它有所帮助。

答案 2 :(得分:3)

您需要从$argc$argv读取命令行参数。

使用问号是您在URL中执行的操作,与从命令行执行PHP无关。

另请参阅:http://www.sitepoint.com/php-command-line-1/

答案 3 :(得分:2)

除了其他答案(这些都是正确的)之外,您还可以将参数作为环境参数传递,如下所示:

FOO=42 BAR=quux php test.php

然后,它们将出现在超级全球$_ENV

答案 4 :(得分:0)

如果您从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参数。