【问题标题】:PHP filesize for files in directory not shown未显示目录中文件的 PHP 文件大小
【发布时间】:2021-03-30 02:47:30
【问题描述】:

我想显示表中目录中每个文件的文件大小。 但是无法显示文件的大小。

这是我使用的代码:

$dir    = 'audio';

$files = array_slice(scandir('audio'), 2);
sort($files, SORT_NATURAL | SORT_FLAG_CASE);

$size = (glob("audio/*.mp3"));
        
echo "<table border><tr><th>Dateiname</th><th>Dateingröße</th></tr>";
    foreach ($files as $file) {
        echo 
        "<tr>
            <td>
                <a href='audio/" . $file . "'target='_blank'>" . $file . "</a>
            </td>
            <td>" . filesize($size) . " Byte
            </td>
        </tr>";
    }
echo "</table>";

谁能告诉我如何解决这个问题,所以大小显示在第二个表格列中?

【问题讨论】:

  • 不应该是filesize($file)吗?
  • $size 是数组,没有filesize 值。
  • @NigelRen,这行不通,因为filesize() 需要位于已扫描的audio 目录中的文件的完整路径。
  • 请比“无法显示”更具体地说明失败的原因。你有错误吗?它是什么?你会得到意想不到的结果吗?那是什么?

标签: php foreach glob filesize


【解决方案1】:

您似乎对每个函数实际执行和返回的内容有点困惑。

这是代码的工作版本,我删除了一些部分,因为它们在做同样的事情。当您循环遍历数组 $files 时,您在循环中使用了另一个数组 $size,该函数只接受字符串 filesize()

<?php

$files = (glob("audio/*.mp3"));
sort($files, SORT_NATURAL | SORT_FLAG_CASE);

echo "<table border><tr><th>Dateiname</th><th>Dateingröße</th></tr>";
foreach ($files as $file) {
    echo
        "<tr>
            <td>
                <a href='".$file."'target='_blank'>".basename($file)."</a>
            </td>
            <td>".filesize($file)." Byte
            </td>
        </tr>";
}
echo "</table>";

【讨论】:

    【解决方案2】:

    文档会告诉您glob() 返回一个array,而filesize() 需要一个string,更准确地说,是执行stat() 调用的文件的名称。

    您正在从相对目录(“音频”)循环文件列表,而scandir() 将返回文件名。要获取scandir() 返回的每个文件的文件大小,您必须将(相对)路径传递给文件。也就是说,包括它的父目录。

    改变这个:

    filesize($size)

    到这里:

    filesize("audio/$file")

    它应该可以工作(未经测试)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-20
      • 2023-04-02
      • 2017-01-24
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 2016-10-23
      相关资源
      最近更新 更多