Skip to content

上传文件模板

基本文件上传

表单示例

html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            margin: 0;
            padding: 20px;
        }
        .upload-container {
            background-color: white;
            padding: 20px;
            border-radius: 5px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
            max-width: 500px;
            margin: 0 auto;
        }
        h2 {
            text-align: center;
            margin-bottom: 20px;
        }
        .form-group {
            margin-bottom: 15px;
        }
        label {
            display: block;
            margin-bottom: 5px;
            font-weight: bold;
        }
        input[type="file"] {
            width: 100%;
            padding: 8px;
            border: 1px solid #ddd;
            border-radius: 3px;
            box-sizing: border-box;
        }
        input[type="submit"] {
            width: 100%;
            padding: 10px;
            background-color: #4CAF50;
            color: white;
            border: none;
            border-radius: 3px;
            cursor: pointer;
        }
        input[type="submit"]:hover {
            background-color: #45a049;
        }
        .error {
            color: red;
            margin-bottom: 15px;
        }
        .success {
            color: green;
            margin-bottom: 15px;
        }
        .file-list {
            margin-top: 20px;
        }
        .file-item {
            padding: 10px;
            border-bottom: 1px solid #ddd;
        }
        .file-item a {
            text-decoration: none;
            color: #333;
        }
        .file-item a:hover {
            color: #4CAF50;
        }
    </style>
</head>
<body>
    <div class="upload-container">
        <h2>文件上传</h2>
        <?php if (isset($error)) { echo '<div class="error">' . $error . '</div>'; } ?>
        <?php if (isset($success)) { echo '<div class="success">' . $success . '</div>'; } ?>
        <form method="post" action="upload.php" enctype="multipart/form-data">
            <div class="form-group">
                <label for="file">选择文件:</label>
                <input type="file" id="file" name="file" required>
            </div>
            <input type="submit" value="上传">
        </form>
        
        <div class="file-list">
            <h3>已上传文件</h3>
            <?php
            $upload_dir = 'uploads/';
            if (is_dir($upload_dir)) {
                $files = scandir($upload_dir);
                foreach ($files as $file) {
                    if ($file != '.' && $file != '..') {
                        echo '<div class="file-item"><a href="' . $upload_dir . $file . '" target="_blank">' . $file . '</a></div>';
                    }
                }
            } else {
                echo '没有上传文件';
            }
            ?>
        </div>
    </div>
</body>
</html>

上传处理

php
<?php
// 初始化变量
$error = '';
$success = '';

// 检查是否提交表单
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // 检查是否有文件上传
    if (isset($_FILES['file'])) {
        $file = $_FILES['file'];
        
        // 检查上传错误
        if ($file['error'] === UPLOAD_ERR_OK) {
            // 检查文件类型
            $allowed_types = array('image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'text/plain');
            if (!in_array($file['type'], $allowed_types)) {
                $error = '只允许上传 JPEG、PNG、GIF、PDF 和文本文件';
            } else {
                // 检查文件大小
                $max_size = 5 * 1024 * 1024; // 5MB
                if ($file['size'] > $max_size) {
                    $error = '文件大小不能超过 5MB';
                } else {
                    // 生成唯一文件名
                    $filename = uniqid() . '.' . pathinfo($file['name'], PATHINFO_EXTENSION);
                    $upload_dir = 'uploads/';
                    
                    // 创建上传目录
                    if (!is_dir($upload_dir)) {
                        mkdir($upload_dir, 0777, true);
                    }
                    
                    // 移动上传文件
                    $file_path = $upload_dir . $filename;
                    if (move_uploaded_file($file['tmp_name'], $file_path)) {
                        $success = '文件上传成功:' . $filename;
                    } else {
                        $error = '文件上传失败';
                    }
                }
            }
        } else {
            // 处理上传错误
            switch ($file['error']) {
                case UPLOAD_ERR_INI_SIZE:
                    $error = '文件大小超过了 php.ini 中的限制';
                    break;
                case UPLOAD_ERR_FORM_SIZE:
                    $error = '文件大小超过了表单中的限制';
                    break;
                case UPLOAD_ERR_PARTIAL:
                    $error = '文件只上传了一部分';
                    break;
                case UPLOAD_ERR_NO_FILE:
                    $error = '没有上传文件';
                    break;
                case UPLOAD_ERR_NO_TMP_DIR:
                    $error = '临时文件夹不存在';
                    break;
                case UPLOAD_ERR_CANT_WRITE:
                    $error = '无法写入临时文件';
                    break;
                case UPLOAD_ERR_EXTENSION:
                    $error = '文件上传被扩展阻止';
                    break;
                default:
                    $error = '未知错误';
                    break;
            }
        }
    } else {
        $error = '没有文件上传';
    }
}

