PHP实现文件上传与下载实例与总结

以下是详细的“PHP实现文件上传与下载实例与总结”的攻略:

PHP实现文件上传

1. HTML表单

文件上传需要通过HTML表单来完成,表单中需要包含 enctype="multipart/form-data" 属性。

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

2. PHP处理

在PHP脚本中,需要使用 $_FILES 变量来获取文件上传信息。

// 上传文件保存目录
$uploadDir = './uploads/';

// 获取上传的文件信息
$file = $_FILES['file'];

// 处理上传
if ($file['error'] === UPLOAD_ERR_OK) { // 上传成功
  // 移动文件到指定目录下,并生成新的文件名
  $newFileName = $uploadDir . uniqid() . '.' . pathinfo($file['name'], PATHINFO_EXTENSION);
  move_uploaded_file($file['tmp_name'], $newFileName);

  // 输出上传成功信息
  echo '文件上传成功';
} else { // 上传失败
  echo '上传失败:' . $file['error'];
}

3. 示例说明

下面是一个完整的上传示例,其中还包含了文件类型判断和文件大小限制。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>文件上传</title>
</head>
<body>
  <h1>文件上传</h1>
  <form method="POST" action="./upload.php" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上传">
  </form>
</body>
</html>
// 允许上传的文件类型
$allowTypes = ['jpg', 'jpeg', 'png', 'gif'];

// 允许上传的文件大小,单位:字节
$allowSize = 1024 * 1024 * 2; // 2 MB

// 上传文件保存目录
$uploadDir = './uploads/';

// 获取上传的文件信息
$file = $_FILES['file'];

// 判断文件类型和文件大小
$fileExt = pathinfo($file['name'], PATHINFO_EXTENSION);
$fileSize = $file['size'];
if (!in_array($fileExt, $allowTypes)) { // 文件类型不符
  die('文件类型不允许');
} else if ($fileSize > $allowSize) { // 文件大小超出限制
  die('文件大小超出限制');
}

// 处理上传
if ($file['error'] === UPLOAD_ERR_OK) { // 上传成功
  // 移动文件到指定目录下,并生成新的文件名
  $newFileName = $uploadDir . uniqid() . '.' . $fileExt;
  move_uploaded_file($file['tmp_name'], $newFileName);

  // 输出上传成功信息
  echo '文件上传成功';
} else { // 上传失败
  echo '上传失败:' . $file['error'];
}

PHP实现文件下载

1. PHP处理

文件下载需要使用 header 函数设置响应头信息,指定要下载的文件类型和文件名,并通过 readfile 函数将文件内容输出到客户端。

// 要下载的文件路径
$filePath = './downloads/file.pdf';

// 获取要下载的文件名
$fileName = basename($filePath);

// 设置响应头信息,指定要下载的文件类型和文件名
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $fileName . '"');

// 输出文件内容到客户端
readfile($filePath);

2. 示例说明

以下是一个完整的文件下载示例,其中还包含了文件是否存在和文件权限的检查。

// 要下载的文件路径
$filePath = './downloads/file.pdf';

// 判断文件是否存在,并检查文件权限
if (!file_exists($filePath)) {
  die('文件不存在');
} else if (!is_readable($filePath)) {
  die('文件不可读');
}

// 获取要下载的文件名
$fileName = basename($filePath);

// 设置响应头信息,指定要下载的文件类型和文件名
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $fileName . '"');

// 输出文件内容到客户端
readfile($filePath);

总结

  • 文件上传需要使用HTML表单,并在PHP脚本中使用 $_FILES 变量获取文件上传信息,然后通过 move_uploaded_file 函数将文件保存到目标文件夹。

  • 文件下载需要使用 header 函数设置响应头信息,指定要下载的文件类型和文件名,并通过 readfile 函数将文件内容输出到客户端。

  • 在文件上传和下载的过程中,需要注意文件类型、文件大小和文件权限等问题,以及对与文件名保留的安全规范。

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

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

