IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP 文件上传及格式验证 -> 正文阅读

[PHP知识库]PHP 文件上传及格式验证

请根据自己需要进行调整🤪

文件格式验证

/**
 * 验证文件格式
 * @param source  $filesTag     上传文件标识
 * @param array   $suffix_array 验证格式
 * @param int     $max_size     最大大小(默认10兆)
 * @param int     $min_size     最小大小(默认1K)
 * @return mixed  返回值         原文件名
 */
function check_upload_file($filesTag = 'file', $suffix_array = array('jpg', 'jpeg', 'png'), $max_size = 10, $min_size = 0.001){
    
    $max_size = 1024 * 1024 * $max_size;
    $min_size = 1024 * 1024 * $min_size;
    
    $file_name = $_FILES[$filesTag]['name']; // 原文件名
    $file_size = $_FILES[$filesTag]['size']; // 文件大小
    $tmp_name = $_FILES[$filesTag]['tmp_name']; // 服务器上临时文件名
    
    // 检查是否是通过 HTTP POST 上传
    if (@is_uploaded_file($tmp_name) === false) setBreakDesc(5000, array(), '上传文件来源错误');
    
    // 检查文件名
    if (!$file_name) setBreakDesc(5000, array(), '请上传文件');
    
    // 检查扩展名
    $suffix = getFileSuffix($file_name); // 获得文件扩展名
    if (in_array($suffix, $suffix_array) === false) setBreakDesc(5000, array(), '请上传正确格式的文件');
    
    // 检查文件最大大小
    if ((string)$file_size > (string)$max_size) setBreakDesc(5000, array(), '上传文件大小超过限制');
    
    // 检查文件最小大小
    if ((string)$file_size < (string)$min_size) setBreakDesc(5000, array(), '上传文件太小');
    
    // 原文件名
    $response['file_name'] = $file_name;
    return $response;
}

文件上传

/**
 * 文件上传
 * @param string $upload_path 上传路径, 以 / 结尾
 * @param string $filesTag 上传文件标识
 * @return string 新文件名
 * @throws Exception
 */
function upload_file($upload_path = "", $filesTag = 'file'){
    if (empty($upload_path)) setBreakDesc(5000, array(), '请确认上传路径');
    
    $file_name = $_FILES[$filesTag]['name']; // 原文件名
    $suffix = getFileSuffix($file_name); // 文件扩展名
    $tmp_name = $_FILES[$filesTag]['tmp_name']; // 服务器上临时文件名
    
    // 目录不存在则创建
    if (!file_exists($upload_path)) mkdir($upload_path, 0755, true);
    
    // 检查目录写权限
    if (@is_writable($upload_path) === false) setBreakDesc(5000, array(), '上传目录没有权限');
    
    // 新文件名
    $upload_file_name = date("His") . '_'.md5(uniqid()).'_' . rand(10000, 99999) . ".{$suffix}";
    
    // 上传路径+上传的文件名
    $file_path = $upload_path . "{$upload_file_name}";
    
    // 上传文件
    if (move_uploaded_file($tmp_name, $file_path) === false) setBreakDesc(5000, array(), '上传文件失败');
    
    chmod($file_path, 0644);
    
    clearstatcache();
    
    return $upload_file_name;
    
}


公共状态码

return array(
    'response_code' => array(
        1000=>'执行成功',
        5000=>'执行失败',
    )
);

公共方法

/**
 * PHP 获取文件后缀
 * @param string $str 文件名
 * @return string 后缀
 */
function getFileSuffix($str){
    $suffix = explode(".",$str);
    return strtolower(end($suffix));
}

/**
 * 设置中断提示信息
 * @param int   $code  状态码
 * @param array $data  数据
 * @param string $msg  自定义提示语
 * @return void
 */
function setBreakDesc($code = 5000, $data = array(), $msg = '')
{
    $status['code'] = $code; // 状态码
    $status['msg'] = empty($msg) ? C('response_code')[$code] : $msg; // 提示语
    if (!empty($data)) $status['result'] = $data;  // 数据
    
    header('Content-Type:application/json; charset=utf-8');
    exit(json_encode($status,JSON_UNESCAPED_UNICODE));
}

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 12:49:24  更:2022-01-16 12:50:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 14:29:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码