// 显示上传表单
include 'upload_form.php';
?>

多文件上传

表单示例

html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>多文件上传</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            margin: 0;
            padding: 20px;
        }
        .upload-container {
            background-color: white;
            padding: 20px;
            border-radius: 5px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
            max-width: 500px;
            margin: 0 auto;
        }
        h2 {
            text-align: center;
            margin-bottom: 20px;
        }
        .form-group {
            margin-bottom: 15px;
        }
        label {
            display: block;
            margin-bottom: 5px;
            font-weight: bold;
        }
        input[type="file"] {
            width: 100%;
            padding: 8px;
            border: 1px solid #ddd;
            border-radius: 3px;
            box-sizing: border-box;
            margin-bottom: 10px;
        }
        input[type="submit"] {
            width: 100%;
            padding: 10px;
            background-color: #4CAF50;
            color: white;
            border: none;
            border-radius: 3px;
            cursor: pointer;
        }
        input[type="submit"]:hover {
            background-color: #45a049;
        }
        .error {
            color: red;
            margin-bottom: 15px;
        }
        .success {
            color: green;
            margin-bottom: 15px;
        }
        .file-list {
            margin-top: 20px;
        }
        .file-item {
            padding: 10px;
            border-bottom: 1px solid #ddd;
        }
        .file-item a {
            text-decoration: none;
            color: #333;
        }
        .file-item a:hover {
            color: #4CAF50;
        }
    </style>
</head>
<body>
    <div class="upload-container">
        <h2>多文件上传</h2>
        <?php if (isset($error)) { echo '<div class="error">' . $error . '</div>'; } ?>
        <?php if (isset($success)) { echo '<div class="success">' . $success . '</div>'; } ?>
        <form method="post" action="multiple_upload.php" enctype="multipart/form-data">
            <div class="form-group">
                <label>选择文件:</label>
                <input type="file" name="files[]" multiple>
            </div>
            <input type="submit" value="上传">
        </form>
        
        <div class="file-list">
            <h3>已上传文件</h3>
            <?php
            $upload_dir = 'uploads/';
            if (is_dir($upload_dir)) {
                $files = scandir($upload_dir);
                foreach ($files as $file) {
                    if ($file != '.' && $file != '..') {
                        echo '<div class="file-item"><a href="' . $upload_dir . $file . '" target="_blank">' . $file . '</a></div>';
                    }
                }
            } else {
                echo '没有上传文件';
            }
            ?>
        </div>
    </div>
</body>
</html>

上传处理

php
<?php
// 初始化变量
$error = '';
$success = '';

