php实现上传文件
PHP 文件上传实现方法
创建 HTML 表单
在 HTML 表单中设置 enctype="multipart/form-data" 属性,这是文件上传必需的设置。表单方法应为 POST。
<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 脚本
创建 upload.php 文件处理上传逻辑。$_FILES 超全局数组包含所有上传文件信息。
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
文件验证检查
对上传文件进行安全检查,包括检查是否真实图片、是否已存在、大小限制等。

$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check === false) {
$uploadOk = 0;
}
if (file_exists($targetFile)) {
$uploadOk = 0;
}
if ($_FILES["fileToUpload"]["size"] > 500000) {
$uploadOk = 0;
}
限制文件类型
可以限制只允许特定类型的文件上传,增强安全性。
$allowedTypes = ["jpg", "png", "jpeg", "gif"];
if(!in_array($imageFileType, $allowedTypes)) {
$uploadOk = 0;
}
执行上传
检查所有条件后,使用 move_uploaded_file() 函数将临时文件移动到目标位置。

if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
echo "The file ". htmlspecialchars(basename($_FILES["fileToUpload"]["name"])). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
安全注意事项
确保上传目录不可执行,设置适当权限。对文件名进行消毒处理,防止目录遍历攻击。
$fileName = preg_replace("/[^a-zA-Z0-9\._-]/", "", $_FILES["fileToUpload"]["name"]);
文件重命名
为避免文件名冲突和安全问题,可以为上传文件生成唯一名称。
$newFileName = uniqid() . '.' . $imageFileType;
$targetFile = $targetDir . $newFileName;






