2012-10-07 174 views
1

我目前正在运行的cronjobs几个人,PHP GET请求来知道谁是这些人我给它一些细节参数:执行通过终端

0 1 * * * cd /var/www; php auto.php?user=user 

由于某种原因,它返回这个结果:

无法打开输入文件:?auto.php用户=用户

是有什么错的语法?我必须编码任何东西吗?

回答

6

在命令行PHP中使用的参数是不同

命令应该是

php auto.php myuser

然后在脚本访问使用$_SERVER['argv']超全局数组变量 - 每个命令行参数是为了在该阵列中以脚本名称开始。您可以检查在这种情况下与$_SERVER['argc']

传递的参数数目

 
$_SERVER['argc'] = 2 
$_SERVER['argv'][0] = auto.php 
$_SERVER['argv'][1] = myuser 

奖金信息

您可以添加#!/usr/bin/php(称为认领)到PHP文件的第一行,添加执行位,那么你不必在命令行调用php,你可以调用脚本。假设PHP是位于/ usr/bin中/ PHP的典型位置

2

问号表示一个HTTP GET参数,它在终端上没有意义,因为不涉及Web服务器。您可以使用此:

cd /var/www; php auto.php some parameters 

然后用$_SERVER['argc']$_SERVER['argv'] PHP脚本中读取参数。

+0

显示“一些参数” – Osa

+0

的完整的例子这是完整的例子,“一些”和“参数”是参数。尝试脚本中的'var_dump($ _ SERVER ['argv'])'来看看它是如何工作的。 –

2

不能调用从URL风格的参数命令行PHP脚本,但也有几个可能的解决方案:

您可以使用wget来有效地触发通过web服务器的脚本(假设它实际上是在服务器中运行的网页/脚本)

0 1 * * * wget http://yourserver/thepath/auto.php?user=user 

使用PHP的getopt扩展您修改脚本以接受壳式参数

$options = getopt("u:"); // expect -u followed by the parameter value 
$user = $options["u"]; 
// continue the script 

将其称作

php -q auto.php -u user 

退房的getopt的文档页面,你可以把它比这个票友很多也是如此。使用getopt over argc/argv(它仍然是一个有效的btw选项)的主要优点是处理可以按任意顺序给出的多个参数要容易得多。例如,假设您需要:

php -q auto.php -u user -p pass -a another -b whatever 

你需要写一段代码,支持分析这些参数,getopt的确实是所有的本身。

1

你不能做到这一点的方式 - 它传递参数的HTTP请求,不到处的方式。对于命令行,您必须使用$_SERVER['argv']$_SERVER['argc']

你的情况

你应该返工你的代码位。在地方的

$user = $_GET['user']; 

使用

$user = $_SERVER['argv'][1]; 

,应该改变方式,你调用你的脚本:

0 1 * * * cd /var/www; php auto.php user 

您还可以会发现一些命令行的辅助类是有用的,即: CLI

见PHP手册Command Line Usage节更多的INF ormation。