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
中可用。 (自己没试过)
我在我的应用程序中遇到了同样的问题,我发现这两个提示很有帮助:
设置 google_app_engine.disable_readonly_filesystem = 1 属性 in php.ini 文件存储在您的应用程序的根目录中。参考--> https://gae-php-tips.appspot.com/2015/03/
使用与默认方式不同的方式来处理日志记录,以便能够查看您的代码或数据库的哪一部分有问题。我在以下位置找到了一个很好的建议:https://leolutz.com/2014/11/slim-framework-on-google-app-engine/
希望对您有所帮助!
我最近开始使用 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
中可用。 (自己没试过)
我在我的应用程序中遇到了同样的问题,我发现这两个提示很有帮助:
设置 google_app_engine.disable_readonly_filesystem = 1 属性 in php.ini 文件存储在您的应用程序的根目录中。参考--> https://gae-php-tips.appspot.com/2015/03/
使用与默认方式不同的方式来处理日志记录,以便能够查看您的代码或数据库的哪一部分有问题。我在以下位置找到了一个很好的建议:https://leolutz.com/2014/11/slim-framework-on-google-app-engine/
希望对您有所帮助!