对流文件的操作(一般前端获取)
// 通过 $_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;
# dd
request_terminate_timeout = 600

web请求php执行时间受到2方面控制,一个是php.ini的max_execution_time(要注意的是sleep,http请求等待响应的时间是不算的,这里算的是真正的执行时间),另一个是php-fpm request_terminate_timeout 设置,这个算的是请求开始n秒。

更多相关操作:

w3school - PHP 文件上传

Q.E.D.