PHP 文件上传学习笔记
文件上传是Web开发中非常常见的一个功能,通过这个功能可以让用户把自己的文件上传到服务器上,以便进行处理或者分享。在PHP中,使用$_FILES
超全局变量可以轻松实现文件上传功能。
基本上传示例
首先,我们来看一个最基本的文件上传示例,如下所示:
phpCopy Code<?php
if($_FILES["file"]["error"] > 0){
echo "错误: " . $_FILES["file"]["error"] . "<br>";
}else{
echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " KB<br>";
echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
}
?>
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">选择要上传的文件: </label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="上传">
</form>
上面的代码演示了一个文件上传表单,其中包含了一个文件选择框和一个上传按钮。如果用户选择了文件并且点击了上传按钮,PHP脚本将输出该文件的一些基本信息,如文件名、类型、大小等。
安全考虑
文件上传功能可能面临一些安全问题,比如攻击者可能会上传一个包含恶意代码的文件,并试图执行它。因此,在编写文件上传代码时,必须要注意以下几点:
- 只允许上传你信任的文件类型;
- 对文件进行合理的大小限制;
- 对上传的文件进行有效的验证和过滤;
- 最好将上传的文件保存在服务器上非Web根目录下的目录中。
以下代码演示了一个比较安全的文件上传实现:
phpCopy Code<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if(in_array($extension, $allowedExts) &&
$_FILES["file"]["size"] < 20000 &&
$_FILES["file"]["error"] == 0){
if(file_exists("upload/" . $_FILES["file"]["name"])){
echo $_FILES["file"]["name"] . " already exists. ";
}else{
move_uploaded_file(
$_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]
);
echo "文件已经上传到: " . "upload/" . $_FILES["file"]["name"];
}
}else{
echo "无效的文件";
}
?>
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">选择要上传的文件: </label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="上传">
</form>
上述代码首先将允许上传的文件类型和大小进行了限制,并对上传的文件进行了有效性验证。随后,通过move_uploaded_file()
函数将文件从临时目录中移动到指定的目录中完成上传。
综上所述,文件上传是Web开发中一个非常重要的功能,掌握这个功能对于开发人员来说是至关重要的。