// 检查是否提交表单
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // 检查是否有文件上传
    if (isset($_FILES['files'])) {
        $files = $_FILES['files'];
        $upload_count = 0;
        
        // 遍历上传的文件
        for ($i = 0; $i < count($files['name']); $i++) {
            $file = array(
                'name' => $files['name'][$i],
                'type' => $files['type'][$i],
                'tmp_name' => $files['tmp_name'][$i],
                'error' => $files['error'][$i],
                'size' => $files['size'][$i]
            );
            
            // 检查上传错误
            if ($file['error'] === UPLOAD_ERR_OK) {
                // 检查文件类型
                $allowed_types = array('image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'text/plain');
                if (!in_array($file['type'], $allowed_types)) {
                    $error .= '文件 ' . $file['name'] . ' 类型不允许<br>';
                } else {
                    // 检查文件大小
                    $max_size = 5 * 1024 * 1024; // 5MB
                    if ($file['size'] > $max_size) {
                        $error .= '文件 ' . $file['name'] . ' 大小超过限制<br>';
                    } else {
                        // 生成唯一文件名
                        $filename = uniqid() . '.' . pathinfo($file['name'], PATHINFO_EXTENSION);
                        $upload_dir = 'uploads/';
                        
                        // 创建上传目录
                        if (!is_dir($upload_dir)) {
                            mkdir($upload_dir, 0777, true);
                        }
                        
                        // 移动上传文件
                        $file_path = $upload_dir . $filename;
                        if (move_uploaded_file($file['tmp_name'], $file_path)) {
                            $upload_count++;
                        } else {
                            $error .= '文件 ' . $file['name'] . ' 上传失败<br>';
                        }
                    }
                }
            } else {
                $error .= '文件 ' . $file['name'] . ' 上传错误: ' . $file['error'] . '<br>';
            }
        }
        
        if ($upload_count > 0) {
            $success = '成功上传 ' . $upload_count . ' 个文件';
        }
    } else {
        $error = '没有文件上传';
    }
}

// 显示上传表单
include 'multiple_upload_form.php';
?>

图片上传与预览

表单示例

html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>图片上传与预览</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            margin: 0;
            padding: 20px;
        }
        .upload-container {
            background-color: white;
            padding: 20px;
            border-radius: 5px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
            max-width: 500px;
            margin: 0 auto;
        }
        h2 {
            text-align: center;
            margin-bottom: 20px;
        }
        .form-group {
            margin-bottom: 15px;
        }
        label {
            display: block;
            margin-bottom: 5px;
            font-weight: bold;
        }
        input[type="file"] {
            width: 100%;
            padding: 8px;
            border: 1px solid #ddd;
            border-radius: 3px;
            box-sizing: border-box;
        }
        input[type="submit"] {
            width: 100%;
            padding: 10px;
            background-color: #4CAF50;
            color: white;
            border: none;
            border-radius: 3px;
            cursor: pointer;
        }
        input[type="submit"]:hover {
            background-color: #45a049;
        }
        .error {
            color: red;
            margin-bottom: 15px;
        }
        .success {
            color: green;
            margin-bottom: 15px;
        }
        .preview {
            margin-top: 20px;
        }
        .preview img {
            max-width: 100%;
            max-height: 300px;
            border: 1px solid #ddd;
            border-radius: 3px;
        }
        .file-list {
            margin-top: 20px;
        }
        .file-item {
            padding: 10px;
            border-bottom: 1px solid #ddd;
        }
        .file-item a {
            text-decoration: none;
            color: #333;
        }
        .file-item a:hover {
            color: #4CAF50;
        }
    </style>
    <script>
        function previewImage(event) {
            var reader = new FileReader();
            reader.onload = function() {
                var output = document.getElementById('preview');
                output.src = reader.result;
                output.style.display = 'block';
            };
            reader.readAsDataURL(event.target.files[0]);
        }
    </script>
