一、准备工作

二、HTML表单设计

<form action="upload.php" method="post" enctype="multipart/form-data">
    选择图片:<input type="file" name="image">
    <input type="submit" value="上传">
</form>

这里使用了enctype="multipart/form-data"属性,它允许表单数据以二进制形式发送,这对于文件上传是必需的。

三、PHP脚本编写

<?php
// 检查是否有文件被上传
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['image'])) {
    // 获取上传的文件信息
    $file = $_FILES['image'];
    $filename = $file['name'];
    $filetmp = $file['tmp_name'];
    $filetype = $file['type'];
    $filesize = $file['size'];

    // 检查文件类型
    $allowedTypes = array('image/jpeg', 'image/png', 'image/gif');
    if (!in_array($filetype, $allowedTypes)) {
        die('不支持的文件类型');
    }

    // 检查文件大小
    $maxFileSize = 2 * 1024 * 1024; // 2MB
    if ($filesize > $maxFileSize) {
        die('文件大小超出限制');
    }

    // 移动文件到目标目录
    $target = 'uploads/' . basename($filename);
    if (move_uploaded_file($filetmp, $target)) {
        echo "文件上传成功: " . $target;
    } else {
        die('文件上传失败');
    }
}
?>

在这个脚本中,我们首先检查是否有文件被上传,然后获取上传文件的详细信息。接着,我们检查文件类型和大小是否符合要求,最后将文件移动到服务器上的指定目录。

四、技巧解析

  1. 使用move_uploaded_file函数:这是一个专门用于移动上传文件的函数,它可以防止目录遍历攻击。
  2. 检查文件类型:确保只允许上传特定的文件类型,以避免恶意文件上传。
  3. 限制文件大小:限制上传文件的大小可以减少服务器资源的消耗。
  4. 使用绝对路径:在处理文件时,始终使用绝对路径,以避免安全风险。

五、常见问题解答

Q:如何处理上传失败的情况?

A:在PHP脚本中,你可以通过检查$_FILES数组来判断文件是否成功上传。如果上传失败,你可以设置一个错误消息,并通知用户。

<img src="uploads/your-image.jpg" alt="上传的图片">
function resizeImage($src, $dst, $width, $height) {
    $image = imagecreatefromjpeg($src);
    $newImage = imagecreatetruecolor($width, $height);
    imagecopyresampled($newImage, $image, 0, 0, 0, 0, $width, $height, imagesx($image), imagesy($image));
    imagejpeg($newImage, $dst);
    imagedestroy($image);
    imagedestroy($newImage);
}

resizeImage('uploads/your-image.jpg', 'uploads/resized-image.jpg', 100, 100);