相关文章

  • php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)

    在PHP中,可以使用exec和system函数来调用系统命令,执行一些shell脚本或者其他系统命令。但是需要注意,这些函数的使用可能会带来安全问题。下面是一个完整攻略,讲解如何使用exec和system函数,并且避免可能的安全问题。 什么是exec和system函数 exec和system是PHP中两个可以执行系统命令的函数。这两个函数在使用方式上有些不同…

    PHP 2023年5月30日
    00
  • php中数字、字符与对象判断函数用法实例

    “php中数字、字符与对象判断函数用法实例”这个主题,我会从以下几个方面进行讲解: PHP中数字类型判断 在PHP中,要判断一个变量是否是数字类型,可以使用is_numeric()函数。示例如下: $num = 123; if (is_numeric($num)) { echo "这是一个数字"; } else { echo "…

    PHP 2023年5月26日
    00
  • php数组去重实例及分析

    我来为你详细讲解“PHP数组去重实例及分析”的攻略。以下是完整的步骤和示例说明。 一、什么是数组去重 在 PHP 中,数组去重就是从一个数组中删除重复的元素。有时候我们会从不同的渠道获取到相同的数据,这时候如果需要对数据进行统计或者其他操作,就需要去除重复的元素,以免影响结果的准确性。 二、如何实现数组去重 方法一、使用 array_unique 函数 PH…

    PHP 2023年5月26日
    00
  • php创建桌面快捷方式实现方法

    下面我将为您详细讲解“PHP创建桌面快捷方式实现方法”的完整攻略。 1. 获取桌面路径 一般情况下,桌面的路径可以在Windows系统注册表中获取。代码如下: /** * 获取桌面路径 * * @return string or null */ function getDesktopPath() { $reg_path = ‘SOFTWARE\\Micros…

    PHP 2023年5月23日
    00
  • 使用SMB共享来绕过php远程文件包含的限制执行RFI的利用

    使用SMB共享来绕过PHP远程文件包含(RFI)的限制执行是一种常见的攻击技术,也被称为SMB马(SMB-backdoor)。在这种攻击中,攻击者会通过构造恶意请求来将恶意文件上传到目标服务器上,然后将其包含到PHP代码中以达到对服务器的远程控制。 以下是完整的攻略步骤: 寻找具有远程文件包含漏洞的目标站点。 准备一个具有有效文件路径的可上传文件(例如PHP…

    PHP 2023年5月26日
    00
  • php判断数组是否为空的实例方法

    PHP的数组表示一个存储多个值的容器,有时我们需要判断一个数组是否为空。本文将分享三种PHP判断数组是否为空的实例方法。 使用empty()函数判断数组是否为空 empty()函数在PHP中用于检查变量是否为空或不存在。如果一个变量存在且不为空,则返回false,反之返回true。使用empty()函数判断数组是否为空非常简单。只需要将要判断的变量放在函数的…

    PHP 2023年5月26日
    00
  • php编写一个简单的路由类

    下面是“PHP编写一个简单的路由类”的完整攻略: 什么是路由 路由是Web开发中必不可少的一部分,它是指根据不同的URL请求,将请求转发到不同的处理程序上。Web应用程序通常由多个页面和功能组成,每一个页面和功能都有自己的URL。而路由的作用就是将这些URL和页面或功能进行映射。 设计路由类 我们可以通过PHP类来实现路由功能,下面是一个简单的路由类的设计:…

    PHP 2023年5月23日
    00
  • PHP中IP地址与整型数字互相转换详解

    PHP中IP地址与整型数字互相转换是一个常用的操作,在网络编程和服务器管理中都有广泛的应用。在本文中,我们将详细讲解如何进行IP地址与整型数字的互相转换,并提供两个示例来说明这个过程。 IP地址和整型数字的定义 IP地址是一个32位的二进制数,用于标识网络中的设备。通常采用分四段,每段用十进制表示,如”192.168.1.1″。 整型数字是一个由32位二进制…

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