PHP实现文件上传和下载的示例代码

以下是“PHP实现文件上传和下载的示例代码”的完整攻略:

文件上传

第一步:编写前端上传表单

首先,在HTML文件或PHP中编写上传表单,以便用户可以选择需要上传的文件并将其发送到服务器。

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

第二步:编写PHP后端处理文件上传的代码

然后,我们需要创建一个PHP文件来处理文件上传请求,称之为“upload.php”。在这个文件中,首先需要检查上传的文件是否满足要求(例如,文件类型是否正确、文件大小是否在限制范围内等),然后将文件保存在服务器上的指定目录中。

$target_dir = "uploads/"; // 上传文件的保存路径
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); // 上传文件的完整路径
$uploadOk = 1; // 标志位,初始值设为1,表示文件上传成功

// 检查文件类型
$fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
if($fileType != "jpg" && $fileType != "png" && $fileType != "jpeg" && $fileType != "gif" ) {
    echo "只允许上传JPG、JPEG、PNG和GIF格式的文件";
    $uploadOk = 0;
}

// 检查文件大小
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "文件大小超过了限制";
    $uploadOk = 0;
}

// 如果上传不成功,输出错误信息;否则,将文件保存到指定目录中
if ($uploadOk == 0) {
    echo "上传失败";
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "文件" . basename($_FILES["fileToUpload"]["name"]) . "上传成功";
    } else {
        echo "上传过程出现错误";
    }
}

值得注意的是,我们使用move_uploaded_file函数将临时文件移动到我们指定的路径中。临时文件存储在$_FILES数组的“tmp_name”元素中。

示例一:文件上传的完整示例

我们可以将以上代码片段整合起来,展示一个完整的文件上传示例。用户通过前端表单选择文件,并上传到服务器。如果上传成功,服务器会输出相应的成功信息。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>文件上传示例</title>
</head>
<body>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" value="上传">
    </form>
</body>
</html>
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;

// 检查文件类型
$fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
if($fileType != "jpg" && $fileType != "png" && $fileType != "jpeg" && $fileType != "gif" ) {
    echo "只允许上传JPG、JPEG、PNG和GIF格式的文件";
    $uploadOk = 0;
}

// 检查文件大小
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "文件大小超过了限制";
    $uploadOk = 0;
}

// 如果上传不成功,输出错误信息;否则,将文件保存到指定目录中
if ($uploadOk == 0) {
    echo "上传失败";
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "文件" . basename($_FILES["fileToUpload"]["name"]) . "上传成功";
    } else {
        echo "上传过程出现错误";
    }
}
?>

文件下载

第一步:编写PHP后端处理下载请求的代码

在文件下载中,我们先编写PHP文件来处理下载请求。我们称之为“download.php”。在这个文件中,首先需要检查用户请求的文件是否存在,如果存在,直接向浏览器输出该文件内容。这里,我们利用PHP的header函数来实现。

$filePath = "path/to/file"; // 文件路径
if(file_exists($filePath)){
    header('Content-Description: File Transfer');
    header('Content-Disposition: attachment; filename="'.basename($filePath).'"');
    header('Content-Type: application/octet-stream');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filePath));
    ob_clean();
    flush();
    readfile($filePath);
    exit;
}

值得注意的是,我们使用了filesize函数来获取被下载文件的大小并设置Content-Length头信息,确保文件完整下载。同时,我们将输出缓存清理,以确保文件下载的安全性。

示例二:文件下载的完整示例

用户通过前端UI选择需要下载的文件,并发送请求到服务器。如果文件存在,服务器直接向用户返回该文件内容,并将文件下载到本地。以下是一个完整的文件下载示例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>文件下载示例</title>
</head>
<body>
    <a href="download.php?file=path/to/file">下载文件</a>
</body>
</html>
<?php
$filePath = "path/to/file";
if(file_exists($filePath)){
    header('Content-Description: File Transfer');
    header('Content-Disposition: attachment; filename="'.basename($filePath).'"');
    header('Content-Type: application/octet-stream');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filePath));
    ob_clean();
    flush();
    readfile($filePath);
    exit;
}else{
    echo "文件不存在";
}
?>

