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)
通过 $_FILES 超全局变量获取上传文件信息,并进行验证和处理:
<?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) {
$uploadOk = 0;
}
// 检查文件大小 (限制为 2MB)
if ($_FILES["image"]["size"] > 2000000) {
$uploadOk = 0;
}
// 允许特定格式
$allowedTypes = ["jpg", "png", "jpeg", "gif"];
if (!in_array($imageFileType, $allowedTypes)) {
$uploadOk = 0;
}
// 上传文件
if ($uploadOk && move_uploaded_file($_FILES["image"]["tmp_name"], $targetFile)) {
echo "文件 ". htmlspecialchars(basename($_FILES["image"]["name"])). " 上传成功";
} else {
echo "上传失败";
}
}
?>
图片处理与缩略图生成
使用 GD 库或 Imagick 扩展可以对上传的图片进行进一步处理:
使用 GD 库创建缩略图
function createThumbnail($sourcePath, $targetPath, $thumbnailWidth) {
list($sourceWidth, $sourceHeight, $sourceType) = getimagesize($sourcePath);
switch ($sourceType) {
case IMAGETYPE_JPEG:
$sourceImage = imagecreatefromjpeg($sourcePath);
break;
case IMAGETYPE_PNG:
$sourceImage = imagecreatefrompng($sourcePath);
break;
default:
return false;
}
$thumbnailHeight = floor($sourceHeight * ($thumbnailWidth / $sourceWidth));
$thumbnailImage = imagecreatetruecolor($thumbnailWidth, $thumbnailHeight);
imagecopyresampled($thumbnailImage, $sourceImage, 0, 0, 0, 0,
$thumbnailWidth, $thumbnailHeight, $sourceWidth, $sourceHeight);
imagejpeg($thumbnailImage, $targetPath);
imagedestroy($sourceImage);
imagedestroy($thumbnailImage);
return true;
}
安全注意事项
验证文件类型不应仅依赖扩展名,应结合 MIME 类型检查:

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES["image"]["tmp_name"]);
$allowedMimes = ["image/jpeg", "image/png", "image/gif"];
if (!in_array($mime, $allowedMimes)) {
// 拒绝上传
}
确保上传目录权限设置正确,通常设置为 755。对于生产环境,建议将上传文件存储在 web 根目录之外,或通过 .htaccess 限制直接访问。






