如何在PHP文件托管项目中列出目录文件的名称、MIME类型、上传日期等信息?
解决PHP获取文件详细信息的方案
首先,scandir会返回.和..这两个特殊目录,第一步要先过滤掉它们。接下来可以用PHP内置函数获取你需要的文件信息:
- 文件名:直接使用遍历到的文件名(注意拼接完整文件路径)
- MIME类型:用
finfo类,比旧的mime_content_type更可靠、兼容性更好 - 上传/修改日期:用
filemtime获取文件最后修改时间(如果文件上传后未被修改,这个时间就等同于上传时间),再用date格式化输出
完整代码示例
<?php $uploadDir = 'uploadedfiles'; // 获取目录文件并过滤特殊目录 $files = array_diff(scandir($uploadDir), ['.', '..']); // 初始化finfo对象用于解析MIME类型 $finfo = new finfo(FILEINFO_MIME_TYPE); // 用表格展示文件信息 echo '<table border="1">'; echo '<tr><th>文件名</th><th>MIME类型</th><th>上传/修改日期</th></tr>'; foreach ($files as $file) { $filePath = $uploadDir . DIRECTORY_SEPARATOR . $file; // 跳过子目录(如果存在) if (is_dir($filePath)) continue; $mimeType = $finfo->file($filePath); $formattedTime = date('Y-m-d H:i:s', filemtime($filePath)); echo '<tr>'; echo '<td>' . htmlspecialchars($file) . '</td>'; echo '<td>' . htmlspecialchars($mimeType) . '</td>'; echo '<td>' . $formattedTime . '</td>'; echo '</tr>'; } echo '</table>'; ?>
关键细节说明
array_diff:快速过滤掉scandir返回的.(当前目录)和..(上级目录)htmlspecialchars:避免文件名中的特殊字符(如<、>)破坏HTML结构,提升页面安全性DIRECTORY_SEPARATOR:自动适配Windows/Linux的路径分隔符,避免跨系统路径错误
内容的提问来源于stack exchange,提问作者Nick Smith
相关产品推荐
相关产品推荐

