PHP无法加载特殊文件求助:如何读取全类型文件至表格
问题解决方法
核心原因
你遇到的问题是未使用完整文件路径:scandir()返回的是目标目录下的文件名/文件夹名,但file_exists()、filesize()等函数默认在当前PHP脚本的工作目录下查找文件,而非你指定的$path目录,所以会找不到大部分文件;跳过file_exists()后,同样因为路径错误触发stat failed错误。
具体修复步骤
- 拼接完整文件路径:将
$path与scandir()返回的文件名拼接成完整路径,使用DIRECTORY_SEPARATOR代替硬编码的反斜杠,兼容Windows和Linux系统。 - 过滤特殊目录:
scandir()会返回.(当前目录)和..(上级目录),需要跳过这两个无效条目。 - 用完整路径调用文件函数:所有文件操作函数(
file_exists、is_dir、filesize、filemtime)都使用拼接后的完整路径作为参数。
修正后的代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <table border="1" cellpadding="15" cellspacing="10" style="text-align: center; margin: auto; border-collapse: collapse"> <tr> <td colspan="6"> <button>Back</button> </td> </tr> <tr class="header"> <td>File name</td> <td>Type</td> <td>Last modified</td> <td>File size</td> </tr> <?php $path = $_SERVER["DOCUMENT_ROOT"] . DIRECTORY_SEPARATOR . "Lab07" . DIRECTORY_SEPARATOR . "documents"; // 遍历目录,过滤掉.和.. foreach(scandir($path) as $key => $value) { if($value === '.' || $value === '..') continue; $fullPath = $path . DIRECTORY_SEPARATOR . $value; if(file_exists($fullPath)) { $getType = is_dir($fullPath) ? "Folder" : "File"; // 文件夹的filesize在Windows下返回0,这里做特殊处理 $getSize = is_dir($fullPath) ? "-" : round(filesize($fullPath) / 1024,4) . 'KB'; $getTime = date("d F Y", filemtime($fullPath)) ?? "-"; echo " <tr> <td><a href='#'>$value</a></td> <td>$getType</td> <td>$getTime</td> <td>$getSize</td> </tr> "; } } ?> </table> </body> </html>
额外说明
- 使用
DIRECTORY_SEPARATOR代替硬编码的\,避免在不同操作系统下出现路径分隔符错误。 - 针对文件夹的
filesize():Windows系统中文件夹大小会返回0,代码中对文件夹大小显示为-,可根据需求调整显示内容。
内容的提问来源于stack exchange,提问作者Znone
相关产品推荐
相关产品推荐

