現在の位置: ホーム> 最新記事一覧> Scandir関数によって返された結果のディレクトリとファイルのさまざまな識別子を識別する方法は?

Scandir関数によって返された結果のディレクトリとファイルのさまざまな識別子を識別する方法は?

gitbox 2025-09-11

PHPでは、 Scandir関数を使用して、指定されたディレクトリでファイルとディレクトリのリストを取得します。指定されたディレクトリ内のすべてのファイルとサブディレクトリの名前を含む配列を返します。 Scandirの基本的な使用法は非常に単純ですが、ファイルをディレクトリと区別する識別を直接提供するものではありません。ただし、他の機能を組み合わせることにより、各エントリのタイプを簡単に識別できます。

1。Scandir関数の基本的な使用

Scandir関数の構文は次のとおりです。

 <span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-title function_ invoke__">scandir</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$directory</span></span><span> [, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$sorting_order</span></span><span> = SCANDIR_SORT_ASCENDING [, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-literal">NULL</span></span><span> ]] )
</span></span>
  • $ディレクトリ:スキャンするディレクトリへのパス。

  • $ SORTING_ORDER :並べ替えの順序を指定し、デフォルトで昇順の注文( Scandir_Sort_Assind )を指定します。

  • $コンテキスト:オプションのコンテキストストリームを指定します。

Scandirは、通常、サブディレクトリのファイル名と名前であるディレクトリの内容を含む配列を返します。返品値には、現在のディレクトリ( )と親ディレクトリ( .. )の名前が含まれます。

2。ファイルとディレクトリを判断する方法は?

Scandirによって返されるファイルとディレクトリを区別するために、 is_file()およびis_dir()関数を使用できます。特定のパスがファイルかディレクトリかを判断するために使用されます。 Scandirの結果を横断することにより、各エントリのタイプを簡単に識別できます。

3。サンプルコード

scandirを使用してディレクトリリストを取得し、 is_file()およびis_dir()によるファイルとディレクトリを判断する方法を示す例を示します。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$directory</span></span><span> = </span><span><span class="hljs-string">'/path/to/your/directory'</span></span><span>;  </span><span><span class="hljs-comment">// スキャンにディレクトリを設定します</span></span><span>
</span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">scandir</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span>);

</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$files</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>) {
    </span><span><span class="hljs-comment">// 飛び越える "." そして ".."</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$file</span></span><span> == </span><span><span class="hljs-string">'.'</span></span><span> || </span><span><span class="hljs-variable">$file</span></span><span> == </span><span><span class="hljs-string">'..'</span></span><span>) {
        </span><span><span class="hljs-keyword">continue</span></span><span>;
    }

    </span><span><span class="hljs-variable">$filePath</span></span><span> = </span><span><span class="hljs-variable">$directory</span></span><span> . DIRECTORY_SEPARATOR . </span><span><span class="hljs-variable">$file</span></span><span>;

    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_dir</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>)) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . </span><span><span class="hljs-string">" それはディレクトリです\n"</span></span><span>;
    } </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_file</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>)) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . </span><span><span class="hljs-string">" ファイルです\n"</span></span><span>;
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . </span><span><span class="hljs-string">" 未知のタイプです\n"</span></span><span>;
    }
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

4。コード解析

  1. 最初にScandir($ Directory)に電話して、指定されたディレクトリですべてのファイルとディレクトリを取得します。

  2. Foreachを使用して、返されたファイルリストをループします。

  3. エントリごとに、除くそして..最初に、それらはそれぞれ現在のディレクトリと親ディレクトリを表しており、通常はさらに処理する必要はありません。

  4. 次に、 is_dir()を使用して、エントリがディレクトリであるかどうかを確認します。ディレクトリの場合、対応するプロンプトは出力です。

  5. 次に、 is_file()を使用して、それがファイルであるかどうかを判断します。ファイルの場合、対応するプロンプトは出力です。

  6. 上記の条件のいずれも満たされていない場合、エントリを特別なファイル(シンボリックリンクなど)と見なすことができます。

5。結果出力の例

想定/path/to/your/directoryには次のものが含まれています。

  • file1.txt (file)

  • file2.php (file)

  • Subdir1 (ディレクトリ)

  • subdir2 (ディレクトリ)

上記のコードを実行した後、出力は次のとおりです。

 <span><span>file1.txt ファイルです
file2.php ファイルです
subdir1 それはディレクトリです
subdir2 それはディレクトリです
</span></span>

6。概要

Scandiris_file()とis_dir()関数を組み合わせることにより、ファイルシステムのエントリタイプを簡単に判断し、ファイルとディレクトリを区別できます。 Scandir自体は直接的な識別情報を提供しませんが、他のファイルシステム関数での使用により、このタスクは非常に簡単になります。