PHP-文件-文件上传及其他操作

使用PHP对文件操作的一些记录包括文件上传遇到的一些问题(坑)。

对流文件的操作(一般前端获取)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 通过 $_FILES[]函数 根据参数接收一个文件流
$fileBody = $_FILES['file'];

// 被上传文件的名称
$fileBody["name"]

// 被上传文件的类型
$fileBody["type"]

// 被上传文件的大小,以字节计
$fileBody["size"]

// 存储在服务器的文件的临时副本的名称(一般使用该参数传入到OSS)
$fileBody["tmp_name"]

// 由文件上传导致的错误代码
$fileBody["error"]
对本地文件的操作
1
2
// 本地文件路径
todo
个人环境修改记录:
  • 修改php.ini文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    >  #上传文件最大值
    > upload_max_filesize = 1024M(自定义)
    >
    > # POST提交数据的最大值
    > post_max_size = 1024M(自定义)
    >
    > # 防止网速慢时超时现象
    > max_execution_time = 600
    >
  • 修改nginx配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >  # 如果使用了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本身配置文件的问题

1
2
3
4
5
6
7
8
9
# 修改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:

    1
    2
    3
    >  # 默认单位/秒 具体自定义
    > max_execution_time = 600;
    >

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

#####更多相关操作:

w3school - PHP 文件上传

本文标题:PHP-文件-文件上传及其他操作

文章作者:郑上进

本文链接:http://blog.zjc123.cn/2019/05/21/PHP-FileFileUploadandOtherOperations/

许可协议:转载请保留原文链接及作者姓名。

-------------本文结束感谢您的阅读-------------