• Welcome to Journal web site.

我是 PHP 程序员

- 开发无止境 -

Next
Prev

第9章 文件上传【缺课】

Data: 2020-02-22 21:42:42Form: JournalClick: 2

<?php
// $_FILES: PHP超全局变量数量, 保存着上传文件的全部信息
/**
 * 1. $_FILES: 二维数组,每个元素对应一个上传的文件
 * 2. name: 原始文件名
 * 3. type: 文件类型, mime类型
 * 4. tmp_name: 临时目录
 * 5. error: 错误代码
 * 5. size: 文件大小(字节表示 byte)
 */
printf('<pre>%s</pre>', print_r($_FILES, true));
if (isset($_FILES['my_pic'])) {
    $name = $_FILES['my_pic']['name'];
    $type = $_FILES['my_pic']['type'];
    $tmp = $_FILES['my_pic']['tmp_name'];
    $err = $_FILES['my_pic']['error'];
    $size = $_FILES['my_pic']['size'];
    // 错误处理
    if ($err > 0) {
        $tips = '<span style="color:red,fontsize:larger">上传失败</span>';
        switch ($err) {
            case 1:
                $tips .= '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
                break;
            case 2:
                $tips .= '文件大小超过了上传表单中MAX_FILE_SIZE最大值';
                break;
            case 3:
                $tips .= '文件只有部分被上传';
                break;
            case 4:
                $tips .= '没有文件被上传';
                break;
            case 6:
                $tips .= '找不到临时目录';
                break;
            case 7:
                $tips .= '文件写入失败,请检查目录权限';
                break;
        }
        echo "<p>$tips</p>";
    } else {
        // 判断用户是否是通过合法的POST方式上传
        if (is_uploaded_file($tmp)) {
            // 设置允许上传类型的白名单
            $allow = ['jpg', 'png', 'jpeg', 'gif'];
            $ext = pathinfo($name)['extension'];
            // pathinfo() 函数以数组的形式返回关于文件路径的信息。
            // 返回的数组元素如下:
            // [dirname]: 目录路径
            // [basename]: 文件名
            // [extension]: 文件后缀名
            // [filename]: 不包含后缀的文件名
            if (in_array($ext, $allow)) {
                // 满足条件,将图片转存为本地
                $path = 'uploads/';
                // 自定义文件名
                $dest = $path . md5($name) . '.' . $ext;
                // 将文件从临时目录中移动到目标目录并重命名
                if (move_uploaded_file($tmp, $dest)) {
                    echo '<p style="fontsize:large">上传成功</p>';
                    echo "<img src='$dest',width='200'>";
                } else {
                    echo '<p style="fontsize:large">移动失败</p>';
                }
            } else {
                echo '<p style="color:red">文件类型错误</p>';
            }
        } else {
            echo '<p style="color:red">非法方式上传</p>';
        }
    }
}
?>
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>单文件上传</title>
</head>

<body>
    <!-- 允许单文件的表单特征:
        1、method为POST
        2、enctype为"multipart/form-data" -->
    <form action="" method="POST" enctype="multipart/form-data">
        <fieldset>
            <legend>单文件上传</legend>
            <input type="file" name="my_pic">
            <button>上传</button>
        </fieldset>
    </form>
</body>

</html>

1651218596851996.gif


多文件上传

方式1

