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