0

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

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

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

这是我的错误控制器。

<?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.2PHP 5.3.13

4

3 回答 3

1

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

从 root shell 运行以下命令。请记住,如果您重新启动服务器,您将不得不再次运行它。

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将显示我作为解决方案编写的命令。

于 2012-08-17T23:38:56.613 回答
0

试试看是否:

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

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

于 2012-08-17T23:09:04.823 回答
0

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

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

来自: move_uploaded_file 在我完成所有配置后给出“无法打开流:权限被拒绝”错误

于 2017-09-12T13:42:04.847 回答