前几天,在后台通过百度编辑器提交长篇文章的时候,在php的后端接收不到数据(本地环境是iis+php8),后端是通过thinkphp框架写的,一开始以为是代码问题,后面发现,通过$_POST也无法打印前端发送到后端的数据,解决这个问题,有一个常见的方式,就是设置所在版本php目录下的php.ini的一些参数改成比较大的值,如(以下参数仅为示例,正式上线运营不建议设置这么大):
post_max_size = 2048M upload_max_filesize = 2048M max_input_vars = 10000
然后在网站的访问目录的 web.config 文件中添加或更新以下配置:
<configuration> <system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="16777216" /> </requestFiltering> </security> </system.webServer> </configuration>
如果通过以上的方式解决了问题,就不用继续往下看了,我是修改了这些,问题还是存在,然后我通过查看日志
(windows的php日志一般在 C:\Windows\Temp 这个目录里面 有一个php+版本号的log文件)。
[18-Jul-2024 16:35:41 Asia/Brunei] PHP Notice: Unknown: file created in the system's temporary directory in Unknown on line 0 [18-Jul-2024 16:35:41 Asia/Brunei] PHP Warning: Unknown: Unable to create temporary file, Check permissions in temporary files directory. in Unknown on line 0 [18-Jul-2024 16:35:41 Asia/Brunei] PHP Warning: Unknown: POST data can't be buffered; all data discarded in Unknown on line 0
大概意思是临时文件创建失败,无法缓存通过POST方式提交的数据,这个问题一般会有两种情况:
一、磁盘不足,所以写入不了缓存文件(首先排除这个情况,因为本地环境的磁盘还有很多空余空间)
二、因为文件夹的权限问题,所以导致写不了缓存(这个可能性大一点)
那么解决思路就清晰了,在php.ini给缓存文件指向一个有权限的目录,如:
upload_tmp_dir = "C:\Program Files\PHP\v8.1.13\Temp\"
然后重启本地电脑/服务器,然后POST提交内容空白问题已解决。
但是又出现了一个新的问题,就是提交长篇文章的时候,内容会被截断,根据过往经验判断,有可能是数据库(数据库环境是mysql)的字段类型有问题,然后打开储存文章的那个表的字段,发现字段类型为text,这个类型的最大储存长度为65535个字符,长篇文章明显已经超出了这个承载长度,已经满足不了当下需求,所以会被截断,知道了问题在哪,解决起来就简单了,把储存文章的数据库字段类型改为可以承载更多字节的MEDIUMTEXT(最大长度为 16777215 个字符)就可以了。

重新提交长篇文章,发现已经没有被截断,自此,问题解决。

评论0