2010-04-27 8 views
0

Je n'ai aucune idée de ce qui se passe. Mais j'ai un script qui ressemble à ceci. emploi Cron refuse de l'exécuter:Quel est mon problème Cronjobs?

include_once 'class_lib/mime_mail/mimeDecode.php'; 
include_once 'class_lib/Mail/IMAPv2.php'; 
include_once 'inc-functions.php'; 
include_once "$_SERVER[DOCUMENT_ROOT]/class_lib/DbFuctioneer.php"; 

$dbFuctioneer = new DbFuctioneer(); 

Tout fonctionne bien quand je supprimer:

$dbFuctioneer = new DbFuctioneer(); 

Même quand DbFuctioneer() ressemble à ceci:

<?php 

class DbFuctioneer { 
    function dbCountMatches($count) { 
     return $count; 
    } 
} 

Est-ce que Cron ont un problème avec Classes dans ses emplois?

Nous vous remercions de votre temps.

Cordialement,
Marius


Il semble

$_SERVER['DOCUMENT_ROOT'] 

est vide lorsque Cron est en cours d'exécution son travail.

Pourquoi est-ce?

+1

est-ce que la ligne de commande PHP a accès à la superglobale $ _SERVER et est-elle réglée à la valeur que vous attendez? – dnagirl

+0

Se pourrait-il que votre script de démarrage (.bashrc ou autre) ne fixe pas ces valeurs? – MJB

Répondre

3

Il n'y a pas de $_SERVER["DOCUMENT_ROOT"] lorsque vous appelez le script à partir de la ligne de commande. Cette variable (avec beaucoup d'autres comme REQUEST_URI, SCRIPT_NAME, HTTP_HOST ....) est définie par Apache, qui ne fonctionne pas dans votre cas.

Vous devez définir le répertoire racine manuellement.

Pour savoir si vous exécutez dans le contexte d'un site Web ou à partir de la ligne de commande, utilisez php_sapi_name().

Vous pouvez définir $_SERVER["DOCUMENT_ROOT"] manuellement lors de l'exécution sur la ligne de commande, mais je préfèrerais utiliser une constante ou une variable complètement nouvelle pour y insérer le chemin.

+0

Plus précisément, il n'y a pas DOCUMENT_ROOT en ligne de commande. –

+0

Légende! Merci! M – Marius

+0

@ Álvaro vous avez raison, j'ai édité pour rendre le libellé plus clair. @Marius vous êtes les bienvenus. –

1

Effectuez les opérations suivantes (exécutez votre script à partir de la ligne de commande) et vérifier la sortie est correcte:

print("$_SERVER[DOCUMENT_ROOT]/class_lib/DbFuctioneer.php"); 

Très probablement son cassé.

Questions connexes