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

yizhihongxing

以下是详细的“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实现遍历文件夹的方法汇总

    为了实现遍历文件夹的功能,可以使用PHP提供的目录迭代器(DirectoryIterator)、文件迭代器(FilesystemIterator)和递归函数等方式。 目录迭代器(DirectoryIterator) DirectoryIterator 的基本使用 DirectoryIterator 可以基于指定的目录路径或文件夹资源句柄来创建,然后通过对其进…

    PHP 2023年5月26日
    00
  • Laravel操作redis和缓存操作详解

    下面是“Laravel操作redis和缓存操作详解”的完整使用攻略,包括Laravel操作redis的基本原理、缓存操作的详解和两个示例说明。 Laravel操作redis的基本原理 Laravel是一款流行的PHP框架,它提供了对redis的支持。Laravel操作redis的基本原理是:通过redis扩展连接redis服务器,然后使用redis提供的AP…

    PHP 2023年5月12日
    00
  • PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例

    下面是关于“PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例”的完整攻略: 概述 在PHP开发中,我们通常需要进行字符串转义和还原,以保证输入输出的数据准确性。PHP中提供了两个函数addslashes()和stripslashes(),分别用于实现字符串转义和还原操作。 addslashes()函数 addslas…

    PHP 2023年5月26日
    00
  • 微信小程序实现上传多张图片、删除图片

    实现上传多张图片、删除图片的微信小程序攻略如下: 上传多张图片 1. 引入wx.chooseImage API 在小程序页面中,使用wx.chooseImage API即可调用微信客户端的图片选择功能,将选择的图片上传到服务器。 示例代码: wx.chooseImage({ success: function (res) { var tempFilePath…

    PHP 2023年5月23日
    00
  • 戏说编码发展史

    当讲述“戏说编码发展史”的攻略时,我们可以按照以下流程进行: 1. 确定主题 首先,我们需要明确“戏说编码发展史”的主题,以便更好地整理相关内容。例如,我们可以将主题定义为“戏说编码的起源、发展和应用”。 2. 收集资料 获取和整理相关资料与主题密切相关。这些资料可以是历史、技术、文化、实际应用或其他方面。这样做有助于我们更好地理解和解释有关“戏说编码”的内…

    PHP 2023年5月26日
    00
  • php列出一个目录下的所有文件的代码

    PHP可以通过scandir()函数列出指定目录下的所有文件和文件夹。下面是PHP列出一个目录下的所有文件的代码。 首先,需要确定要列出哪个目录下的文件,并将该目录的路径存储在一个字符串变量中: $dir = ‘/path/to/directory’; 接下来,使用scandir()函数获取目录中的所有文件和文件夹: $files = scandir($di…

    PHP 2023年5月26日
    00
  • 深入浅析php中sprintf与printf函数的用法及区别

    深入浅析php中sprintf与printf函数的用法及区别 简介 在PHP中,我们经常需要格式化输出数据。可以使用printf()和sprintf()来格式化数据并输出(或存储)结果。这两个函数在功能上十分相似,但使用方法略有不同,可以满足不同的需求。 函数区别 sprintf()函数的返回值为格式化后的字符串,而printf()函数的返回值为输出的字符数…

    PHP 2023年5月26日
    00
  • PHP转换文本框内容为HTML格式的方法

    如果你想要将一个文本框中输入的内容,以HTML格式渲染出来,可以通过使用PHP的htmlspecialchars函数。下面是这个过程的完整攻略: 步骤一:获取文本框内容 首先,你需要使用PHP来获取文本框中的输入内容。如果你使用的是POST方式提交表单,那么可以通过$_POST[“textarea_name”]来获取文本框的内容。例如,如果你的文本框的名称是…

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