📅  最后修改于: 2023-12-03 14:45:26.963000             🧑  作者: Mango
在 Web 开发中,文件上传是一项非常常见的功能。PHP 提供了方便的内置函数和特定 API 来处理文件上传。
文件上传的基本原理是通过 HTML 表单(form)元素的 enctype 属性设置为 "multipart/form-data",将文件数据以二进制流形式发送到服务器,服务器接收到数据后进行处理。
<form enctype="multipart/form-data" method="post" action="upload.php">
<label>上传文件:</label>
<input type="file" name="file">
<button type="submit" name="submit">上传</button>
</form>
需要注意的是,表单中的 method 必须设置为 post,action 必须指向处理上传的 PHP 脚本。
<?php
$target_dir = "uploads/"; // 文件上传目录
$target_file = $target_dir . basename($_FILES["file"]["name"]); // 获取上传文件名
$uploadOk = 1; // 上传标识符
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION)); // 获取上传文件类型
// 检查文件是否为真实图片
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["file"]["tmp_name"]);
if($check !== false) {
echo "文件是一个真实的图片 - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "文件不是一个真实图片。";
$uploadOk = 0;
}
}
// 检查文件大小
if ($_FILES["file"]["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["file"]["tmp_name"], $target_file)) {
echo "文件 ". basename( $_FILES["file"]["name"]). " 上传成功。";
} else {
echo "对不起,文件上传失败。";
}
}
?>
需要在服务器上创建一个目录来保存上传的文件。在上面的 PHP 代码中,上传文件目录为 "uploads/"。确保该目录有写权限,否则文件上传会失败。
以上就是 PHP 文件上传的基础。通过表单元素和 PHP 代码的配合使用,实现文件上传功能是非常简单和容易的。但需要注意的是,上传的文件必须经过严格的检验和验证,以防止安全问题的出现。