You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP无法加载特殊文件求助:如何读取全类型文件至表格

问题解决方法

核心原因

你遇到的问题是未使用完整文件路径:scandir()返回的是目标目录下的文件名/文件夹名,但file_exists()、filesize()等函数默认在当前PHP脚本的工作目录下查找文件,而非你指定的$path目录,所以会找不到大部分文件;跳过file_exists()后,同样因为路径错误触发stat failed错误。

具体修复步骤

  1. 拼接完整文件路径:将$path与scandir()返回的文件名拼接成完整路径,使用DIRECTORY_SEPARATOR代替硬编码的反斜杠,兼容Windows和Linux系统。
  2. 过滤特殊目录:scandir()会返回.(当前目录)和..(上级目录),需要跳过这两个无效条目。
  3. 用完整路径调用文件函数:所有文件操作函数(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:50:23