<?php
printf('<pre>%s</pre>', print_r($_FILES, true));
if ((isset($_FILES['my_pic1'])) || (isset($_FILES['my_pic2'])) || (isset($_FILES['my_pic3']))) {
    foreach ($_FILES as $file) {
        $name = $file['name'];
        $type = $file['type'];
        $tmp = $file['tmp_name'];
        $err = $file['error'];
        $size = $file['size'];
        // 错误处理
        if ($err > 0) {
            $tips = '<span style="color:red,fontsize:larger">上传失败</span>';
            switch ($err) {
                case 1:
                    $tips .= '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
                    break;
                case 2:
                    $tips .= '文件大小超过了上传表单中MAX_FILE_SIZE最大值';
                    break;
                case 3:
                    $tips .= '文件只有部分被上传';
                    break;
                case 4:
                    $tips .= '没有文件被上传';
                    break;
                case 6:
                    $tips .= '找不到临时目录';
                    break;
                case 7:
                    $tips .= '文件写入失败,请检查目录权限';
                    break;
            }
            echo "<p>$tips</p>";
        } else {
            // 判断用户是否是通过合法的POST方式上传
            if (is_uploaded_file($tmp)) {
                // 设置允许上传类型的白名单
                $allow = ['jpg', 'png', 'jpeg', 'gif'];
                $ext = pathinfo($name)['extension'];
                // pathinfo() 函数以数组的形式返回关于文件路径的信息。
                // 返回的数组元素如下:
                // [dirname]: 目录路径
                // [basename]: 文件名
                // [extension]: 文件后缀名
                // [filename]: 不包含后缀的文件名
                if (in_array($ext, $allow)) {
                    // 满足条件,将图片转存为本地
                    $path = 'uploads/';
                    // 自定义文件名
                    $dest = $path . md5($name) . '.' . $ext;
                    // 将文件从临时目录中移动到目标目录并重命名
                    if (move_uploaded_file($tmp, $dest)) {
                        echo '<p style="fontsize:large">上传成功</p>';
                        echo "<img src='$dest',width='200'>";
                    } else {
                        echo '<p style="fontsize:large">移动失败</p>';
                    }
                } else {
                    echo '<p style="color:red">文件类型错误</p>';
                }
            } else {
                echo '<p style="color:red">非法方式上传</p>';
            }
        }
    }
}
?>
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>多文件上传1</title>
</head>

<body>
    <form action="" method="POST" enctype="multipart/form-data">
        <fieldset>
            <legend>多文件上传:逐个上传</legend>
            <input type="file" name="my_pic1">
            <input type="file" name="my_pic2">
            <input type="file" name="my_pic3">
            <button>上传</button>
        </fieldset>
    </form>
</body>

</html>


1.gif

方式2

<!DOCTYPE html>
<?php
printf('<pre>%s</pre>', print_r($_FILES, true));
if (isset($_FILES['my_pic'])) {
    for ($i = 0; $i < 3; $i++) {
        $name = $_FILES['my_pic']['name'][$i];
        $type = $_FILES['my_pic']['type'][$i];
        $tmp = $_FILES['my_pic']['tmp_name'][$i];
        $err = $_FILES['my_pic']['error'][$i];
        $size = $_FILES['my_pic']['size'][$i];
        if ($err > 0) {
            $tips = '<span style="color:red,fontsize:larger">上传失败</span>';
            switch ($err) {
                case 1:
                    $tips .= '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
                    break;
                case 2:
                    $tips .= '文件大小超过了上传表单中MAX_FILE_SIZE最大值';
                    break;
                case 3:
                    $tips .= '文件只有部分被上传';
                    break;
                case 4:
                    $tips .= '没有文件被上传';
                    break;
                case 6:
                    $tips .= '找不到临时目录';
                    break;
                case 7:
                    $tips .= '文件写入失败,请检查目录权限';
                    break;
            }
            echo "<p>$tips</p>";
        } else {
            // 判断用户是否是通过合法的POST方式上传
            if (is_uploaded_file($tmp)) {
                // 设置允许上传类型的白名单
                $allow = ['jpg', 'png', 'jpeg', 'gif'];
                $ext = pathinfo($name)['extension'];
                // pathinfo() 函数以数组的形式返回关于文件路径的信息。
                // 返回的数组元素如下:
                // [dirname]: 目录路径
                // [basename]: 文件名
                // [extension]: 文件后缀名
                // [filename]: 不包含后缀的文件名
                if (in_array($ext, $allow)) {
                    // 满足条件,将图片转存为本地
                    $path = 'uploads/';
                    // 自定义文件名
                    $dest = $path . md5($name) . '.' . $ext;
                    // 将文件从临时目录中移动到目标目录并重命名
                    if (move_uploaded_file($tmp, $dest)) {
                        echo '<p style="fontsize:large">上传成功</p>';
                        echo "<img src='$dest',width='200'>";
                    } else {
                        echo '<p style="fontsize:large">移动失败</p>';
                    }
                } else {
                    echo '<p style="color:red">文件类型错误</p>';
                }
            } else {
                echo '<p style="color:red">非法方式上传</p>';
            }
        }
    }
}
?>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>多文件上传2</title>
</head>

<body>
    <form action="" method="POST" enctype="multipart/form-data">
        <fieldset>
            <legend>多文件上传:逐个上传2</legend>
            <!-- 数组来表示每个要上传的表单域的名称  -->
            <input type="file" name="my_pic[]">
            <input type="file" name="my_pic[]">
            <input type="file" name="my_pic[]">
            <button>上传</button>
        </fieldset>
    </form>
</body>

</html>


image.png

Name:
<提交>