【问题标题】:Slim framework Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Cannot create LogWriterSlim 框架致命错误:未捕获的异常“InvalidArgumentException”与消息“无法创建 LogWriter”
【发布时间】:2015-12-05 00:57:45
【问题描述】:

我最近开始使用 Slim 框架。我目前正在尝试使用中间件进行身份验证。这是调用中间件的地方:

$app->post('/profile', 'authenticate', function () {
     // code here
}

这是我的中间件负责身份验证的地方:

function authenticate(\Slim\Route $route) {
    // Getting request headers
    $headers = apache_request_headers();
    $response = array();
    $app = \Slim\Slim::getInstance();

    // Verifying Authorization Header
    if (isset($headers['Authorization'])) {
        $db = new DbHandler();

        // get the api key
        $api_key = $headers['Authorization'];
        // validating api key
        if (!$db->isValidApiKey($api_key)) {
            // api key is not present in users table
            $response["error"] = true;
            $response["message"] = "Access Denied. Invalid Api key";
            echoRespnse(401, $response);
            $app->stop();
        } else {
            global $user_id;
            // get user primary key id
            $user_id = $db->getUserId($api_key);
        }
    } else {
        // api key is missing in header
        $response["error"] = true;
        $response["message"] = "Api key is misssing";
        echoRespnse(400, $response);
        $app->stop();
    }
};

我在尝试 POST 调用时收到此错误。其他不需要身份验证的调用都可以正常工作。

致命错误:未捕获异常“InvalidArgumentException”,消息“无法创建 LogWriter。资源句柄无效。在 D:\Liftmo\Liftmo.com\api\Slim\LogWriter.php:60 堆栈跟踪:#0 D:\Liftmo\Liftmo.com\api\Slim\Slim.php(191):Slim\LogWriter->__construct (false) #1 D:\Liftmo\Liftmo.com\api\Slim\Helper\Set.php(228): Slim\Slim->Slim{closure}(Object(Slim\Helper\Set)) #2 D: \Liftmo\Liftmo.com\api\Slim\Helper\Set.php(88): Slim\Helper\Set->Slim\Helper{closure}(Object(Slim\Helper\Set)) #3 D:\Liftmo\ Liftmo.com\api\Slim\Helper\Set.php(185): Slim\Helper\Set->get('logWriter') #4 D:\Liftmo\Liftmo.com\api\Slim\Slim.php(196 ): Slim\Helper\Set->offsetGet('logWriter') #5 D:\Liftmo\Liftmo.com\api\Slim\Helper\Set.php(228): Slim\Slim->Slim{closure}(Object (Slim\Helper\Set)) #6 D:\Liftmo\Liftmo.com\api\Slim\Helper\Set.php(88): Slim\Helper\Set->Slim\Helper{closure}(Object(Slim\ Helper\Set)) #7 D:\Liftmo\Liftmo.com\api\Slim\Slim.php(234): Slim\Helper\Set->get('log') #8 D:\Liftmo\Liftmo.com \api\Slim\Slim.php(402):Slim\Slim->__get('log') 在 D:\Liftmo\Liftmo.com\api\Slim\LogWriter.php 第 60 行

我已经逐行浏览了代码,似乎问题在于行

$db = new DbHandler();

但我很困惑,因为在我的代码中的其他任何地方都使用了该类而没有问题。

require_once 'include/DbHandler.php'; // DbHandler included here at the top

如果有人可以帮助我,我将不胜感激。我从HERE 获得了身份验证。从字面上看,这个问题在任何地方都找不到解决。使用带有 Cloud SQL 的 Google App Engine 进行部署。

【问题讨论】:

  • DbHandler.php 文件究竟包含在哪里?
  • index.php(帖子中文件的内容)位于项目根目录下名为 api 的文件夹中。在 api 中,有一个名为 'include' 的文件夹,其中包含 DbHandler.php
  • 请提供您创建/配置日志写入器的代码部分
  • 我不创建/配置它。这就是我感到困惑的原因。
  • 这很奇怪,因为默认情况下,Slim 会将所有错误写入php://stderr。你对你的 PHP 配置做过什么吗?

标签: php google-app-engine slim


【解决方案1】:

我在我的应用中遇到了同样的问题,我发现这两个提示很有帮助:

  1. 在应用根目录中存储的 php.ini 文件中设置 google_app_engine.disable_readonly_filesystem = 1 属性。参考-->https://gae-php-tips.appspot.com/2015/03/

  2. 使用与默认不同的方式处理日志记录,以便能够查看代码或数据库的哪个部分存在问题。我在以下网址找到了一个很好的建议:https://leolutz.com/2014/11/slim-framework-on-google-app-engine/

希望对你有帮助!

【讨论】:

    【解决方案2】:

    查看问题:

    没有使用 Google App Engine 对 php://stderr 的写入权限。

    根据https://cloud.google.com/appengine/articles/logging/var/log/app_engine/custom_logs 提供写访问权限。 (自己没试过)

    【讨论】:

      猜你喜欢
      • 2015-07-10
      • 2017-08-13
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多