[https://github.com/top-think/framework/pull/2448/commits/9fc59bf088f269a3b12d455da0e6beee389bd9d3](https://github.com/top-think/framework/pull/2448/commits/9fc59bf088f269a3b12d455da0e6beee389bd9d3)
[https://blog.csdn.net/fhl760925513/article/details/114477450](https://blog.csdn.net/fhl760925513/article/details/114477450)
在使用thinkphp6的过程中,尤其是windows本地开发,要是碰到代码运行错误但是死活不报错的情况,可参考以下步骤:
常规步骤:
```
1. 环境变量配置文件.env中APP_DEBUG设置为true。
```
APP\_DEBUG=true
2\. 将config目录下的app.php文件中的show\_error\_msg设置为true。
// 显示错误信息
'show\_error\_msg' => true,
如果上面操作无用,查看服务器(我用的是nginx)的错误日志,发现报错:“PHP Fatal error: Uncaught InvalidArgumentException: Malformed UTF-8 characters, possibly incorrectly encoded in D:\\phpStudy\\PHPTutorial\\WWW\\tp6\\vendor\\topthink\\framework\\src\\think\\response\\Json.php:50……”。看这个错误意思,再结合源码,这是json\_encode()的时候报错了,字符编码的问题。接下来,非常规步骤,改源码!
非常规步骤:
```
根据路径找到文件:“tp6\vendor\topthink\framework\src\think\exception\Handle.php”。
查看源码,找到“Server/Request Data”,发现tp6获取的服务器信息内容非常的详细,如果你的计算机名为中文,或者某些文件夹名包含中文,那就会因为字符编码,而造成json_encode()报错。既然找到原因了,那就解决问题,转下获取内容的编码即可!
在Handle.php的底部加上字符编码转换函数:
/**
* 将获取的服务器信息中的中文编码转为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' => $this->app->request->server(),
'Server/Request Data' => $this->changeToUtf8($this->app->request->server()),
这个时候再次发起请求,就可以看到详细的错误信息了!
这个问题曾经困扰了我很久才解决,如果您也碰到了这个问题,且这篇文章帮助到了您,欢迎点赞!
此问题已在tp6的git上pull requests,详情:[https://github.com/top-think/framework/pull/2448。](https://github.com/top-think/framework/pull/2448%E3%80%82)
- 基础
- 文档帮助
- 计算机基础知识
- Centos文件系统
- Linux基础知识入门
- Linux命令帮助文档
- 常见命令
- 其他
- vim编辑器
- 编辑命令
- 末行模式
- 常见命令
- 配置文件
- 用户useradd
- 用户login.defs
- 环境变量设置
- 常用命令
- 帮助命令
- 管道符
- 关机和重启
- 目录操作
- 目录结构
- ls
- cd
- pwd
- mkdir
- rmdir
- cp
- rm
- mv
- 文件操作
- touch
- ln 重点
- stat 重点
- file
- cat
- tac
- nl
- more
- less
- head
- tail
- 文件处理工具
- wc
- cut
- sort
- uniq
- 文件属性(权限)
- chmod
- chown
- chgrp
- umask
- sudo权限
- chattr权限
- chattr
- lsattr
- 文件特殊权限
- SetUID
- SetGID
- StickyBIT粘着位
- ACL权限
- 搜索命令
- 命令搜索whereis
- grep
- 拓展
- 元字符
- egrep
- locate
- find
- type
- 压缩和解压
- zip和unzip
- gzip和gunzip
- bzip2和bunzip2
- tar
- 网络管理
- netstat网络状态
- 消息邮件
- 软件包安装
- 源码包
- 二进制包
- rpm手工安装
- yum在线安装
- 系统管理
- 常用命令
- shell内建命令
- pstree
- bash 特性
- history 历史命令
- 补全、快捷键
- 命令行展开
- 命令执行结果
- alias命令别名
- 通配符
- 重定向及管道
- 计算机运算
- bash 中的变量的种类
- bash 的配置文件
- bash中的算术运算
- bash条件测试
- 用户和组管理
- 用户管理
- useradd
- usermod
- userdel
- passwd
- pwck
- chage
- chsh
- chfn
- id
- finger
- su
- 用户组管理
- groupadd
- groupmod
- groupdel
- gpasswd
- groups
- 用户查看
- whoami
- w
- who
- last
- lastlog
- lastb
- 网络管理
- 相关命令
- 防火墙
- 文件拷贝
- 软件工具
- 软件包管理
- Gcc软件安装
- 其他
- redis
- 相关资料
- swoole
- IDE工具
- vscode + Xdebug 断点调试
- vscode 远程链接
- git
- 不想输入账户密码
- window电脑问题
- 浏览器https访问不了
- php
- 常用函数
- rabbitMQ
- mysql
- 触发器
- 常用更新语句
- 忘记密码处理方法
- 查询
- 数据迁移
- 加索引不加锁
- 查询优化
- 基础知识
- 进程线程协程
- tp6
- 注册自定义命令空间
- Ajax异常错误
- nginx
- 域名变成ip问题
- 概念知识点
- QPS,TPS,RT概念
- Nginx服务大量TIME-WAIT
