扫描目录的文件大小 - PHP

时间:2012-09-26 13:02:01

标签: php

我想读取一个目录并获取每个文件的文件大小。 我尝试了以下代码:

$downloads = array_slice(scandir("downloads"),2);
$size = array();
foreach($downloads as $value) {
    $size = filesize("downloads/".$value);
    echo($size); //at this point the echo works correctly
}
echo($size); //shows the filesize of the first file
echo($size[1]) //nothing happens
foreach($size as $value) {
    echo($value); //nothing happens
    echo($size); //nothing happens
}

这就是为什么我现在对数组和循环的工作感到困惑。 将文件名及其相应的文件大小保存在一个数组中也是很好的。

感谢您的建议。

3 个答案:

答案 0 :(得分:2)

你做错了。你在foreach中覆盖了数组。

foreach($downloads as $value) {
    $size = filesize("downloads/".$value);
    // $size is not an array anymore, just an int
    echo($size); //at this point the echo works correctly
}

这应该是正确的:

foreach($downloads as $value) {
    $size[] = filesize("downloads/".$value);
}

完整代码:

$downloads = array_slice(scandir("downloads"),2);
$size = array();

foreach($downloads as $value) {
    $size[] = filesize("downloads/".$value);
}

foreach($size as $value) {
    echo($value).'<br/>';
}

答案 1 :(得分:1)

您不断覆盖$size变量,这就是每次执行foreach时都不会执行的原因。

您应该创建一个$size数组并相应地存储所有内容:

$size = array();
foreach ( $downloads as $file ) {
    $size["downloads/".$file] = filesize("downloads/".$file);
}

foreach ( $size as $fname => $fsize) {
    echo "Size of " .$fname. " is " .$fsize. " bytes.";
}

答案 2 :(得分:0)

分配值时:

foreach($下载为$ value){
       $ size = filesize(“downloads /".$ value);
       回波($大小); //此时回声正常工作
   }

您需要将其添加到“尺寸”的特定记录

$size[ $n ] = filesize( ... );