如何使用 PHP 上传文件

2016-02-17
次阅读
3 分钟阅读时长

PHP文件上传在网站开发中应用十分广泛,例如用户上传头像、在文章中插入图片、上传附件等等。今天就讲讲如何使用PHP上传文件。

首先创建一个 HTML 表单,用于提交上传的文件,这里需要注意的是,在上传文件的表单中,必须使设置 enctype=“multipart/form-data” 来确保匿名上传文件的正确编码。

<form action="./upload.php" name="upload_form" method="post" enctype="multipart/form-data">      
<input type="file" name="img">
<input type="submit" name="submit" value="上传">
</form>

input 标签的 type=“file” 属性规定了应该把输入作为文件来处理。用户选择好需要上传的文件以后,点击上传按钮。通过 post 方式提交给 upload.php 文件。当upload.php 接收到提交过来的文件时,PHP 会用一个全局数组 $_FILES 来储存被上传的文件的一些信息,当我们使用 var_dump() 函数打印 $_FILES 数组可以获得以下信息:

  • $_FILES[“img”][“name”] - 被上传文件的名称
  • $_FILES[“img”][“type”] - 被上传文件的类型
  • $_FILES[“img”][“size”] - 被上传文件的大小,以字节计
  • $_FILES[“img”][“tmp_name”] - 存储在服务器的文件的临时副本的名称
  • $_FILES[“img”][“error”] - 由文件上传导致的错误代码我们在upload.php文件中输出这些信息:

这是一种非常简单文件上传方式。但是基于安全方面的考虑,我们应该做一些限制,例如限制用户只能上传格式为 .png 或者 .gif 的图片,且大小必须小于 100kb。

if ($_FILES["img"]["size"] < 10000 && $_FILES["img"]["type"] == "image/png" || $_FILES["img"]["type"] == "image/gif") {
    if ($_FILES["img"]["error"] > 0) {        //当error为0表示上传成功
        echo "错误信息:  " . $_FILES["img"]["error"] . "<br  />";
    } else {
        echo "文件名称:  " . $_FILES["img"]["name"] . "<br  />";
        echo "文件类型:  " . $_FILES["img"]["type"] . "<br  />";
        echo "文件大小:  " . ($_FILES["img"]["size"] / 1024) . "  Kb<br  />";
        echo "文件临时存储路径:  " . $_FILES["img"]["tmp_name"];
    }
} else {
    echo "无效的文件!";
}

上面的例子虽然输出了文件的信息,但是并没有将文件储存在服务器上,只是将被上传的文件放在了服务器的一个临时目录。接下来我们要做的就是使用move_uploaded_file() 函数,把文件从临时目录中移动到我们指定的目录下面。

move_uploaded_file() 语法:move_uploaded_file(“需要移动的文件”, “文件的新位置”)

<?php
if ($_FILES["img"]["size"] < 10000 && $_FILES["img"]["type"] == "image/png" || $_FILES["img"]["type"] == "image/gif") {
    if ($_FILES["img"]["error"] > 0) {        //当error为0表示上传成功
        echo "错误信息:  " . $_FILES["img"]["error"] . "<br  />";
    } else {
        echo "文件名称:  " . $_FILES["img"]["name"] . "<br  />";
        echo "文件类型:  " . $_FILES["img"]["type"] . "<br  />";
        echo "文件大小:  " . ($_FILES["img"]["size"] / 1024) . "  Kb<br  />";
        echo "文件临时存储路径:  " . $_FILES["img"]["tmp_name"] . "<br/>";
        move_uploaded_file($_FILES["img"]["tmp_name"], "upload/" . $_FILES["img"]["name"]);
        echo "移动后的路径:  " . "upload/" . $_FILES["img"]["name"];
    }
} else {
    echo "无效的文件!";
}
?>

在上面的代码中, 我们将文件保存到了名为 “upload” 的新文件夹。

注:必须确认"upload"已存在,否则将会报错。

好了,关于如何使用文件上传已经讲完了,你看懂了吗?

这是一篇过去很久的文章,其中的信息可能已经有所发展或是发生改变。

本文作者:她和她的猫
本文地址https://her-cat.com/posts/2016/02/17/php-upload-file/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!