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

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

1
2
3
4
<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。

1
2
3
4
5
6
7
8
9
10
11
12
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(“需要移动的文件”, “文件的新位置”)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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”已存在,否则将会报错。

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

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