文件上传是Web开发中常见的任务之一。在PHP中,我们可以使用$_FILES超级全局变量来处理文件上传。本文将介绍如何在PHP中正确处理文件上传。

1. 设置文件上传表单

<form action="upload.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="上传" />
</form>

注意:enctype属性必须设置为"multipart/form-data",以便能够正确处理文件上传。

2. 处理文件上传

if(isset($_FILES['file'])) {
    $file = $_FILES['file'];

    // 检查是否有文件上传错误
    if($file['error'] > 0) {
        echo "文件上传错误:" . $file['error'];
        exit;
    }

    // 检查上传文件大小
    if($file['size'] > 1024 * 1024 * 2) { // 最大上传文件大小为2MB
        echo "文件大小超过限制";
        exit;
    }

    // 检查文件类型
    $allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
    if(!in_array($file['type'], $allowedTypes)) {
        echo "不允许上传该类型的文件";
        exit;
    }

    // 生成唯一的文件名
    $fileName = md5(uniqid()) . '.' . pathinfo($file['name'], PATHINFO_EXTENSION);

    // 保存上传文件
    move_uploaded_file($file['tmp_name'], 'uploads/' . $fileName);

    echo "文件上传成功!";
}

以上代码将上传的文件保存在指定的目录下,文件名使用了md5哈希值和唯一ID的组合,以确保文件名的唯一性。

3. 显示上传的文件

$files = scandir('uploads');

foreach($files as $file) {
    if($file != '.' && $file != '..') {
        echo "<img src='uploads/$file' width='200' height='200' />";
    }
}

以上代码会遍历保存上传文件的目录,并将每个文件显示为图片。你可以根据需要自行调整显示图片的样式。

总结:

在PHP中正确处理文件上传,需要设置合适的表单、正确处理文件上传代码,并可选地进行文件类型、大小等的检查。使用以上的代码示例,你应该能够正确地处理文件上传任务。