由于filesize,列出文件夹中的文件会导致stat错误

时间:2016-06-09 12:04:37

标签: php

我经历了很多Q& A但没有找到我的解决方案。

我知道有一个功能GLOB,但我没有使用它,因为我看到它的灵活性不大。

我在做什么:

我正在尝试列出文件夹中的文件并显示其大小。

问题

它给出了一个统计错误,但显示了最后一个文件的大小。

PHP

<?php
 $thelist = '';
 $count = 0;
 $filelist = array();
 if ($handle = opendir('./storage')) {
   while (false !== ($file = readdir($handle))) {
          if ($file != "." && $file != "..") {
              $filelist[] = $file;
            /*$thelist .= '<li><a href="'.$file.'">'.$file.'</a></li>';*/
            $count = $count+1;
          }
       }
       closedir($handle);
}

for($index=0; $index<$count; $index++){
    $name = $filelist[$index];
    $size = number_format(filesize($filelist[$index]));
    $thelist .= '<li><a href="'.$name.'">'.$name.'</a>'.$size.'</li>';
}
?>

HTML

<div id="list">
    <?php
    if($count<1){
        echo '<div id="empty_storage"><img src="icon.png"><br>Its lonely here!</div>';
    }
    else{
    ?>
        <ul>
        <?php echo $thelist; ?>
        </ul>
    <?php
    }
    ?>
</div>

注意

我在WAMP上尝试这个。

更新

我的转储看起来像这样

array (size=3)
  0 => string 'icon (2).png' (length=12)
  1 => string 'icon.png' (length=8)
  2 => string 'new.png' (length=7)

1 个答案:

答案 0 :(得分:2)

在我的情况下,您的错误重现为:

  

PHP警告:filesize():第18行/home/bnowakowski/storage/test.php中testfile的stat失败   PHP堆栈跟踪:   PHP 1. {main}()/ home /bnowakowski/storage/test.php:0   PHP 2. filesize()/home/bnowakowski/storage/test.php:18   PHP警告:filesize():第18行/home/bnowakowski/storage/test.php中testdir的stat失败   PHP堆栈跟踪:   PHP 1. {main}()/ home /bnowakowski/storage/test.php:0   PHP 2. filesize()/home/bnowakowski/storage/test.php:18

结果:

<li><a href="testfile">testfile</a>0</li>
<li><a href="testdir">testdir</a>0</li>

我必须做的就是改变它所要求的文件路径:

$name = $filelist[$index];
$size = number_format(filesize('./storage/' . $name));

使其在正确的位置询问文件的大小。它甚至可以用于符号链接或目录。