2010-01-19 10 views
0

j'ai donc une tâche cron qui exécute un script PHP comme ceci:Erreur d'analyse lors de l'exécution de cron mais pas à partir de la ligne de commande?

0 0 * * * /usr/local/bin/php -f /home/mysite/mysite.com/cronjobs/renewal_email.php 

Si je délivre la même commande à partir de la ligne de commande, il fonctionne sans erreur et en cours d'exécution avec le drapeau de l montre aucune erreur de syntaxe. Cependant des e-mails Cron ce qui suit:

Parse error: syntax error, unexpected T_OBJECT_OPERATOR

La ligne en question est

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

Est-ce que ce montant limité de l'info lever des drapeaux rouges? Quelqu'un voit pourquoi cela devrait se passer sous cron mais pas à partir de la ligne de commande?

// Éditer pour ajouter la réponse du support DreamHost. Script travaille avec ce changement.

La version par défaut de PHP sur le serveur est PHP4. Cela est dû au fait que le serveur utilise les paramètres PATH plutôt qu'Apache pour spécifier la version à exécuter. Le chemin pour PHP4/usr/local/bin/php vient avant le chemin PHP5/usr/local/php5/bin/php donc il s'exécute toujours en premier lorsque vous tapez php à partir du shell.

Pour exécuter PHP5 du shell que vous devez spécifier le chemin complet:

/usr/local/php5/bin/php --version 

L'utilisateur cron ne pas utiliser votre chemin .bash_profile donc vous devez spécifier le chemin complet PHP5 dans chaque tâche cron.

+0

Est-ce que $ t est généré à partir de ce script? – Trevoke

Répondre

1

Hm. Le message d'erreur semble que vous exécutez un script PHP5 sur un interpréteur PHP4. Cependant, si vous utilisez exactement le même chemin vers le binaire PHP, je ne vois pas comment cela pourrait se produire.

Pouvez-vous faire le travail cron faire un phpinfo() et voir ce que la sortie est?

Pour PHP 4, il vous faudrait réécrire l'instruction:

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

Oui, Dreamhost a la version CLI PHP 4.4.8 et la version 5.2.6 de PHP sinon. Quelque chose à faire à ce sujet? Merci. – jerrygarciuh

+0

Voir ma réponse modifiée. –

+0

@jerry: changez votre version de php dans votre profil de shell ou utilisez le chemin complet dans votre onglet. – prodigitalson

1

Je dirais que vous utilisez deux versions différentes de PHP. l'exécution de which php à partir de la ligne de commande produit-elle un chemin différent de celui que vous utilisez dans l'onglet cron?

0

Cette erreur signifie que votre variable ne contient pas un objet. Essayez var_dump: en l'exécutant lors de l'exécution du travail cron.

+1

Je ne pense pas que ce soit correct. C'est une erreur d'analyse. Le script n'est pas en cours d'exécution et instancie des objets. Il échoue à compiler. – jerrygarciuh

Questions connexes