Slim framework Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Cannot create LogWriter

Slim framework Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Cannot create LogWriter

我最近开始使用 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 时收到此错误。其他不需要身份验证的调用都可以正常工作。

Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Cannot create LogWriter. Invalid resource handle.' in D:\Liftmo\Liftmo.com\api\Slim\LogWriter.php:60 Stack trace: #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') in D:\Liftmo\Liftmo.com\api\Slim\LogWriter.php on line 60

我已经 运行 逐行检查代码,问题似乎出在行

$db = new DbHandler();

虽然我很困惑,因为 class 在我的代码中的其他任何地方都没有问题地使用过。

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

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

查看问题评论:

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

根据 https://cloud.google.com/appengine/articles/logging,写入权限在 /var/log/app_engine/custom_logs 中可用。 (自己没试过)

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

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

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

希望对您有所帮助!