撸码网
2024-04-08 13:02:50
0次
最近看到很多网友遇到这样一个问题:在PHP上传文件时,后台无法收到数据,导致上传失败。为了解决这一问题,我们需要先了解一下PHP上传的基本流程。
PHP上传文件的基本流程如下:
1). 客户端通过
2). 客户端通过HTTP协议将上传的数据发给服务器。
3). 服务器收到数据后进行处理,将文件存储到指定目录中,同时在后台对文件进行处理。
这里需要注意的是,在实际开发过程中,很多上传文件的功能都是通过开源框架来实现的。比如,Yii2框架中实现文件上传的组件“yii\web\UploadedFile”。
从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
#可以上传的文件最大限制(单位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的配置,可以找到上传问题的根源,并进行针对性的解决。
上一篇:PHPUnit测试私有属性和方法功能示例
下一篇:PHP上传 找不到临时文件夹的解决方法