php实现图片上传
实现图片上传的基本步骤
创建一个HTML表单用于文件上传,确保表单的enctype属性设置为multipart/form-data。
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="image">
<input type="submit" value="上传">
</form>
处理上传的PHP代码
在服务器端创建一个PHP脚本(例如upload.php)来处理上传的文件。
<?php
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["image"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
// 检查文件是否为真实图片
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["image"]["tmp_name"]);
if($check !== false) {
$uploadOk = 1;
} else {
echo "文件不是图片。";
$uploadOk = 0;
}
}
// 检查文件是否已存在
if (file_exists($targetFile)) {
echo "文件已存在。";
$uploadOk = 0;
}
// 限制文件大小(例如5MB)
if ($_FILES["image"]["size"] > 5000000) {
echo "文件过大。";
$uploadOk = 0;
}
// 允许特定文件格式
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
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 "上传过程中发生错误。";
}
}
?>
安全注意事项
确保上传目录的权限设置正确,避免执行上传的文件。
// 禁止执行PHP文件
if($imageFileType == "php") {
echo "不允许上传PHP文件。";
$uploadOk = 0;
}
文件重命名
为了避免文件名冲突或安全问题,可以生成唯一的文件名。
$newFileName = uniqid() . '.' . $imageFileType;
$targetFile = $targetDir . $newFileName;
验证文件内容
使用finfo函数进一步验证文件内容。

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES["image"]["tmp_name"]);
finfo_close($finfo);
$allowedMimes = ['image/jpeg', 'image/png', 'image/gif'];
if(!in_array($mime, $allowedMimes)) {
echo "不允许的文件类型。";
$uploadOk = 0;
}






