Kohana 错误 “调用非对象上的成员函数 add()”在 Kohana::$log


Kohana error "Call to a member function add() on a non-object" on Kohana::$log

我在Kohana上收到错误"在非对象上调用成员函数add()":$log

目录中

没有登录application/logs。我描述的错误是在 apache error_log 上找到的。这就是它的外观

[2012 年 8 月 17 日星期五 17:07:09] [错误] [客户端 MY.国际音标。复员方案。ESS] PHP 致命错误:在第 8 行的/var/www/html/application/classes/kohana/exception.php 中的非对象上调用成员函数 add()

这是我的错误控制器。

<?php
class Kohana_Exception extends Kohana_Kohana_Exception {
    public static function handler(Exception $e) {
        if (Kohana::DEVELOPMENT === Kohana::$environment) {
            parent::handler($e);
        } else {
            try {
                Kohana::$log->add(Log::ERROR, "own exception handler");
                Kohana::$log->add(Log::ERROR, parent::text($e));
                $attributes = array('action' => 500, 'message' => rawurlencode($e->getMessage()));
                if ($e instanceof HTTP_Exception) {
                    $attributes['action'] = $e->getCode();
                }
                // Error sub-request.
                echo Request::factory(Route::get('error')->uri($attributes))->execute()->send_headers()->body();
            }
            catch(Exception $e) {
                // Clean the output buffer if one exists
                ob_get_level() and ob_clean();
                // Display the exception text
                echo parent::text($e);
                // Exit with an error status
                exit(1);
            }
        }
    }
}

从代码来看Kohana::$log似乎尚未初始化。但是这段代码已经工作了很长时间。现在是什么让它不起作用?

我在 Fedora 15 上使用带有 PHP 5.3.13Kohana-3.2

我已经解决了这个问题。如果这个问题发生在任何其他kohana开发人员身上,并且他从谷歌来到这里,这就是解决方案。

从根外壳运行以下命令。请记住,如果您重新启动服务器,则必须再次运行它。

setsebool -P httpd_unified 1

附加信息:如何追踪它。

检查这些位置

  1. 阿帕奇错误日志
  2. Kohana 在应用程序目录上记录(如果您记录用于调试)
  3. 检查/var/log/messages

如果是 SElinux 问题,您会在 /var/log/messages 上找到日志条目。这就是我得到的。

setroubleshoot:SELinux 阻止/usr/sbin/httpd 对目录/var/www/html/application/cache 进行写入访问。对于完整的 SELinux 消息。运行 SEALERT -L 087DFDB5-C7DE-4238-8E6B-A713213A456D

如前所述,运行sealert -l 087dfdb5-c7de-4238-8e6b-a713213a456d将显示我编写的命令作为解决方案。

尝试查看是否:

Log::instance()->add(Log::ERROR, "own exception handler");

工程。当前的 Kohana 文档似乎表明使用 $log 应该仍然有效,但它可能会在异常处理之前的某个地方取消设置。但是,从 Log 类检索实例应该随时可用。

您可能遇到权限问题。就我而言,是httpd服务(apache2)无法访问项目文件。这是一个残酷的解决方案(仅在您的安全情况允许的情况下才这样做):

$ sudo chmod -R 0777/var/www/html/mysite/

从:move_uploaded_file在我所做的所有配置后给出"无法打开流:权限被拒绝"错误