Php上传文件方法小结

Php上传文件方法小结

 

Demo源码在最后附件

 

过程解析

 

①、Php接收从html传来的数据(post方式),上传的文件信息会保存在php的全局变量$_FILES中。

②、使用html中file标签的name属性值获取传过来的文件信息,先校验上传文件是否成功,若成功,则文件信息中的error属性为0,否则上传异常。

③、验证格式是否符合。

④、获取文件的后缀名。

⑤、使用时间戳和一个随机数生成一个在目的文件夹中不存在的文件名,并生成文件的路径。

⑥、验证上传的文件是否合法(文件是通过 HTTP POST 上传的为合法)。

⑦、将上传的临时文件移动到⑤生成的文件路径。

⑧、可以引入jquery.form.js插件用来获取表单提交后接口的返回值。

 

【附件】

upload.html

<html>
<body>
<!—上传文件的表单enctype加密类型一定要申明 -->
<form enctype="multipart/form-data" action="/upload.php" method="POST">
 <!-- MAX_FILE_SIZE 设置上传文件的最大上限(字节)1m = 1024K = 1024*1024字节 -->
    <input type="hidden" name="MAX_FILE_SIZE" value="2097152" />
 <!—file的name属性要和php中 $_FILES 接收的一样 -->
    Send this file: <input name="file" type="file" />
    <input type="submit" value="Send File" />
</form>
</body>

</html>

upload.php

<?php
// 获取要上传文件的信息
$upInfo = @$_FILES['file'];// ‘file’是html中file的name属性值
$typeList = array("image/gif","image/jpeg", "image/jpg", "image/png"); // 支持的格式(限制)
$toPath = "upload";// 目标文件夹
uploadFile($upInfo, $typeList, $toPath);
function uploadFile($file, $typeList, $toPath) {
    if ($file['error'] > 0) {// 判断文件是否上传错误
        switch ($file['eeror']) {
            case 1 : $errorMsg = "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";break;
            case 2 : $errorMsg = "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";break;
            case 3 : $errorMsg = "文件只有部分被上传";break;
            case 4 : $errorMsg = "没有文件被上传";break;
            case 5 : $errorMsg = "找不到临时文件夹";break;
            default : $errorMsg = "未知的上传错误";break;
        }
        die($errorMsg);
    }
    if (!in_array($file['type'], $typeList)) die("不支持的格式");
    $extName = pathinfo($file['name'], PATHINFO_EXTENSION);
    do {
        $name = date("YmdHis").rand(100, 999);
        $fileName = $name.".".$extName;
        $filePath = $toPath.'/'.$fileName;
    }while (file_exists($filePath));
    if (is_uploaded_file($file['tmp_name'])) {
        $result = move_uploaded_file($file['tmp_name'], $filePath) ? "文件上传成功!" : "文件移动失败!";
        echo $result;
    }
}

posted @ 2018-09-14 11:35  进击的小海绵  阅读(625)  评论(0)    收藏  举报