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));
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后端木木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值