基于CakePHP的应用程序在需要Cache-Class时抛出500服务器错误

时间:2011-02-16 14:25:44

标签: php cakephp newsletter

我正在尝试运行基于CakePHP的应用程序。 就是这样:Newsletter Mailer v1.1

我正试着让它在这里运行:mailer.dasministerium.com

但正如您所看到的,我收到的是500内部服务器错误。

我将此错误追溯到档案:cake/libs/cache.php第203行

$core = App::core();
$path = $core['libs'][0] . 'cache' . DS . strtolower($name) . '.php';
if (file_exists($path)) {
    require $path;
    return true;
}

第203行是:require $path;

为了追踪这一点我死了()d为这一行,并得到了我的die()消息 在此行之后Die()导致500错误,但在所需文件(cake/libs/cache/file.php)中的die()也给了我500。 所以整件事情真的让人感到震惊。

我正在运行Ubuntu 8.04 LTS 64Bit,PHP 5.2.4(作为apache模块,不是fast-cgi)

任何想法如何让这个运行?

提前致谢! 大卫


编辑:

将所有错误打印到错误文件后,我发现了这个:
PHP Fatal error: Class 'CakeLog' not found in /var/www/vhosts/dasministerium.com/subdomains/mailer/httpdocs/cake/libs/cache/file.php on line 83

不幸的是,这个文件中没有CakeLog的引用......所以:wtf?!


编辑2:

var_dump(class_exists('CakeLog')); // this before the crashing 
                                   // require() returns true!

编辑决赛!

它的CakePHP< - > eAccelerator问题....已解决

3 个答案:

答案 0 :(得分:2)

解决:这是eAccelerator的错。用一点点黑客修复它......

解决方案:

打开/cake/libs/cake-log.php滚动到最底部,然后替换

if (!defined('DISABLE_DEFAULT_ERROR_HANDLING')) {
    set_error_handler(array('CakeLog', 'handleError'));
}

使用:

if (!defined('DISABLE_DEFAULT_ERROR_HANDLING')) {
    $cakeLog =& CakeLog::getInstance();
    set_error_handler(array(&$cakeLog, 'handleError'));
}

就是这样:))

答案 1 :(得分:0)

该解决方案适用于Cake1.3(可能更新)。

1.2怎么样?

没有线:

if (!defined('DISABLE_DEFAULT_ERROR_HANDLING')) {
    set_error_handler(array('CakeLog', 'handleError'));
}

在cake_log.php文件中。

答案 2 :(得分:0)

我注意到,当控制器没有“视图”时,cakephp 2.x可能会返回http状态500。它似乎是“随机出现”,因为一些没有视图的控制器返回http状态200。

无论如何,要解决此http状态500问题,请确保所有控制器都有与之关联的视图(如果没有与控制器关联的视图,您将在页面底部看到错误。)