php实现图片上传
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 脚本
在 upload.php 文件中,检查文件是否上传成功,并验证文件类型和大小。
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["image"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
// 检查是否为真实的图片
$check = getimagesize($_FILES["image"]["tmp_name"]);
if ($check === false) {
echo "文件不是图片。";
$uploadOk = 0;
}
// 检查文件大小(限制为 2MB)
if ($_FILES["image"]["size"] > 2000000) {
echo "文件过大,请上传小于 2MB 的图片。";
$uploadOk = 0;
}
// 允许的文件格式
$allowedFormats = ["jpg", "jpeg", "png", "gif"];
if (!in_array($imageFileType, $allowedFormats)) {
echo "仅支持 JPG, JPEG, PNG 和 GIF 格式。";
$uploadOk = 0;
}
// 检查上传是否成功
if ($uploadOk == 0) {
echo "上传失败。";
} else {
if (move_uploaded_file($_FILES["image"]["tmp_name"], $targetFile)) {
echo "图片上传成功: " . htmlspecialchars(basename($_FILES["image"]["name"]));
} else {
echo "上传过程中出现错误。";
}
}
}
?>
文件验证与安全措施
为了确保上传的图片安全,建议进一步验证文件内容,避免恶意文件上传。
// 检查文件内容是否为图片
if (exif_imagetype($_FILES["image"]["tmp_name"]) === false) {
echo "文件内容不是有效的图片。";
$uploadOk = 0;
}
// 生成唯一的文件名,避免覆盖
$newFileName = uniqid() . '.' . $imageFileType;
$targetFile = $targetDir . $newFileName;
设置上传目录权限
确保 uploads/ 目录存在且具有写入权限,否则上传会失败。
mkdir uploads
chmod 755 uploads
通过以上步骤,可以实现一个基本的图片上传功能。根据需求可以进一步扩展,例如添加图片压缩、水印等功能。







