PHP可以通过扫描服务器目录并生成动态HTML页面来实现在线文件浏览功能。以下是具体实现方法和代码示例:
核心实现步骤获取目录内容
使用scandir()函数扫描指定目录
参数.表示当前目录,可替换为绝对路径如/var/www/files
过滤文件列表
通过is_file()函数筛选出普通文件(排除.和..目录项)
可扩展支持特定文件类型过滤
生成交互界面
创建带链接的文件列表
为每个文件添加查看/下载操作
安全增强
限制可访问目录
防止目录遍历攻击
完整代码示例<?php// 配置安全参数$allowed_dirs = ['/var/www/files', './public_files']; // 白名单目录$target_dir = './'; // 默认目录// 安全验证if (isset($_GET['dir']) && in_array($_GET['dir'], $allowed_dirs)) { $target_dir = $_GET['dir'];}// 获取并过滤文件列表$items = array_diff(scandir($target_dir), ['.', '..']);$files = array_filter($items, function($item) use ($target_dir) { return is_file($target_dir . '/' . $item);});// 生成HTML界面?><!DOCTYPE html><html><head> <title>PHP文件浏览器</title> <style> body { font-family: Arial, sans-serif; margin: 20px; } .file-item { padding: 8px; border-bottom: 1px solid #eee; } .file-item:hover { background-color: #f5f5f5; } .action-btn { margin-left: 10px; font-size: 0.8em; } </style></head><body> <h1>文件浏览器 (<?= htmlspecialchars($target_dir) ?>)</h1> <?php if (!empty($files)): ?> <ul style="list-style: none; padding: 0;"> <?php foreach ($files as $file): ?> <li class="file-item"> <?= htmlspecialchars($file) ?> <div class="actions"> <a class="action-btn" href="<?= $target_dir.'/'.$file ?>" target="_blank">查看</a> <a class="action-btn" href="download.php?file=<?= urlencode($file) ?>">下载</a> </div> </li> <?php endforeach; ?> </ul> <?php else: ?> <p>当前目录没有可显示的文件</p> <?php endif; ?></body></html>下载功能实现(download.php)<?phpif (isset($_GET['file']) && !empty($_GET['file'])) { $file = basename($_GET['file']); // 防止目录遍历 $filepath = './' . $file; if (file_exists($filepath) && is_file($filepath)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'. $file .'"'); header('Content-Length: ' . filesize($filepath)); readfile($filepath); exit; }}header("HTTP/1.0 404 Not Found");echo "文件不存在";?>安全增强建议目录限制
使用目录白名单机制
禁止访问系统敏感目录
输入验证
使用basename()处理文件名
验证文件是否存在
权限控制
设置文件目录不可执行权限
禁用PHP执行(通过.htaccess)
错误处理
添加文件存在性检查
记录非法访问尝试
扩展功能方向- 添加文件预览(图片/文本)
- 实现面包屑导航
- 添加文件搜索功能
- 支持多语言界面
- 添加文件上传功能(需额外安全措施)
此实现提供了基础的文件浏览功能,可根据实际需求进行扩展。注意在生产环境中务必加强安全措施,特别是对用户输入的验证和文件操作权限的控制。