PHPでは、 Scandir関数は、ディレクトリ内のすべてのファイルとフォルダーをリストする非常に一般的な関数です。デフォルトでは、非表示のファイル(ドットから始まるファイルまたはフォルダー)をリストしません。これは、ディレクトリ(非表示ファイルを含む)にすべてをリストする必要がある場合にこれをどのように行うかなど、場合によっては私たちに不便を引き起こす可能性がありますか?この記事では、 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を返します。
次のコードを実行した場合:
<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>] => .
[</span><span><span class="hljs-meta">1</span></span><span>] => ..
[</span><span><span class="hljs-meta">2</span></span><span>] => file1.txt
[</span><span><span class="hljs-meta">3</span></span><span>] => folder1
[</span><span><span class="hljs-meta">4</span></span><span>] => file2.txt
)
</span></span>
ご覧のとおり、ディレクトリ内の非表示ファイル( .ENVファイルなど)はリストされていませんが、現在のディレクトリのみがリストされています。および親ディレクトリがリストされています。
Scandirリストの非表示ファイルを作成するには、2つの方法で実行できます。1つはカスタムフィルタリング方法を使用することであり、もう1つはScandirによって返される配列を組み合わせてフィルタリングすることです。
フィルターをカスタマイズし、 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> && </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を使用して、最初のファイル(つまり、非表示ファイル)をフィルタリングし、確認してください。および..ディレクトリは含まれていません。
もう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によって返された結果とマージします。
特定のファイルを除外したり、ファイルをソートするなど、リストされている非表示ファイルでもっとやりたい場合は、 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>
上記の2つの方法により、 Scandir関数を柔軟に使用して非表示ファイルをリストできます。カスタムフィルタリングメソッドを使用する場合でも、 GLOP機能を組み合わせる場合でも、PHPの非表示ファイルを含む、ディレクトリ内のすべてのファイルとフォルダーを正常に取得するのに役立ちます。実際の開発では、隠されたファイルを処理する適切な方法を選択すると、ファイルの読み取りと操作をより適切に制御できます。