現在の位置: ホーム> 最新記事一覧> Scandir関数を使用して非表示ファイルをリストする方法は?段階的に実装する方法を教えてください

Scandir関数を使用して非表示ファイルをリストする方法は?段階的に実装する方法を教えてください

gitbox 2025-09-02

PHPでは、 Scandir関数は、ディレクトリ内のすべてのファイルとフォルダーをリストする非常に一般的な関数です。デフォルトでは、非表示のファイル(ドットから始まるファイルまたはフォルダーをリストしません。これは、ディレクトリ(非表示ファイルを含む)にすべてをリストする必要がある場合にこれをどのように行うかなど、場合によっては私たちに不便を引き起こす可能性がありますか?この記事では、 Scandir関数を使用して非表示のファイルをリストする方法を理解するために、段階的に説明します。

1。Scandir機能の紹介

Scandir関数の基本的な構文は次のとおりです。

 <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-variable">$sorting_order</span></span><span>);
</span></span>
  • $ディレクトリ:ファイルをリストする必要があるディレクトリパスを指定します。

  • $ SORTING_ORDER :オプション、ソートメソッドを指定します。デフォルトは昇順です。

この関数は、ディレクトリ内のファイルとフォルダーの名前を含む配列を返します。アクセス許可がない場合、またはディレクトリが存在しない場合はfalseを返します。

2。デフォルトでは、 Scandirは非表示ファイルをリストしていません

次のコードを実行した場合:

 <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-string">'/path/to/directory'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$files</span></span><span>);
</span></span>

結果は、以下と同様の出力になる可能性があります。

 <span><span>Array
(
    [</span><span><span class="hljs-meta">0</span></span><span>] =&gt; .
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; ..
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; file1.txt
    [</span><span><span class="hljs-meta">3</span></span><span>] =&gt; folder1
    [</span><span><span class="hljs-meta">4</span></span><span>] =&gt; file2.txt
)
</span></span>

ご覧のとおり、ディレクトリ内の非表示ファイル( .ENVファイルなど)はリストされていませんが、現在のディレクトリのみがリストされていますおよび親ディレクトリがリストされています

3.非表示ファイルをリストする方法は?

Scandirリストの非表示ファイルを作成するには、2つの方法で実行できます。1つはカスタムフィルタリング方法を使用することであり、もう1つはScandirによって返される配列を組み合わせてフィルタリングすることです。

方法1:カスタムフィルタリング

フィルターをカスタマイズし、 Scandirによって返されたファイル名が開始されるかどうかを手動で確認できます 、そして、ニーズに基づいてそれらを保持するかどうかを決定します。

 <span><span><span class="hljs-variable">$directory</span></span><span> = </span><span><span class="hljs-string">'/path/to/directory'</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-comment">// 使用 array_filter 非表示ファイルを除外します</span></span><span>
</span><span><span class="hljs-variable">$allFiles</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$files</span></span><span>, function(</span><span><span class="hljs-variable">$file</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>[</span><span><span class="hljs-number">0</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> &amp;&amp; </span><span><span class="hljs-variable">$file</span></span><span> !== </span><span><span class="hljs-string">'..'</span></span><span>;
});

</span><span><span class="hljs-comment">// すべてのファイルとフォルダーを出力します(非表示ファイルが含まれています)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$allFiles</span></span><span>);
</span></span>

この例では、 Array_Filterを使用して、最初のファイル(つまり、非表示ファイル)をフィルタリング、確認してくださいおよび..ディレクトリは含まれていません。

方法2: Scandirを組み合わせると、結果とGLOB機能が返されます

もう1つの一般的なプラクティスは、このメソッドと組み合わせてGLOW機能を使用することです。これにより、パターンマッチングを介して、非表示ファイルを含む特定のタイプのファイルをリストできます。

 <span><span><span class="hljs-variable">$directory</span></span><span> = </span><span><span class="hljs-string">'/path/to/directory'</span></span><span>;
</span><span><span class="hljs-variable">$allFiles</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_merge</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-title function_ invoke__">glob</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span> . </span><span><span class="hljs-string">'/.*'</span></span><span>));

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$allFiles</span></span><span>);
</span></span>

このようにして、 GLOBは、パターン(つまり、始まるファイル)に一致するすべての非表示ファイルをリストし、 Scandirによって返された結果とマージします。

4.返されたファイルをフィルタリングおよび処理します

特定のファイルを除外したり、ファイルをソートするなど、リストされている非表示ファイルでもっとやりたい場合は、 Scandirによって返された配列を処理できます。

たとえば、 .gitで始まるすべての非表示ファイルを除外します。

 <span><span><span class="hljs-variable">$directory</span></span><span> = </span><span><span class="hljs-string">'/path/to/directory'</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-variable">$filteredFiles</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$files</span></span><span>, function(</span><span><span class="hljs-variable">$file</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>] !== </span><span><span class="hljs-string">'.'</span></span><span> || </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-string">'.git'</span></span><span>) !== </span><span><span class="hljs-number">0</span></span><span>;
});

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$filteredFiles</span></span><span>);
</span></span>

5。概要

上記の2つの方法により、 Scandir関数を柔軟に使用して非表示ファイルをリストできます。カスタムフィルタリングメソッドを使用する場合でも、 GLOP機能を組み合わせる場合でも、PHPの非表示ファイルを含む、ディレクトリ内のすべてのファイルとフォルダーを正常に取得するのに役立ちます。実際の開発では、隠されたファイルを処理する適切な方法を選択すると、ファイルの読み取りと操作をより適切に制御できます。