Итак, у меня есть cronjob, который выполняет скрипт PHP примерно так:
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, поэтому он всегда запускается первым при вводе php из оболочки.
Чтобы запустить PHP5 из оболочки, вам нужно указать полный путь:
/usr/local/php5/bin/php --version
Пользователь cron не будет использовать ваш путь .bash_profile
, поэтому вам нужно будет указывать полный путь к PHP5 в каждом задании cron.