php实现上传
文件上传基础实现
使用PHP处理文件上传需要结合HTML表单和PHP脚本。以下是一个基础实现示例:
HTML表单部分(index.html):
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload" name="submit">
</form>
PHP处理脚本(upload.php):

$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($targetFile,PATHINFO_EXTENSION));
// 检查文件是否已存在
if (file_exists($targetFile)) {
echo "文件已存在";
$uploadOk = 0;
}
// 限制文件大小(5MB)
if ($_FILES["fileToUpload"]["size"] > 5000000) {
echo "文件过大";
$uploadOk = 0;
}
// 允许特定文件格式
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg") {
echo "只允许JPG, JPEG, PNG文件";
$uploadOk = 0;
}
// 检查$uploadOk是否为0
if ($uploadOk == 0) {
echo "文件未上传";
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
echo "文件". htmlspecialchars(basename($_FILES["fileToUpload"]["name"])). "已上传";
} else {
echo "上传过程中出错";
}
}
安全增强措施
为防止安全风险,建议添加以下防护措施:
// 检查是否为真实图片(防止伪装图片)
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check === false) {
echo "文件不是有效的图片";
$uploadOk = 0;
}
}
// 限制文件扩展名
$allowedExtensions = ['jpg', 'jpeg', 'png', 'gif'];
if(!in_array($imageFileType, $allowedExtensions)) {
echo "不允许的文件类型";
$uploadOk = 0;
}
// 生成唯一文件名防止覆盖
$newFileName = uniqid().'.'.$imageFileType;
$targetFile = $targetDir . $newFileName;
多文件上传处理
处理多个文件上传需要遍历$_FILES数组:

foreach($_FILES['files']['name'] as $key=>$val) {
$fileName = basename($_FILES['files']['name'][$key]);
$targetFilePath = $targetDir . $fileName;
if(move_uploaded_file($_FILES['files']['tmp_name'][$key], $targetFilePath)) {
echo "文件 {$fileName} 上传成功<br>";
}
}
HTML表单需要添加multiple属性:
<input type="file" name="files[]" multiple>
文件上传配置
PHP.ini中相关配置参数:
upload_max_filesize = 20M
post_max_size = 25M
max_file_uploads = 20
这些参数控制上传文件的最大尺寸和数量,需要根据实际需求调整。






