为什么PHP filesize()函数不起作用?

时间:2011-02-23 03:13:56

标签: php

我注意到当我尝试使用如下路径列出目录内容时,filesize不起作用:

../

例如,这有效:

if ($handle = opendir('./')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {

            echo "File Name: $file | File Size: ". filesize($file)."<br />";            

        }
    }
    closedir($handle);
}

但这不是:

if ($handle = opendir('../')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {

            echo "File Name: $file | File Size: ". filesize($file)."<br />";            

        }
    }
    closedir($handle);
}

在最后一个示例中,文件名列出正常但不是获取文件大小,而是出现此错误:

Warning: filesize() [function.filesize]: stat failed for dynamic.php in C:\xampp\htdocs\app_file_manager\panel\index.php on line 65

有没有办法让第二个例子起作用?

3 个答案:

答案 0 :(得分:6)

filesize($file)失败,因为$file是父目录中而不是当前目录中存在的文件的名称。

您需要在$file前加../

答案 1 :(得分:0)

为什么不定义类似$basepath$downloads文件夹路径的变量,并将文件名附加到该变量并使用filesize()。请务必避免./../

$downloads = "www/base/downloads"; 
$filepath = $downloads."/".$filename;
filesize($filepath)

这应该可以正常工作。

答案 2 :(得分:0)

此外,问题可能出在:

  • 如果文件损坏(文件上传者发生[function.filesize]: stat failed错误最多)
  • 在Linux 32位中,此错误将用于大于2GB的文件