PHP 文件上传
使用 PHP,可以轻松地将文件上传到服务器。
但是,方便伴随着危险,所以在允许文件上传时务必小心!
配置 "php.ini" 文件
首先,确保 PHP 已配置为允许文件上传。
在你的 "php.ini" 文件中,搜索 file_uploads
指令,并将其设置为 On
file_uploads = On
创建 HTML 表单
接下来,创建一个 HTML 表单,允许用户选择他们想要上传的图像文件。
<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
选择要上传的图片
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="上传图片" name="submit">
</form>
</body>
</html>
上面的 HTML 表单需要遵循的一些规则
- 确保表单使用 method="post"
- 表单还需要具有以下属性:enctype="multipart/form-data"。它指定了在提交表单时要使用的内容类型。
如果缺少上述要求,文件上传将无法工作。
其他需要注意的事项
- <input> 标签的 type="file" 属性将输入字段显示为文件选择控件,旁边还有一个 "浏览" 按钮。
上面的表单会将数据发送到名为 "upload.php" 的文件,我们将在下一步创建它。
创建上传文件的 PHP 脚本
"upload.php" 文件包含上传文件的代码。
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// 检查文件是否为实际的图像文件或伪图像
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "文件是图像 - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "文件不是图像。";
$uploadOk = 0;
}
}
?>
PHP 脚本说明
- $target_dir = "uploads/" - 指定文件将被放置的目录。
- $target_file 指定要上传文件的路径。
- $uploadOk=1 尚未被使用(稍后将使用)。
- $imageFileType 保存文件的扩展名(小写)。
- 接下来,检查文件是否为实际的图像文件或伪图像。
注意:你需要在 "upload.php" 文件所在的目录中创建一个名为 "uploads" 的新目录。上传的文件将保存在那里。
检查文件是否已存在
现在我们可以添加一些限制。
首先,我们将检查文件是否已存在于 "uploads" 文件夹中。如果存在,将显示一条错误消息,$uploadOk 将被设置为 0。
// 检查文件是否已存在
if (file_exists($target_file)) {
echo "抱歉,文件已存在。";
$uploadOk = 0;
}
限制文件大小
我们上面 HTML 表单中的文件输入字段名为 "fileToUpload"。
现在,我们要检查文件大小。如果文件大于 500KB,将显示一条错误消息,$uploadOk 将被设置为 0。
// 检查文件大小
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "抱歉,你的文件太大。";
$uploadOk = 0;
}
限制文件类型
下面的代码只允许用户上传 JPG、JPEG、PNG 和 GIF 文件。所有其他文件类型都会在将 $uploadOk 设置为 0 之前显示错误消息。
// 允许某些文件格式
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "抱歉,只允许上传 JPG、JPEG、PNG 和 GIF 文件。";
$uploadOk = 0;
}
完整的上传文件 PHP 脚本
"upload.php" 的完整文件现在如下所示:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// 检查文件是否为实际的图像文件或伪图像
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "文件是图像 - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "文件不是图像。";
$uploadOk = 0;
}
}
// 检查文件是否已存在
if (file_exists($target_file)) {
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;
}
// 检查 $uploadOk 是否因错误而设置为 0
if ($uploadOk == 0) {
echo "抱歉,你的文件未能上传。";
// 如果一切正常,则尝试上传文件
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "文件 ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " 已上传。";
} else {
echo "抱歉,上传文件时出错。";
}
}
?>
完整的 PHP 文件系统参考
有关文件系统函数的完整参考,请访问我们的完整 PHP 文件系统参考。