</head>
<body>
    <div class="upload-container">
        <h2>图片上传与预览</h2>
        <?php if (isset($error)) { echo '<div class="error">' . $error . '</div>'; } ?>
        <?php if (isset($success)) { echo '<div class="success">' . $success . '</div>'; } ?>
        <form method="post" action="image_upload.php" enctype="multipart/form-data">
            <div class="form-group">
                <label for="image">选择图片:</label>
                <input type="file" id="image" name="image" accept="image/*" onchange="previewImage(event)" required>
            </div>
            <div class="preview">
                <img id="preview" style="display: none;">
            </div>
            <input type="submit" value="上传">
        </form>
        
        <div class="file-list">
            <h3>已上传图片</h3>
            <?php
            $upload_dir = 'uploads/';
            if (is_dir($upload_dir)) {
                $files = scandir($upload_dir);
                foreach ($files as $file) {
                    if ($file != '.' && $file != '..') {
                        $file_path = $upload_dir . $file;
                        $file_ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
                        if (in_array($file_ext, array('jpg', 'jpeg', 'png', 'gif'))) {
                            echo '<div class="file-item"><a href="' . $file_path . '" target="_blank"><img src="' . $file_path . '" style="width: 100px; height: auto;"></a> ' . $file . '</div>';
                        }
                    }
                }
            } else {
                echo '没有上传图片';
            }
            ?>
        </div>
    </div>
</body>
</html>

上传处理

php
<?php
// 初始化变量
$error = '';
$success = '';

// 检查是否提交表单
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // 检查是否有文件上传
    if (isset($_FILES['image'])) {
        $file = $_FILES['image'];
        
        // 检查上传错误
        if ($file['error'] === UPLOAD_ERR_OK) {
            // 检查文件类型
            $allowed_types = array('image/jpeg', 'image/png', 'image/gif');
            if (!in_array($file['type'], $allowed_types)) {
                $error = '只允许上传 JPEG、PNG 和 GIF 图片';
            } else {
                // 检查文件大小
                $max_size = 2 * 1024 * 1024; // 2MB
                if ($file['size'] > $max_size) {
                    $error = '文件大小不能超过 2MB';
                } else {
                    // 生成唯一文件名
                    $filename = uniqid() . '.' . pathinfo($file['name'], PATHINFO_EXTENSION);
                    $upload_dir = 'uploads/';
                    
                    // 创建上传目录
                    if (!is_dir($upload_dir)) {
                        mkdir($upload_dir, 0777, true);
                    }
                    
                    // 移动上传文件
                    $file_path = $upload_dir . $filename;
                    if (move_uploaded_file($file['tmp_name'], $file_path)) {
                        $success = '图片上传成功:' . $filename;
                    } else {
                        $error = '图片上传失败';
                    }
                }
            }
        } else {
            // 处理上传错误
            switch ($file['error']) {
                case UPLOAD_ERR_INI_SIZE:
                    $error = '文件大小超过了 php.ini 中的限制';
                    break;
                case UPLOAD_ERR_FORM_SIZE:
                    $error = '文件大小超过了表单中的限制';
                    break;
                case UPLOAD_ERR_PARTIAL:
                    $error = '文件只上传了一部分';
                    break;
                case UPLOAD_ERR_NO_FILE:
                    $error = '没有上传文件';
                    break;
                case UPLOAD_ERR_NO_TMP_DIR:
                    $error = '临时文件夹不存在';
                    break;
                case UPLOAD_ERR_CANT_WRITE:
                    $error = '无法写入临时文件';
                    break;
                case UPLOAD_ERR_EXTENSION:
                    $error = '文件上传被扩展阻止';
                    break;
                default:
                    $error = '未知错误';
                    break;
            }
        }
    } else {
        $error = '没有文件上传';
    }
}

// 显示上传表单
include 'image_upload_form.php';
?>

总结

本文提供了 PHP 中文件上传的基本模板,包括基本文件上传、多文件上传和图片上传与预览等功能。这些模板可以作为开发中的参考,帮助你快速实现文件上传功能。

在使用这些模板时,应该注意以下几点:

  • 对上传文件进行严格的验证
  • 限制文件类型和大小
  • 生成唯一文件名
  • 创建安全的上传目录
  • 正确处理上传错误
  • 遵循最佳实践和编码规范

通过使用这些模板,你可以更高效地开发 PHP 应用程序,提高代码质量和安全性。

© 2026 编程马·菜鸟教程 版权所有