<?php
// 安全配置:允许下载的文件类型(白名单)
$allowed_extensions = ['pdf', 'doc', 'docx', 'txt', 'zip', 'jpg', 'png', 'mp3', 'mp4'];
// 获取请求的文件名
$filename = isset($_GET['file']) ? $_GET['file'] : '';
// 安全检查:防止目录遍历攻击
if (strpos($filename, '..') !== false || strpos($filename, '/') !== false || strpos($filename, '\\') !== false) {
    die('非法文件路径');
}
// 检查文件扩展名
$extension = pathinfo($filename, PATHINFO_EXTENSION);
if (!in_array(strtolower($extension), $allowed_extensions)) {
    die('不支持的文件类型');
}
// 拼接完整文件路径(根据实际目录结构调整)
$filepath = './downloads/' . $filename;
// 检查文件是否存在
if (!file_exists($filepath)) {
    die('文件不存在');
}
// 检查文件是否可读
if (!is_readable($filepath)) {
    die('文件不可读');
}
// 设置HTTP头信息
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
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;
?>

使用说明:

  1. 将此代码保存为 download.php 并上传到服务器
  2. 创建一个 downloads 文件夹(与脚本同级)并放入可下载的文件
  3. 通过以下URL访问下载功能:
    http://yourdomain.com/download.php?file=filename.ext

安全特性:

  1. 文件类型白名单:只允许下载指定扩展名的文件
  2. 路径安全检查:防止目录遍历攻击(如 )
  3. 文件存在性检查:避免下载不存在的文件
  4. 权限检查:确保文件可读
  5. MIME类型设置:强制浏览器下载而非预览

重要安全提示:

  1. 存储位置:将 downloads 目录放在Web根目录外,或通过 .htaccess 限制访问
  2. 文件验证:在生产环境中应添加更严格的文件名验证
  3. 访问控制:建议添加用户认证机制(如登录验证)
  4. 速率限制:防止恶意用户大量下载消耗服务器资源
  5. 日志记录:记录下载行为以便审计

增强版建议(需额外实现):

// 增强版示例(伪代码)
session_start();
if (!isset($_SESSION['authenticated']) || !$_SESSION['authenticated']) {
    header('Location: login.php');
    exit;
}
// 添加下载次数限制
if (downloadCountExceeded($filename)) {
    die('下载次数已达上限');
}
// 添加病毒扫描
if (scanFileForMalware($filepath)) {
    die('文件包含潜在威胁');
}

注意事项:

  1. 确保PHP进程有权限读取目标文件
  2. 大文件下载时考虑使用流式传输
  3. 在Nginx/Apache中配置适当的超时时间
  4. 定期清理下载目录中的旧文件

此代码提供了基本功能,生产环境使用前应根据具体需求进行安全加固和功能扩展。

php文件在线下载源码

php文件在线下载源码

php文件在线下载源码

相关内容

回顶部