如何从文件夹内部向文件中获取文件大小和扩展名

时间:2016-11-18 10:45:08

标签: php scandir

我正在寻找一种方法来获取文件夹中的文件和文件夹数组,其大小和扩展名如下:

$files = array(
  array("foo","txt",18),  # this is foo.txt with 18 bytes
  array("bar","img",513), # this is bar.ing with 513 bytes
  array("baz","",345),    # this is a Folder with 345 bytes inside
);

如何解决这个问题?我尝试过类似的东西:

<?php
  $path = /user";
  $files = array_diff(scandir($path), array('.', '..'));
  #print_r($files);
?>

3 个答案:

答案 0 :(得分:2)

您可以执行以下操作来获取目录中每个文件的数据。

foreach (new DirectoryIterator('/var/www') as $file) {
    if($file->isDot()) continue;

    $fileinfo[] = [
        $file->getFilename(),
        $file->getExtension(),
        $file->getSize()
    ];

}

print_r($fileinfo);

请记住,目录只是指向文件列表的指针,因此如果要包含该目录的大小,也可以使用递归函数,在计算之前执行$file->isDir()检查大小。

function getDirContentSize($path){
    $size = 0;
    foreach (new DirectoryIterator($path) as $file){
        if($file->isDot()) continue;
        $size += ($file->isDir()) ? getDirContentSize("$path/$file") : $file->getSize();
    }

    return $size;
}

答案 1 :(得分:0)

尝试这样的事情

 $path = "/user";
 $filepath = array_diff(scandir($path), array('.', '..'));
 $files = array();

 foreach($filepath as $k=>$v) {
   $files[] =$v;
   $files[] = filesize($v);
   $files[] = pathinfo($v, PATHINFO_EXTENSION);
}

答案 2 :(得分:0)

Filepathfilesize将为您提供所需的信息。

试试这个:

protected static $firstDayThisYear = Carbon::create(date('Y'), 1, 1, 0);
protected static $lastDayThisYear = Carbon::create(date('Y'), 12, 31, 0);