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开发中一个非常重要的功能,掌握这个功能对于开发人员来说是至关重要的。