此前我一直以为是postMan出问题,只有状态码500,并没有任何错误输出。
用浏览器一样捕获不到错误信息。
今天用Python测试了一下,发现仍然没有,所以基本可以确定是TP根本就没有发送任何错误信息,只有一个500的状态头信息。
原因
经过查询,了解到原因是:如果你的计算机名为中文,或者某些文件夹名包含中文,那就会因为字符编码,而造成json_encode()报错。
这一段代码位于:tp6\vendor\topthink\framework\src\think\exception\Handle.php其中的Server/Request Data
解决方法
在这个文件最末尾,新增一个方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/** * 将获取的服务器信息中的中文编码转为utf-8 * 修复在开启debug模式时出现的Malformed UTF-8 characters 错误 * @access protected * @param $data array * @return array 转化后的数组 */ protected function changeToUtf8(array $data): array { foreach ($data as $key => $value) { $data[$key] = mb_convert_encoding($value, "UTF-8", "GBK, GBK2312"); } return $data; } |
返回Server/Request Data,并修改为:
1 2 |
// 'Server/Request Data' => $this->app->request->server(), 'Server/Request Data' => $this->changeToUtf8($this->app->request->server()), |
再次访问,就能看到报错信息了。
本文来自weixin_47965781 ,本文观点不代表蓝洛水深立场,转载请联系原作者。