欢迎访问宙启技术站
智能推送

使用PHP函数实现文件上传和下载功能

发布时间:2023-06-20 04:10:26

文件上传和下载是我们在Web开发中经常用到的功能,而PHP语言提供了方便实现这两种功能的函数。

一、文件上传

实现文件上传需要用到两个PHP函数:move_uploaded_file()和$_FILES。

1. move_uploaded_file()函数

move_uploaded_file()函数是PHP操作文件的一个重要函数,主要用于将上传文件从临时目录移动到指定目录中。

move_uploaded_file(file,newloc)

file:必需。规定要移动的文件。通常从 $_FILES 数组中获得上传文件。

newloc:必需。规定文件被移动到的新位置。可以是相对路径或者绝对路径。

2. $_FILES变量

$_FILES变量提供了一个用户上传文件的接口。它存储了文件上传后的相关信息,包括文件名、文件类型、文件尺寸等。$_FILES变量是一个二维数组,包含$_FILES[file][name]、$_FILES[file][type]、$_FILES[file][size]、$_FILES[file][tmp_name]和$_FILES[file][error]等元素。

下面给出一个文件上传的代码示例:

<!DOCTYPE html>
<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
  选择文件上传:<input type="file" name="fileToUpload" id="fileToUpload">
  <input type="submit" value="上传" name="submit">
</form>

<?php
if(isset($_POST["submit"])) {
    $target_dir = "uploads/"; // 上传文件保存的目录
    $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); // 上传文件的完整路径
    $uploadOk = 1;
    $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION)); // 获取上传文件的扩展名

    // 检查文件是否已存在
    if (file_exists($target_file)) {
        echo "对不起,文件已存在。";
        $uploadOk = 0;
    }
    // 检查文件大小
    if ($_FILES["fileToUpload"]["size"] > 500000) {
        echo "对不起,文件太大。";
        $uploadOk = 0;
    }
    // 检查文件格式
    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
    && $imageFileType != "gif" ) {
        echo "对不起,只允许 JPG, JPEG, PNG & GIF 文件。";
        $uploadOk = 0;
    }
    // 检查 $uploadOk 是否为 0
    if ($uploadOk == 0) {
        echo "对不起,文件未上传。";
    // 如果一切都好,尝试上传文件
    } else {
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
            echo "文件 ". basename( $_FILES["fileToUpload"]["name"]). " 已上传。";
        } else {
            echo "对不起,上传文件时发生了错误。";
        }
    }
}
?>

</body>
</html>

二、文件下载

实现文件下载也需要用到两个PHP函数:readfile()和header()。

1. readfile()函数

readfile()函数可用于读取文件内容并将其发送到输出缓冲区。它常用于读取文本文件和二进制文件,包括图像和视频文件。

readfile(filename)

filename:必需,规定文件的名称/路径及名称。

2. header()函数

header()函数用于发送原始HTTP头到客户端。header()函数必须在浏览器输出之前调用,否则将会报错。

下面给出一个文件下载的代码示例:

<?php
$file = 'downloads/file.zip'; // 文件路径

if (file_exists($file)) {
    //设置头信息,发送文件给浏览器下载
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: '.filesize($file));
    readfile($file); // 发送文件内容
    exit;
} else {
    echo "对不起,该文件不存在。";
}
?>

总结:

使用PHP函数实现文件上传和下载功能非常简单。文件上传需要用到move_uploaded_file()函数和$_FILES变量,文件下载需要用到readfile()函数和header()函数。我们只需要根据自己的需求编写相应的代码即可。