首页 > 编程笔记 > PHP笔记 阅读:18

PHP实现上传文件功能(附带实例)

在网络上,用户可以上传自己的文件。实现这种功能的方法很多,用户把一个文件上传到服务器,需要在客户端和服务器端建立一个通道来传递文件的字节流,并在服务器进行上传操作。

本节介绍一种使用代码最少,并且容易理解的方法。

PHP全局变量$_FILES

通过使用 PHP 的全局变量 $_FILES,用户可以从客户计算机向远程服务器上传文件。

全局变量 $_FILES 是一个二维数组,用于接收上传文件的信息,它会保存表单中 type 值为 file 的提交信息,有 5 个主要列,具体含义如下:
在 $_FILES["file"]["tmp_name"] 中,/tmp 目录是默认的上传临时文件的存放地点,此时用户必须将文件从临时目录中删除或移到其他位置,如果没有,则上传的文件会自动被删除。

可见,无论上传是否成功,程序最后都会自动删除临时目录中的文件。所以在删除前,需要将上传的文件复制到其他位置,这样才算真正完成了上传文件的过程。

另外,$_FILES["file"]["error"] 中返回的错误代码的常量对应的数值的含义如下:

PHP文件上传

在 PHP 中,使用 move_uploaded_file() 函数可以将上传的文件移动到新位置。语法格式如下:
move_uploaded_file(file,newloc)
其中,file 为需要移动的文件,newloc 参数为文件的新位置:

提示,move_uploaded_file() 函数只能用于通过 HTTP POST 上传文件。如果目标文件已经存在,将会被覆盖。


下面通过案例来学习上传图片文件的方法和技巧:
1) 首先创建一个获取上传文件的页面,文件名为 11.9.html,代码如下:
<html>
<head>
<title>上传图片文件</title>
</head>
<body>
<form action="11.9.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>
</body>
</html>
其中,<form action="11.9.php" method="post" enctype="multipart/form-data"> 语句中的 method 属性表示提交信息的方式是 post,即采用数据块;action 属性表示处理信息的页面为 11.9.php;ENCTYPE="multipart/form-data"表示以二进制的方式传递提交的数据。

2) 接着创建一个实现文件上传功能的文件。为了设置和保存上传文件的路径,用户需要在创建文件的目录下新建一个名称为“upload”的文件夹。然后新建 11.9.php 文件,代码如下:
<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension = end($temp);  // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif") ||
    ($_FILES["file"]["type"] == "image/jpeg") ||
    ($_FILES["file"]["type"] == "image/jpg") ||
    ($_FILES["file"]["type"] == "image/pjpeg") ||
    ($_FILES["file"]["type"] == "image/x-png") ||
    ($_FILES["file"]["type"] == "image/png") &&
    ($_FILES["file"]["size"] < 2048000) // 小于 200 kb
    && in_array($extension, $allowedExts)) {

    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"] . "<br/>";

        // 判断当期目录下的 upload 目录是否存在该文件
        // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
        if (file_exists("upload/" . $_FILES["file"]["name"])) {
            echo $_FILES["file"]["name"] . " 文件已经存在。";
        } else {
            // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
            echo "文件存储在:" . "upload/" . $_FILES["file"]["name"];
        }
    }
} else {
    echo "非法的文件格式";
}
?>
访问 11.9.html 网页,结果如下图所示:


单击“浏览”按钮,即可选择需要上传的文件,最后单击“上传”按钮,即可跳转到 11.9.php 文件,如下图所示,实现了文件的上传操作:

相关文章