以上就是PHP实现文件上传和下载的示例代码的完整攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP实现文件上传和下载的示例代码 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 微信小程序 input表单与redio及下拉列表的使用实例

    我来为你详细讲解 “微信小程序 input表单与redio及下拉列表的使用实例”的完整攻略。 1. input表单的使用 下面是一个简单的 input 表单示例: <view class="form-item"> <view class="form-item-label">姓名</view…

    PHP 2023年5月30日
    00
  • php产生随机数的两种方法实例代码 输出随机IP

    下面是详细讲解“php产生随机数的两种方法实例代码 输出随机IP”的完整攻略: 一、产生随机数的两种方法 1. 使用rand()函数 PHP的rand()函数可以生成一个随机整数,使用方式如下: $rand_num = rand($min, $max); 其中$min和$max是可选的参数,分别表示随机数的最小值和最大值。如果不指定$min和$max,则默认…

    PHP 2023年5月26日
    00
  • php禁止某ip或ip地址段访问的方法

    当我们需要禁止某个IP或IP地址段访问我们的网站时,可以通过以下几种方式实现。 方法一:修改服务器配置文件 我们可以在服务器的配置文件中设置,禁止某个IP或IP地址段访问我们的网站。 第一步:登录服务器,打开服务器的配置文件。常见的服务器软件如Apache、Nginx等的配置文件路径如下: Apache:/etc/httpd/conf/httpd.confN…

    PHP 2023年5月23日
    00
  • php缓冲输出实例分析

    首先我们需要了解什么是缓冲输出。简而言之,缓冲输出是指先将输出的内容保存在缓存中,等到一定的条件满足后再进行输出。 在PHP中,我们可以使用 ob_start() 函数来开启缓冲区。一旦开启缓冲区,所有的输出内容都将保存在缓冲区中。我们可以使用 ob_get_contents() 函数来获取缓冲区中的内容,使用 ob_clean() 函数来清空缓冲区,使用 …

    PHP 2023年5月26日
    00
  • PHP实现简单日历类编写

    下面详细讲解一下“PHP实现简单日历类编写”的完整攻略。 1. 确定需求和功能 在开始编写代码之前,我们需要确定日历类的基本需求和功能,一般来说,一个简单的日历类至少需要实现以下功能: 显示当前月份的日历 支持翻到上一个月或下一个月 支持选择一个特定日期 2. 创建一个日历类 在PHP中,我们可以创建一个名为Calendar的类来实现上述的日历功能,代码如下…

    PHP 2023年5月27日
    00
  • phpstudy apache开启ssi使用详解

    PHPStudy+Apache开启SSI使用详解 SSI(Server Side Include)是一种服务器端的页面包含技术,可以在HTML页面中嵌入动态内容。在PHPStudy中,我们可以通过配置Apache服务器来开启SSI功能。 以下是PHPStudy+Apache开启SSI使用的详细步骤: 1. Apache配置文件 首先,我们需要修改Apache…

    PHP 2023年5月12日
    00
  • php数组函数序列之array_key_exists() – 查找数组键名是否存在

    PHP数组函数序列之array_key_exists() – 查找数组键名是否存在 array_key_exists()函数简介 array_key_exists()是PHP中用来判断一个数组中是否存在指定键名的函数,它的语法如下: bool array_key_exists ( mixed $key , array $array ) array_key_e…

    PHP 2023年5月26日
    00
  • php通过array_shift()函数移除数组第一个元素的方法

    当我们需要从PHP数组中移除第一个元素时,可以使用 array_shift() 函数。这个函数会将数组中的第一个元素移除并返回它,同时其他元素的键名会被重新索引。 下面是使用 array_shift() 函数移除数组第一个元素的步骤: 步骤1:定义数组 首先定义一个需要操作的数组,例如: <?php $my_array = array("ap…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部