2010-04-27 88 views
0

我不知道发生了什么事。但我有一个看起来像这样的脚本。 cron作业拒绝运行:我的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(); 

工作一切良好,当我删除:

$dbFuctioneer = new DbFuctioneer(); 

即使DbFuctioneer()看起来是这样的:

<?php 

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

确实的Cron有一个问题在他的工作类?

谢谢你的时间。

亲切的问候,
马吕斯


似乎在cron是运行它的工作

$_SERVER['DOCUMENT_ROOT'] 

是空的。

这是为什么?

+1

是否有命令行PHP有权访问$ _SERVER超全局并且它是否设置为您期望的值? – dnagirl 2010-04-27 16:11:01

+0

难道你的启动脚本(.bashrc或其他)不会设置这些值吗? – MJB 2010-04-27 16:19:26

回答

3

从命令行调用脚本时不存在$_SERVER["DOCUMENT_ROOT"]

该变量(以及许多其他像REQUEST_URISCRIPT_NAME,HTTP_HOST ....)由Apache设置,它不在您的情况下运行。

您需要手动设置根目录。

要确定您是在网站的上下文中还是从命令行运行,请使用php_sapi_name()

在命令行运行时,您可以手动设置$_SERVER["DOCUMENT_ROOT"],但我宁愿使用全新的常量或变量来放置路径。

+0

更确切地说,命令行中没有DOCUMENT_ROOT。 – 2010-04-27 16:34:12

+0

传说!谢谢!M – Marius 2010-04-27 16:35:10

+0

@Álvaro你是对的,我编辑过的文字使得文字更清晰。 @Marius,不客气。 – 2010-04-27 16:36:04

1

执行以下操作(运行在命令行脚本),并检查输出是否正确:

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

最有可能的断裂。