php实现图片上传
PHP实现图片上传
创建HTML表单
创建一个包含文件上传字段的HTML表单,确保设置enctype="multipart/form-data"属性以支持文件上传。
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="image" accept="image/*">
<input type="submit" value="上传图片">
</form>
处理上传的PHP脚本
在服务器端创建一个PHP脚本(如upload.php)来处理上传的文件。验证文件类型、大小,并移动到指定目录。
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["image"]["name"]);
$imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
// 检查是否为真实图片
$check = getimagesize($_FILES["image"]["tmp_name"]);
if ($check === false) {
die("文件不是图片。");
}
// 检查文件大小(例如限制为2MB)
if ($_FILES["image"]["size"] > 2000000) {
die("文件过大,请上传小于2MB的图片。");
}
// 允许的图片格式
$allowedTypes = ["jpg", "jpeg", "png", "gif"];
if (!in_array($imageFileType, $allowedTypes)) {
die("仅支持JPG、JPEG、PNG和GIF格式。");
}
// 移动文件到目标目录
if (move_uploaded_file($_FILES["image"]["tmp_name"], $targetFile)) {
echo "图片上传成功。";
} else {
echo "上传失败,请重试。";
}
}
?>
安全增强措施
为提升安全性,建议对上传的文件进行以下处理:
- 生成唯一的文件名,避免文件名冲突或覆盖。
- 限制上传目录的权限,防止脚本执行。
- 使用
is_uploaded_file()验证文件是否通过HTTP POST上传。
$newFileName = uniqid() . '.' . $imageFileType;
$targetFile = $targetDir . $newFileName;
错误处理
捕获并处理常见的上传错误,例如文件大小超过限制或目录不可写。
if ($_FILES["image"]["error"] !== UPLOAD_ERR_OK) {
switch ($_FILES["image"]["error"]) {
case UPLOAD_ERR_INI_SIZE:
die("文件超过服务器限制。");
case UPLOAD_ERR_NO_DIR:
die("目标目录不存在。");
default:
die("上传错误,代码:" . $_FILES["image"]["error"]);
}
}






