【PHP】これで分かる関数! – ファイル情報取得その2 –

PHP

更新履歴

更新日更新者更新内容
2021/8/24JJI・サンプルプログラムの実行結果に画面の画像を追加

はじめに

この記事で載せているサンプルプログラムは次の記事で紹介する関数を使用している場合があります。

ファイルパスの取得

ファイルパスの取得について次の内容についてサンプルプログラムで紹介します。

  • 自分のファイル名
  • 親ディレクトリ名
  • ファイル名のみ
  • 絶対パス

サンプルプログラムでは次の定数、関数を使用します。

  • __DIR__、__FILE__
  • basename()、dirname()、realpath()

サンプルプログラム

ファイルパスを取得するサンプルプログラムです。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // 共通ライブラリの読み込み
    require_once __DIR__ . "../../../lib/sample_common.php";

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】ファイル情報の取得、ファイル名、ディレクトリ名<br>\n";

    echo "自分のファイル名:" . __FILE__ . ":<br>\n";
    echo "自分の親ディレクトリ名:" . dirname(__FILE__) . ":<br>\n";
    echo "ファイル名のみ:" . basename(__FILE__) . ":<br>\n";
    echo "ファイル名(絶対パス):" . realpath("data/sample01.txt") . ":<br>\n";
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_08_34.php<br>
【PHP】ファイル情報の取得、ファイル名、ディレクトリ名<br>
自分のファイル名:C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\sample02_08_34.php:<br>
自分の親ディレクトリ名:C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4:<br>
ファイル名のみ:sample02_08_34.php:<br>
ファイル名(絶対パス):C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sample01.txt:<br>

ファイル一覧情報の取得

ファイル一覧情報を取得する方法として次の内容についてサンプルプログラムで紹介します。

  • OSコマンドを使用する方法
  • scandir()関数を使用する方法

OSコマンドを使用するサンプルプログラム

OSコマンドを使用してファイル一覧情報を取得するサンプルプログラムです。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // 共通ライブラリの読み込み
    require_once __DIR__ . "../../../lib/sample_common.php";

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】ファイル情報一覧の取得<br>\n";

    $func = function($i, $key, $val) {
        echo mb_convert_encoding($val, "UTF-8", "SJIS") . "<br>\n";
    };

    $dirname = "data";

    echo "OSコマンドを使用したファイル情報の取得<br>\n";
    if(substr(PHP_OS,0, 3) === "WIN") {
        $cmd = "dir /B /S " . conv_path($dirname);
        exec_win_ucmd($cmd, true, $func);
    }
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_08_35.php<br>
【PHP】ファイル情報一覧の取得<br>
OSコマンドを使用したファイル情報の取得<br>
dir /B /S data<br>
C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sample01.txt<br>
C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sub01<br>
C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sub02<br>
C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sub01\sample02.txt<br>
C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sub01\subsub01<br>
C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sub01\subsub01\subsubsub01<br>
C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sub01\subsub01\subsubsub02<br>
C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sub01\subsub01\subsubsub01\sample03.txt<br>

scandir()関数を使用するサンプルプログラム

scandir()関数を使用してファイル一覧情報を取得するサンプルプログラムです。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // 共通ライブラリの読み込み
    require_once __DIR__ . "../../../lib/sample_common.php";

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】ファイル情報一覧の取得<br>\n";

    $dirname = "data";

    echo "関数を使用したファイル情報の取得<br>\n";
    echo_filelist($dirname);

    /**
     * 指定されたフォルダ配下のファイル一覧を表示する
     * サブフォルダも再帰的に検索する
     *
     * @param string $dirname ディレクトリ名
     * @return なし
     */
    function echo_filelist(string $dirname) :void {
        // 絶対パスを取得し、scandir()関数を呼び出す
        $path = realpath($dirname);
        $files = scandir($path);

        // ループし、ファイル一覧を表示する
        foreach($files as $filename) {
            // "."、".."の場合、次のループに移動
            if($filename === "." || $filename === "..") {
                continue;
            }
            // 絶対パスを取得したファイル名、ディレクトリ名を表示する
            $fullpath = get_path($path, $filename);
            echo $fullpath . "<br>\n";

            // ファイルの場合、次のループに移動
            if(is_file($fullpath)) {
                continue;
            }

            // ディレクトリの場合、関数を再度呼び出す(再帰的関数の呼び出し)
            echo_filelist($fullpath);
        }
    }

    /**
     * OSにあったパスを付与したファイル名、ディレクトリ名を取得する
     *
     * @param [type] $path パス
     * @param [type] $filename ファイル名、ディレクトリ名
     * @return string パスを付与した文字列
     */
    function get_path($path, $filename) :string {
        $pathstr = "/";
        // Windowsの場合、パス文字を"\"にする
        if(substr(PHP_OS,0, 3) === "WIN") {
            $pathstr = "\\";
        }

        return $path . $pathstr . $filename;
    }
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_08_36.php<br>
【PHP】ファイル情報一覧の取得<br>
関数を使用したファイル情報の取得<br>
C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sample01.txt<br>
C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sub01<br>
C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sub01\sample02.txt<br>
C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sub01\subsub01<br>
C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sub01\subsub01\subsubsub01<br>
C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sub01\subsub01\subsubsub01\sample03.txt<br>
C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sub01\subsub01\subsubsub02<br>
C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_4\data\sub02<br>

コメント