当我们的网站遇到内部服务器错误时,我正在尝试收集信息。我们有许多应用程序从未设置过正确的错误日志记录,当出现问题时,我们的客户不会向我们提供最好的信息来处理。我想做的是,当 500 发生时,我想收集有关问题发生位置的数据,例如:
- 用户所在的页面
- 与页面关联的任何数据($_GET、$_POST 等)
我已经使用以下配置在我们的服务器(IIS 7)上设置了自定义错误页面:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="500" />
<error statusCode="500" path="/error.php?code=500" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
</configuration>
在那个页面上,我只是 var_dump-ing $_POST 和 $_GET 以查看其中是否有任何内容进入错误页面,但它没有。我对 500 错误的目标是:
- 在出错时收集有关页面/用户的数据
- 向支持团队发送有关包含所收集数据的问题的电子邮件
有什么方法可以收集这些数据并让自定义错误页面看到它?
错误.php:
switch($ErrorCode){
case '500':
var_dump($_REQUEST, $_POST, $_GET);
echo "internal server error";
break;
}
在所有情况下 $_POST 都是空的,即使我提交了一个表单来得到这个错误并且 $_GET 包含这个(这是有道理的):
array(2) {
["code"]=>
string(3) "500"
["500;http://icom-sbs/test_php"]=>
string(0) ""
}
4/19 更新
我尝试了一些想法,主要是将有用的数据存储在会话变量中。我试图将一些表单数据存储在给出错误的测试页面上的会话变量中,但它从未进入会话。似乎服务器检测到页面上将发生错误,因此它甚至从未执行页面上的任何代码并立即执行错误页面。