min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

PHP 再帰関数その2

f:id:min117:20210101182512p:plain

 

再帰的にディレクトリを読みたいお正月。

min117.hatenablog.com

 

まんまの例があった。

xtech.nikkei.com

 

とりあえず写経。

$ vim my_recursive03.php

f:id:min117:20210101182118p:plain

42行目で、自分の環境にあった適当なフォルダパスを(絶対パスで)指定してやる。

 

速攻動かす。

f:id:min117:20210101182556p:plain
よし。

 

しかし。ファイルサイズなんか見れても何も実用的じゃない。タメになる記事だけど、実用性がないんじゃ使えない。

 

せめてファイルの一覧を再帰的に出す(bashで言えば tree的な)な機能だったらよかったのに。次回実装する。

 

コピペ用

<?php

 

// nikkei XTECK

// 54. 再帰関数を使ってみよう

// https://xtech.nikkei.com/it/article/COLUMN/20070827/280408/

 

// 引数$path にはディレクトリorファイルの絶対パスを指定する。

function getDirSize($path) {

    $toral_size = 0;

 

    //指定したのがファイルだった場合はサイズを返して終了

    if (is_file($path)) {

        return filesize($path);

    } elseif (is_dir($path)) {

        $basename = basename($path);

 

        // カレントディレクトリ(.)or

        // 上位階層ディレクトリ(..)の場合はここで終了

        if ($basename == '.' || $basename == '..') {

            return 0;

        }

 

        // ディレクトリ内のファイル一覧を入手。

        $file_list = scandir($path);

 

        foreach ($file_list as $file) {

            // ディレクトリ内のファイルを引数にして、自分自身を呼び出す再帰

            $total_size += getDirSize($path . '/' . $file);

        }

        return $total_size;

    } else {

        return 0;

    }

}

 

// カレントフォルダの確認

echo '------------------------<br>';

echo getcwd() . '<br>';

echo '------------------------<br>';

 

//関数実行

echo getDirsize('/media/WD30EZRX/PT3/test_pdf2jpg');