PHPでは、 Scandir関数は、指定されたディレクトリにすべてのファイルとサブディレクトリをリストできます。ただし、 Scandirはファイルとディレクトリの簡単なリストのみを返し、シンボリックリンクを区別しません。ディレクトリ内のシンボリックリンクと彼らが指すターゲットファイルをリストするには、 ScandirとIS_LinkおよびReadLink関数を処理に使用する必要があります。
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>$ディレクトリパラメーターはスキャンするターゲットディレクトリであり、返される値は、そのディレクトリ内のすべてのファイルとサブディレクトリを含む配列です。 Scandirによって返されたリストにはSpecialが含まれていることに注意してください。および..それぞれ現在のディレクトリと親ディレクトリを表すアイテム。
ファイルまたはディレクトリがシンボリックリンクであるかどうかを判断するには、PHPのIS_LINK関数を使用できます。特定のパスがシンボリックリンクであるかどうかを確認します。
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_link</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$path</span></span></span><span> それは象徴的なリンクです\n";
}
</span></span>ReadLink関数を使用して、シンボリックリンクがポイントする実際のファイルパスを取得します。指定されたパスがシンボリックリンクである場合、 ReadLinkはシンボリックリンクのターゲットパスを返します。それ以外の場合は、 falseを返します。
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_link</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>)) {
</span><span><span class="hljs-variable">$target</span></span><span> = </span><span><span class="hljs-title function_ invoke__">readlink</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$path</span></span></span><span> 指向 </span><span><span class="hljs-subst">$target</span></span><span>\n";
}
</span></span>上記のコードを組み合わせて、指定されたディレクトリにシンボリックリンクとそのターゲットファイルをリストできます。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// スキャンするディレクトリを指定します</span></span><span>
</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-comment">// 使用 scandir ディレクトリリストを取得します</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">// トラバースディレクトリリスト</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-comment">// 完全なファイルパスのスプライシング</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-comment">// ファイルがシンボリックリンクであるかどうかを確認します</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_link</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>)) {
</span><span><span class="hljs-comment">// シンボリックリンクによって指されたターゲットファイルを取得します</span></span><span>
</span><span><span class="hljs-variable">$target</span></span><span> = </span><span><span class="hljs-title function_ invoke__">readlink</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-string">"<span class="hljs-subst">$file</span></span></span><span> それは象徴的なリンクです,指向 </span><span><span class="hljs-subst">$target</span></span><span>\n";
}
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>Scandir($ Directory) :ディレクトリ内のすべてのファイルとサブディレクトリを取得します。
is_link($ filepath) :現在のファイルがシンボリックリンクであるかどうかを判断します。
readLink($ filepath) :シンボリックリンクがポイントするファイルパスを取得します。
ディレクトリ/パス/to/ディレクトリに次のコンテンツがあると仮定します。
file1.txt (通常のファイル)
symlink1 ( /path/to/target1.txtへのsymlink)
symlink2 ( /path/to/target2.txtへのsymlink)
上記のコードを実行した後、出力は次のとおりです。
<span><span>symlink1 それは象徴的なリンクです,指向 /</span><span><span class="hljs-type">path</span></span><span>/</span><span><span class="hljs-keyword">to</span></span><span>/target1.txt
symlink2 それは象徴的なリンクです,指向 /</span><span><span class="hljs-type">path</span></span><span>/</span><span><span class="hljs-keyword">to</span></span><span>/target2.txt
</span></span>ScandirとIS_LinkとReadLink関数を組み合わせることにより、指定されたディレクトリとそれらに対応するターゲットファイルのシンボリックリンクを簡単にリストできます。このアプローチは、特に複雑なディレクトリ構造を扱う場合、ファイルシステムのシンボリックリンクをより適切に管理および分析するのに役立ちます。