2010-07-25 6 views
1

J'ai configuré un travail cron via mon panneau de configuration. J'ai téléchargé le script via mon FTP, mis en place son autorisation en tant que 777 (est-il sécuritaire de le faire?) & a donné le chemin de ce script dans le travail. Maintenant, le script utilise des scripts dépendants pour pouvoir exécuter le travail. Déroutant? Voici ce qu'il est comme:PHP: Erreur lors de l'exécution d'un script via le travail Cron

cron.php

<?php require("some_file1.php"); 
require("file1.php"); 
require("folder1/file1.php"); 
require("folder1/file2.php"); 
require("folder2/file1.php"); 

//This value is actually received from one of the require files above after come calculations 
$get_content = 'This is some value received after calculations.'; 

mail('Hi', '[email protected]', $get_content, 'Error'); 
?> 

J'ai choisi de recevoir la confirmation du travail Cron à mon email & ici est l'erreur que j'ai reçu:

mydomain.com/cron.php: line 1: syntax error near unexpected token `(' 
mydomain.com/cron.php: line 1: `<?php require("some_file1.php"); 
' 

I essayé de parler au support mais ils n'ont aucune idée de ce détail technique & actuellement les gars techniques ne sont pas disponibles. Ce sera génial si quelqu'un peut m'aider ici.

Dans l'attente de vos réponses.

Merci.

+0

Les autorisations '777' ne sont presque jamais sécurisées. –

+0

Avez-vous besoin de changer les perms de fichier? – MrWhite

+0

Alors qu'est-ce que je définis comme? 644 donne une erreur d'autorisation refusée. Quelle est la permission la plus sûre pour exécuter un travail cron? – Devner

Répondre

0

J'ai été en mesure de résoudre ce problème avec l'aide du support technique du site Web. Voici la solution juste au cas où quelqu'un se demandait. Ce qui suit est la "Commande à exécuter" & doit être ajouté via le Panneau de configuration (GUI) du site Web.

/usr/local/php5/bin/php 

/home/username/mydomain.com/cron.php 

Le fichier cron.php reste le même.

Je suppose que je vais devoir accepter ma propre réponse car c'est la réponse la plus pertinente qui apporte la solution parfaite. Je vous remercie encore pour votre aide & apprécie toutes les réponses.

+0

Le chemin que vous voyez ici est très dépendant de la façon dont php est installé sur votre système. Une façon de le rendre plus générique, de sorte que vous n'avez pas besoin d'aller chercher la variable, est d'utiliser ce qui suit, sans les guillemets: "#!/Usr/bin/env php" de trouver l'exécutable sur votre chemin, où que ce soit (si c'est dans le chemin). Si vous voulez savoir quoi mettre dans la ligne, vous pouvez exécuter, à partir d'un shell, quel php # =>/usr/local/php5/bin/php –

+0

Heureux que vous l'avez résolu et merci de nous avoir signalé . Donc, vous avez probablement essayé d'appeler votre script 'cron.php' directement en utilisant CRON sans appeler l'interpréteur PHP? Et finalement, il connaissait le bon chemin vers l'interpréteur PHP? Avez-vous besoin de changer les permissions des fichiers à la fin? – MrWhite

+0

Oui, vous avez raison sur le chemin et oui, j'essayais de courir sans appeler d'interprète. C'était le problème principal. Oui, j'ai changé le droit d'accès au 777 pour le faire fonctionner. J'espère que cela vous aidera un jour. – Devner

7

Je pense qu'ils ont des fichiers de configuration différents pour mod_php et php en ligne de commande. Une autre chose à vérifier - essayez d'ajouter la chaîne d'interprète en haut de fichier php:

par exemple:

#!/usr/local/sbin/php 
+4

+1 Je pense que le '#!/Usr/local/sbin/php' manquant est le problème. Notez que vous pouvez également résoudre ce problème en faisant en sorte que votre commande cron appelle php avec le fichier en argument. Enfin, sachez que le binaire php peut vivre à un emplacement différent, comme '/ usr/bin/php'. – grossvogel

+1

Merci pour votre réponse. Voici ce que j'ai obtenu quand j'ai ajouté la ligne que vous avez donnée: 'sh: mydomain.com/cron.php: /usr/local/sbin/ php^M: mauvais interprète: aucun fichier ou répertoire'. Que pouvons-nous faire pour le réparer? – Devner

+0

Premièrement:^M ressemble à un mauvais caractère de fin de ligne (win \ r \ n au lieu de unix \ n). Définissez votre éditeur de texte pour utiliser les fins de ligne unix ou utilisez la commande 'dos2unix'. Si cela ne le résout pas, il se peut que votre binaire PHP reste ailleurs sur le serveur. Si vous avez un accès shell, utilisez 'which php' pour le trouver. – grossvogel

1

Essayez curl http://youdomain.com/path/script.php.

Bien qu'il ne soit généralement pas recommandé, il peut être plus facile de générer une requête http en utilisant cURL ou Wget. De cette façon, vous évitez de pêcher pour PHP binaire CLI et inclure le chemin.

0

Vous devez utiliser des chemins absolus dans votre script si vous utilisez CRON (ou au moins le chemin relatif correct *). Le CWD est différent lorsque votre script est exécuté à partir de la ligne de commande (c'est-à-dire CRON). Bien que si vous ne fournissez aucun chemin, il devrait utiliser n'importe quel include_path.

* Vous pouvez modifier le CWD avec chdir().

Également, essayez de retirer les supports, c'est-à-dire.

require "some_file1.php"; // brackets are not reqd - it's a language construct 
+0

Je pense que vous avez toujours besoin des balises PHP ' 'Entourant votre code, si c'est ce que vous voulez dire par" _removed les balises existantes en haut et en bas_ "? – MrWhite

+0

Vous avez raison sur les tags .. Désolé, j'ai mal lu ce que vous avez dit. Je l'ai finalement résolu. Je poste la solution ci-dessous en commentaire. – Devner

0

Vous pouvez inclure les scripts à l'aide:

$path = dirname(__FILE__); 
require($path."/"."file1.php"); 
... 

Cela devrait résoudre le problème de chemin relatif.

Questions connexes