2019-12-10 |

PHP 文件上传处理

PHP 提供了内置变量 $_FILES 来处理上传的文件。

$_FILES 变量说明(设定表单 name 属性为 file ):
$_FILES 变量 说明
$_FILES["file"]["name"] 客户端提交文件的原名称
$_FILES["file"]["type"] 浏览器提供的文件的 MIME 类型,如 gif 图片为 image/gif 。不过此类型在 PHP 端并不检查,因此不要想当然认为有这个值
$_FILES["file"]["size"] 已上传文件的大小,单位为字节
$_FILES["file"]["tmp_name"] 文件被上传后在服务端储存的临时文件名
$_FILES["file"]["error"] 和该文件上传相关的错误代码,为0则表示上传成功

当点击“确定”按钮提交表单至 upload.php 后,可以利用 $_FILES 变量来处理提交的文件。

文件处理例子:

<?php
//文件存储路径
$file_path="upload/";
//664权限为文件属主和属组用户可读和写,其他用户只读。
if(is_dir($file_path)!=TRUE) mkdir($file_path,0664) ;
//定义允许上传的文件扩展名
$ext_arr = array("gif", "jpg", "jpeg", "png", "bmp", "txt", "zip", "rar");

if (empty($_FILES) === false) {
    //判断检查
    if($photo_up_size > 2097152){
        exit("对不起,您上传的照片超过了2M。");
    }
    if($_FILES["file"]["error"] > 0){
        exit("文件上传发生错误:".$_FILES["file"]["error"]);
    }

    //获得文件扩展名
    $temp_arr = explode(".", $_FILES["file"]["name"]);
    $file_ext = array_pop($temp_arr);
    $file_ext = trim($file_ext);
    $file_ext = strtolower($file_ext);
    //检查扩展名
    if (in_array($file_ext, $ext_arr) === false) {
        exit("上传文件扩展名是不允许的扩展名。");
    }
    //以时间戳重命名文件
    $new_name = time().".".$file_ext;
    //将文件移动到存储目录下
    move_uploaded_file($_FILES["file"]["tmp_name"],"$file_path" . $new_name);
    //向数据表写入文件存储信息以便管理
    //*********** 代码略 ***********//
    echo "文件上传成功!";
    exit;
} else {
    echo "无正确的文件上传";
}
?>

例子说明:

  1. 该例子只是简单演示了文件上传的流程,请勿直接用于实际项目
  2. 该例子中缺少对用户权限的检查
  3. 如果上传后的文件没有做重命名,则需要做文件重名时的逻辑处理
  4. 写入数据表文件信息由于涉及到数据库操作,暂略。写入数据表的信息应该包括文件上传的时间,上传的用户ID以及存储的位置,以便清理上传无效的文件以及文件过期管理等
  5. 无提交校验,要防止远程提交,可以在表单生成页面产生一个会话ID,然后在upload.php页面做校验以防止远程提交

0

流程控制

发表评论

    评价:
    验证码: 点击我更换图片
    最新评论