php 文件上传实例代码


在 PHP 中处理文件上传是非常常见的需求。下面是一个基本的 PHP 文件上传示例,包括 HTML 表单和 PHP 脚本两部分。这个示例展示了如何接收用户上传的文件,并将文件保存到服务器上的指定目录。

### 第一步:创建 HTML 表单

创建一个简单的 HTML 表单,允许用户选择文件上传。


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
    <h1>上传文件</h1>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        选择文件:
        <input type="file" name="uploaded_file" id="uploaded_file">
        <br><br>
        <input type="submit" value="上传文件">
    </form>
</body>
</html>

### 第二步:编写 PHP 脚本

创建一个名为 `upload.php` 的 PHP 文件来处理文件上传逻辑。


<?php
// 定义上传文件的目标目录
$target_dir = "uploads/";
// 检查目标目录是否存在,如果不存在,则创建
if (!is_dir($target_dir)) {
    mkdir($target_dir, 0777, true);
}

// 获取文件名
$target_file = $target_dir . basename($_FILES["uploaded_file"]["name"]);

// 检查文件是否上传成功
if (move_uploaded_file($_FILES["uploaded_file"]["tmp_name"], $target_file)) {
    echo "文件 ". htmlspecialchars(basename($_FILES["uploaded_file"]["name"])). " 已经上传成功。";
} else {
    echo "对不起,上传失败。";
}

// 可选:添加额外的安全检查
// 检查文件类型
$fileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
if ($fileType != "jpg" && $fileType != "png" && $fileType != "jpeg"
&& $fileType != "gif" ) {
    echo "抱歉,只允许 JPG, JPEG, PNG & GIF 文件格式。";
    exit;
}

// 检查文件大小
if ($_FILES["uploaded_file"]["size"] > 500000) { // 限制为500KB
    echo "抱歉,您的文件太大。";
    exit;
}

// 检查是否有错误
if ($_FILES["uploaded_file"]["error"] > 0) {
    echo "错误: " . $_FILES["uploaded_file"]["error"] . "<br>";
    exit;
}

?>

### 说明

1. **HTML 表单**:

- 使用 `enctype="multipart/form-data"` 属性来允许文件上传。

- `` 元素允许用户选择文件。

2. **PHP 脚本**:

- `$_FILES` 是一个预定义的全局数组,包含了所有上传文件的信息。

- `move_uploaded_file()` 函数用来将上传的临时文件移动到指定的目标位置。

- 这个脚本还包括了一些基本的安全检查,例如检查文件类型和大小。

### 注意事项

- **安全性**: 确保对上传的文件进行充分的验证和清理,以防止恶意文件的上传。

- **权限**: 确保上传目录的权限设置正确,以便 PHP 脚本能写入文件。

- **错误处理**: 处理上传过程中可能出现的各种错误,如文件大小超出限制、文件类型不被接受等。

请确保你的服务器配置允许文件上传,并且设置了适当的 `upload_max_filesize` 和 `post_max_size` 等配置选项。此外,最好在实际部署前测试这个脚本以确保一切正常运行。