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 文件系统参考。