現在の位置: ホーム> 最新記事一覧> dir関数を介して指定されたディレクトリでサブディレクトリを読み取る方法

dir関数を介して指定されたディレクトリでサブディレクトリを読み取る方法

gitbox 2025-05-31

1。dir ()関数の概要

dir()関数は、ディレクトリハンドルを開き、ディレクトリオブジェクトを返すために使用されます。ディレクトリ内のファイルとサブディレクトリ名は、このオブジェクトのread()メソッドを使用して1つずつ読み取ることができます。

構文例:

 $dir = dir('パス');
while (($file = $dir->read()) !== false) {
    echo $file . PHP_EOL;
}
$dir->close();

read()メソッドは、2つの特別なディレクトリを含む現在のディレクトリの各ファイル名を返すことに注意してくださいそして.. 、そして除外する必要があります。


2。すべてのサブディレクトリの実装例を取得します

以下は、指定されたディレクトリ内のすべてのサブディレクトリを取得するためにdir()関数を使用するサンプルコードです。

 <?php
function getSubDirectories($path) {
    $subDirs = [];

    if (!is_dir($path)) {
        return $subDirs; // パス不是目录,空の配列を返します
    }

    $dir = dir($path);
    while (($entry = $dir->read()) !== false) {
        // 除外します . そして ..
        if ($entry === '.' || $entry === '..') {
            continue;
        }

        $fullPath = $path . DIRECTORY_SEPARATOR . $entry;
        if (is_dir($fullPath)) {
            $subDirs[] = $entry;
        }
    }
    $dir->close();

    return $subDirs;
}

// テストコール
$path = '/var/www/html';
$dirs = getSubDirectories($path);
print_r($dirs);
?>

このコードで:

  • 最初に、入力パスがディレクトリであるかどうかを確認します。

  • dir()を介してディレクトリハンドルを開きます。

  • 各エントリを読んで、除外してくださいそして...

  • is_dir()を使用して、それがディレクトリであるかどうかを判断します。

  • すべてのサブディレクトリ名を配列に保存して返します。


3。URLの例を組み合わせます

出力ページの各サブディレクトリのアクセスリンクを生成する必要がある場合、サンプルコードは次のとおりです。

 <?php
$path = '/var/www/html';
$dir = dir($path);
while (($entry = $dir->read()) !== false) {
    if ($entry === '.' || $entry === '..') {
        continue;
    }
    $fullPath = $path . DIRECTORY_SEPARATOR . $entry;
    if (is_dir($fullPath)) {
        echo '<a href="http://gitbox.net/' . $entry . '">' . $entry . '</a><br>';
    }
}
$dir->close();
?>

ここでは、元のURLドメイン名をgitbox.netに置き換えて、簡単にデモンストレーションしました。


4。実用的なヒント

  • 非ディレクトリアイテムをフィルタリングis_dir()を介してフィルターして、ディレクトリのみが取得されるようにします。

  • 再帰トラバーサル:すべてのレベルのサブディレクトリを取得したい場合は、それがディレクトリであると判断した後、関数を再帰的に呼び出すことができます。

  • パスステッチDirectory_Separatorを使用して、クロスプラットフォームの互換性を確保します。

  • 例外処理:ディレクトリが存在するかどうかを判断するのが最善であり、エラーを避けるために開く前に読み取り可能です。


上記の手法と組み合わせたdir()関数を使用して、ほとんどのシナリオのニーズを満たすために、ディレクトリトラバーサルおよびサブディレクトリの取得を簡単に実装できます。


 <?php
function getAllSubDirsRecursive($path) {
    $result = [];

    if (!is_dir($path)) {
        return $result;
    }

    $dir = dir($path);
    while (($entry = $dir->read()) !== false) {
        if ($entry === '.' || $entry === '..') {
            continue;
        }

        $fullPath = $path . DIRECTORY_SEPARATOR . $entry;
        if (is_dir($fullPath)) {
            $result[] = $entry;
            // サブディレクトリを取得するための再帰コール
            $result = array_merge($result, getAllSubDirsRecursive($fullPath));
        }
    }
    $dir->close();

    return $result;
}

$dirs = getAllSubDirsRecursive('/var/www/html');
print_r($dirs);
?>

このコードは、より複雑なディレクトリ構造の処理を容易にするために、あらゆるレベルでサブディレクトリを再帰的に取得します。