引言
一、HTML表单设计
1.1 基本表单
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
1.2 表单属性
action: 表单提交后要处理的上传脚本。method: 表单提交的方法,这里使用post。enctype: 表单的编码类型,multipart/form-data允许上传文件。
二、PHP文件上传处理
2.1 接收上传文件
在PHP脚本中,可以使用$_FILES超全局变量接收上传的文件信息。
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$file = $_FILES["fileToUpload"];
}
2.2 文件验证
- 检查
$file是否为空。 - 检查文件类型是否为图片。
- 检查文件大小是否符合要求。
if ($file["error"] === UPLOAD_ERR_OK) {
$fileType = $file["type"];
$fileSize = $file["size"];
// 检查文件类型
if (in_array($fileType, array('image/jpeg', 'image/png', 'image/gif'))) {
// 检查文件大小
if ($fileSize <= 5000000) {
// 文件验证通过,继续处理上传
} else {
echo "文件大小超出";
}
} else {
echo "文件类型不正确";
}
}
2.3 移动上传文件
验证通过后,将上传的文件移动到服务器上的指定目录。
if (move_uploaded_file($file["tmp_name"], "uploads/" . $file["name"])) {
echo "文件上传成功";
} else {
echo "文件上传失败";
}
三、安全存储与高效管理
3.1 安全存储
- 使用随机文件名存储图片,避免文件名冲突。
- 对上传的图片进行压缩,减小文件大小。
- 对上传的图片进行权限设置,访问。
$target_dir = "uploads/";
$target_file = $target_dir . basename(pathinfo($file["name"], PATHINFO_FILENAME)) . "_" . md5(uniqid()) . ".jpg";
$uploadOk = 1;
// 检查目录是否存在
if (!file_exists($target_dir)) {
mkdir($target_dir, 0777, true);
}
// 检查文件是否已存在
if (file_exists($target_file)) {
$uploadOk = 0;
}
// 检查文件大小
if ($fileSize > 5000000) {
$uploadOk = 0;
}
// 检查文件类型
if ($fileType != "image/jpeg" && $fileType != "image/png" && $fileType != "image/gif") {
$uploadOk = 0;
}
if ($uploadOk == 1) {
if (move_uploaded_file($file["tmp_name"], $target_file)) {
echo "文件上传成功";
} else {
echo "文件上传失败";
}
}
3.2 高效管理
- 使用数据库存储图片信息,如图片名称、上传时间、文件路径等。
- 对图片进行分类,方便用户查找和管理。
- 使用缓存技术,提高图片访问速度。