对流文件的操作(一般前端获取)
// 通过 $_FILES[]函数 根据参数接收一个文件流
$fileBody = $_FILES['file'];
// 被上传文件的名称
$fileBody["name"]
// 被上传文件的类型
$fileBody["type"]
// 被上传文件的大小,以字节计
$fileBody["size"]
// 存储在服务器的文件的临时副本的名称(一般使用该参数传入到OSS)
$fileBody["tmp_name"]
// 由文件上传导致的错误代码
$fileBody["error"]
对本地文件的操作
// 本地文件路径
todo
个人环境修改记录:
- 修改php.ini文件
(一般位于
/etc/php/7.2/fpm/php.ini
)#上传文件最大值 upload_max_filesize = 1024M(自定义) # POST提交数据的最大值 post_max_size = 1024M(自定义) # 防止网速慢时超时现象 max_execution_time = 600
- 修改www.conf文件
(一般位于:
/etc/php/7.2/fpm/pool.d/www.conf
)request_terminate_timeout = 600
- 修改nginx配置文件
# 如果使用了proxy_pass代理: proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; # fastcgi fastcgi_connect_timeout 75; fastcgi_read_timeout 600; fastcgi_send_timeout 600; # 允许读取最大文件(这里加在Server作用域下) client_max_body_size 2048m;
注意事项:
当文件过大的时候会引起PHP服务的错误这是因为PHP本身配置文件的问题
# 修改php/php.ini 文件中:
#上传文件最大值
upload_max_filesize = 1024M(自定义)
# POST提交数据的最大值
post_max_size = 1024M(自定义)
# 防止网速慢时超时现象,需要适当调大(默认单位是秒)【一般不要随意修改配置,也可以通过代码的形式实现,具体见搜索引擎】
max_execution_time = 60(自定义)
Nginx或者Apache等服务的话也可能会出现 413 Request Entity Too Large错误:
这是由于上传文件的大小超过了配置默认值
解决办法见本博客《413 Request Entity Too Large错误解决方案》
504 Gateway Time-out错误的解决方法:
解决办法见本博客《Nginx - 上传文件报504 Gateway Time-out错误解决办法》
502问题:
- php.ini:
# 默认单位/秒 具体自定义 max_execution_time = 600;
- fpm/pool.d下的www.conf(默认是这个,具体版本下的自行斟酌,这里以7.2版本为例)
# dd request_terminate_timeout = 600
web请求php执行时间受到2方面控制,一个是php.ini的max_execution_time(要注意的是sleep,http请求等待响应的时间是不算的,这里算的是真正的执行时间),另一个是php-fpm request_terminate_timeout 设置,这个算的是请求开始n秒。
更多相关操作:
Q.E.D.