前言:安全问题
直接将文件上传到服务器是非常危险的行为,攻击者可以将病毒程序伪装成符合上传标准的文件,从而攻击服务器。服务器安全并不是本文提及的重点,但是该检查工具类所使用的原生函数都有对应的伪装破解方法,使用该工具类,并不能完全保证图片上传的安全,希望使用者务必记得这一点。
因此,此处推荐两种较为安全的方式。
前端通过API接口,直接将文件发至第三方云对象储存(例如腾讯云、阿里云、七牛等)
后端接受文件后执行基本检查,调用API或者使用SDK把文件发至第三方云对象储存。
注:该文章与程序不定时更新
调用基本说明
文件说明
— submit.html
示例前端文件,用于提交图片
— handle.php
示例后端文件,用于处理图片
— Image.php
实现图片检查与图片保存的工具类
— http.php
一个用于http报错的函数文件
使用说明
1.预定义常量:
需要用户预先定义以下常量:
FILE_PATH
上传到服务器的文件路径
UPLOAD_FILE_MAX_B
最大的图片大小
ALLOW_FILE_TYPES
允许的文件类型转化数组
示例如下:
//上传到服务器的文件路径
define('FILE_PATH', 'upload/');
//最大的图片大小
define('UPLOAD_FILE_MAX_B', 2 * 1024 * 1024);
//允许图片类型
define('ALLOW_FILE_TYPES', 'return array(
"image/png" => ".png",
"image/x-png" => ".png",
"image/jpeg" => ".jpg",
"image/pjpeg" => ".jpg"
);'
);
2.引入:
接着在处理图片的后端文件中需要引入该工具类与报错函数文件
require "./Image.php";
require "./http.php";
3.创建实例:
在try-catch
块中创建该工具类的实例,并执行函数。执行函数需要用到的参数如下:
$inputName
html文件里 上传文件的input框name属性值
$dir
上传的文件路径,根据具体情况进行调整,可以直接取FILE_PATH
示例代码如下:
try {
//html文件里 上传文件的input框name属性值
$inputName = 'file';
// 上传的文件路径 按日期分文件夹,方便日后的文件转移
$dir = FILE_PATH .