通过终端执行PHP get请求

时间:2012-10-07 09:06:21

标签: php cron terminal debian

我目前正在为几个人运行cronjobs,要知道这些人是谁,我给它一个带有一些细节的参数:

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

由于某种原因它会返回此结果:

  

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

语法有什么问题吗?我必须编码吗?

4 个答案:

答案 0 :(得分:6)

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

命令应该是

php auto.php myuser

然后在脚本中使用$_SERVER['argv']超全局数组访问变量 - 每个命令行参数在该数组中以脚本名称开头。您可以使用$_SERVER['argc']

检查传递的参数数量

在这个例子中

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

奖励信息

你可以在php文件的第一行添加#!/usr/bin/php(称为shebang),添加执行位,然后你不必在命令行上调用php就可以调用脚本。假设php位于/ usr / bin / php

的典型位置

答案 1 :(得分:2)

问号标记表示HTTP GET参数,该参数在终端上没有意义,因为不涉及Web服务器。你可以用这个:

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

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

答案 2 :(得分:2)

您无法使用url-style参数从命令行调用php脚本,但有几种可能的解决方案:

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

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

使用php的getopt扩展名修改脚本以接受shell样式参数

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

被称为

php -q auto.php -u user

查看getopt文档页面,你可以使它比它更加漂亮。使用getopt而不是使用argc / argv(它仍然是一个有效的选项btw)的主要优点是,处理可以按任何顺序给出的多个参数要容易得多。例如,假设您需要:

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

你需要写一些支持代码来解析这些参数,而getopt本身就是这样做的。

答案 3 :(得分: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部分。