php如何实现上传
PHP 文件上传实现方法
在 PHP 中实现文件上传需要结合 HTML 表单和 PHP 处理脚本。以下是详细步骤:

创建 HTML 上传表单
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload File" name="submit">
</form>
处理上传的 PHP 脚本
<?php
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($targetFile,PATHINFO_EXTENSION));
// 检查文件是否已存在
if (file_exists($targetFile)) {
echo "文件已存在。";
$uploadOk = 0;
}
// 检查文件大小
if ($_FILES["fileToUpload"]["size"] > 500000) {
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["fileToUpload"]["tmp_name"], $targetFile)) {
echo "文件 ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " 上传成功。";
} else {
echo "上传过程中出现错误。";
}
}
?>
安全注意事项
确保上传目录不可执行,设置正确的权限(通常为755)。考虑为上传文件生成随机文件名,防止文件名冲突和潜在的安全问题。
$targetFile = $targetDir . uniqid() . '.' . $imageFileType;
文件类型验证
不要仅依赖文件扩展名验证,应检查文件的 MIME 类型:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES["fileToUpload"]["tmp_name"]);
finfo_close($finfo);
$allowedMimeTypes = ['image/jpeg', 'image/png', 'image/gif'];
if(!in_array($mime, $allowedMimeTypes)) {
echo "不允许的文件类型。";
$uploadOk = 0;
}







