由cron运行而不是从命令行运行时解析错误?

时间:2010-01-19 15:44:02

标签: php command-line cron

所以我有一个执行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的完整路径。

3 个答案:

答案 0 :(得分:1)

我会说你正在使用两个不同版本的PHP。从命令行运行which php会产生与您在crontab中使用的路径不同的路径吗?

答案 1 :(得分:1)

嗯。错误消息听起来像是在PHP4解释器上运行PHP5脚本。但是,如果您使用与PHP二进制文件完全相同的路径,我无法看到它是如何发生的。

你能让cron作业做phpinfo()并查看输出是什么吗?

对于PHP 4,您必须重写指令:

$temp = $t->course(); 
$courses[$t->CourseNumber] = $temp->CourseName;

答案 2 :(得分:0)

该错误意味着您的变量不包含对象。在运行cron作业时尝试var_dump:ing。