我目前正在为几个人运行 cronjobs,要知道这些人是谁,我给它一个包含一些细节的参数:
0 1 * * * cd /var/www; php auto.php?user=user
由于某种原因,它返回此结果:
无法打开输入文件:auto.php?user=user
语法有什么问题吗?我必须编码任何东西吗?
在命令行 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 文件的第一行添加一个(称为 shebang),添加执行位,然后您不必在命令行上调用 php,您只需调用脚本即可。假设 php 位于 /usr/bin/php 的典型位置
您不能使用 url 样式参数从命令行调用 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 文档页面,你也可以让它比这更精彩。与使用 argc/argv 相比,使用 getopt 的主要优点(顺便说一句,这仍然是一个有效的选项)是处理可以以任何顺序给出的多个参数要容易得多。例如,假设您需要:
php -q auto.php -u user -p pass -a another -b whatever
您将需要编写相当多的支持代码来解析这些参数,而 getopt 自己完成了这一切。
问号表示 HTTP GET 参数,在终端上没有意义,因为不涉及 Web 服务器。你可以使用这个:
cd /var/www; php auto.php some parameters
然后在 PHP 脚本中使用$_SERVER['argc']
and来读取参数。$_SERVER['argv']