php上传后台无法收到数据解决方法

问题背景

最近看到很多网友遇到这样一个问题:在PHP上传文件时,后台无法收到数据,导致上传失败。为了解决这一问题,我们需要先了解一下PHP上传的基本流程。

1.上传流程

PHP上传文件的基本流程如下:

1). 客户端通过

表单中设置enctype="multipart/form-data"实现文件上传。

2). 客户端通过HTTP协议将上传的数据发给服务器。

3). 服务器收到数据后进行处理,将文件存储到指定目录中,同时在后台对文件进行处理。

这里需要注意的是,在实际开发过程中,很多上传文件的功能都是通过开源框架来实现的。比如,Yii2框架中实现文件上传的组件“yii\web\UploadedFile”。

2.问题原因

从PHP上传的基本流程中可以看出,如果后台收不到上传的数据,那么必定是在第二步中出现的问题。那么问题出现的原因究竟是什么呢?

造成上传失败的原因很多,比如传输数据过大、文件类型不支持等等,但是最常见的原因是php.ini中的一些设置问题。

解决方法:

经过了解,PHP ini中的一些配置会影响上传文件的大小,比如:

(1)upload_max_filesize,它决定了单个上传文件的最大大小。如果上传文件的大小超过了限定值,那么上传将会失败。

(2)post_max_size,它决定了POST数据的最大大小。如果上传数据的大小超过了限定值,那么上传也会失败。

(3)memory_limit,它决定了一个脚本在运行时最大可以占用多少内存。如果上传过程需要消耗的内存大小超出了限定值,那么上传将被中断。

修改配置文件:

要修改以上的三种php.ini的配置信息,可以在php.ini文件中修改, 或者在.htaccess中添加以下代码来修改:

#可以上传的文件最大限制(单位B),超过此大小则上传失败

php_value upload_max_filesize 20M

#post 数据最大上限(单位B),超过此大小则以post方式传输的数据丢失

php_value post_max_size 20M

#最大请求体大小,默认一般为0,即不作限制,大文件上传时候建议开启

php_value request_max_size 0

#最大内存使用(单位B),如果友情带宽推荐可以调到稍微大一点

php_value memory_max_size 128M

#php执行时间,最大允许执行时间.大文件上传推荐无限制

php_value max_execution_time 0

#php's input vars 转换为全局变量的最大深度

php_value max_input_nesting_level 64

php_value max_input_vars 5000

如果还不行,建议升级PHP,或者使用专门的插件来上传文件,比如WebUploader和Uplaoder。

总之,通过逐一排查PHP ini的配置,可以找到上传问题的根源,并进行针对性的解决。

后端开发标签