【发布时间】:2010-01-19 15:44:01
【问题描述】:
所以我有一个执行 PHP 脚本的 cronjob,如下所示:
0 0 * * * /usr/local/bin/php -f /home/mysite/mysite.com/cronjobs/renewal_email.php
如果我从命令行发出相同的命令,它运行时不会出错,并且使用 l 标志运行时不会显示语法错误。但是 cron 通过电子邮件发送以下内容:
解析错误:语法错误,意外的 T_OBJECT_OPERATOR
有问题的行是
$courses[$t->CourseNumber] = $t->course()->CourseName;
这些有限的信息是否会引发任何危险信号?任何人都知道为什么这应该在 cron 下而不是在命令行下发生?
// 编辑添加 DreamHost 支持响应。脚本正在处理此更改。
服务器上 PHP 的默认版本是 PHP4。这是因为服务器使用 PATH 设置而不是 Apache 来指定运行哪个版本。 PHP4 /usr/local/bin/php 的路径位于 PHP5 路径 /usr/local/php5/bin/php 之前,因此当您从 shell 键入 php 时,它总是首先运行。
要从 shell 运行 PHP5,您需要指定整个路径:
/usr/local/php5/bin/php --version
cron 用户不会使用您的 .bash_profile 路径,因此您需要在每个 cron 作业中指定 PHP5 的完整路径。
【问题讨论】:
-
是否从该脚本中填充了 $t ?
标签: php command-line cron