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

时间:2012-08-17 22:21:34

标签: php error-handling kohana fatal-error

我收到错误“在Kohana :: $ log

上的非对象上调用成员函数add()

没有登录application/logs目录。我描述的错误可以在 apache error_log找到。这是它出现的方式

  

[Fri Aug 17 17:07:09 2012] [错误] [客户端MY.IPA.DDR.ESS] PHP致命错误:在/ var / www /中的非对象上调用成员函数add()第8行的html / application / classes / kohana / exception.php

这是我的错误控制器。

<?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上使用 Kohana-3.2 PHP 5.3.13

3 个答案:

答案 0 :(得分:1)

我已经解决了这个问题。如果任何其他kohana开发人员出现此问题,他来自谷歌这里是解决方案。

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

setsebool -P httpd_unified 1

其他信息:如何追踪它。

检查这些位置

  1. Apache错误日志
  2. Kohana在应用程序目录中记录日志(如果您进行调试)
  3. 检查/var/log/messages
  4. 如果发生SElinux问题,您将在/var/log/messages上找到日志条目。这就是我得到的。

      

    setroubleshoot: SELinux阻止/ usr / sbin / httpd对目录/ var / www / html / 应用程序/缓存进行写入访问。完整的SELinux消息。运行sealert -l 087dfdb5-c7de-4238-8e6b-a713213a456d

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

答案 1 :(得分:0)

尝试查看:

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

的工作原理。当前的Kohana文档似乎表明使用$ log仍然可以工作,但在异常处理之前它可能会被取消。但是,应该可以随时从Log类中检索实例。

答案 2 :(得分:0)

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

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

自: move_uploaded_file gives "failed to open stream: Permission denied " error after all configurations i did