一、准备工作
二、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('文件上传失败');
}
}
?>
在这个脚本中,我们首先检查是否有文件被上传,然后获取上传文件的详细信息。接着,我们检查文件类型和大小是否符合要求,最后将文件移动到服务器上的指定目录。
四、技巧解析
- 使用
move_uploaded_file
函数:这是一个专门用于移动上传文件的函数,它可以防止目录遍历攻击。 - 检查文件类型:确保只允许上传特定的文件类型,以避免恶意文件上传。
- 限制文件大小:限制上传文件的大小可以减少服务器资源的消耗。
- 使用绝对路径:在处理文件时,始终使用绝对路径,以避免安全风险。
五、常见问题解答
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);