排查和解决通过post方式提交长篇文章的时候,后端php接收数据为空和数据被截断的问题

浏览数(954)

排查和解决通过post方式提交长篇文章的时候,后端php接收数据为空和数据被截断的问题

0

前几天,在后台通过百度编辑器提交长篇文章的时候,在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 个字符)就可以了。

image.png

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

注:本文由www.lcsay.com发表,如需转载或已侵权,请联系我。

✎﹏𝓁𝒸𝓈𝒶𝓎﹍﹍·

评论0