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

以下是详细的“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实现文件上传与下载实例与总结

基础教程推荐