Linuxファイルシステム自体には、シンボリックリンク(Symlinks)に対して広範かつ強力なサポートがあります。 Linuxはシンボリックリンクを使用して、 LN -Sコマンドを介してそれらを作成します。これらのリンクは通常、独立して識別され、ターゲットファイルまたはディレクトリへのパス情報があります。
Linuxシステムでは、 IS_Link関数は、シンボリックリンクを処理するときに非常に一貫して機能します。 IS_LINKは、指定されたパスがシンボリックリンクである場合、 trueを返します。 Linuxシステムでは、シンボリックリンクがファイルまたはディレクトリを指すことができるため、 IS_Link関数の判断を2つの状況に適用できることに注意する必要があります。
例えば:
<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-string">'/path/to/symlink'</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'This is a symbolic link.'</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-string">'This is not a symbolic link.'</span></span><span>;
}
</span></span>
Linuxでは、このコードは、シンボリックリンクがファイルまたはディレクトリを指すかどうかを正確に判断できます。
Windowsオペレーティングシステムは、Windows Vistaからのシンボリックリンクをサポートしていますが、Linuxとは異なる方法で実装されています。 Windowsでは、シンボリックリンクの作成はMKLINKコマンドを介して行われ、シンボリックリンクでは、管理者のアクセス許可が作成される場合があります。対照的に、Windowsのファイルシステム(NTFS)のシンボリックリンクのサポートは、Linuxシステムほどネイティブで広範囲ではありません。
PHPでは、 is_linkはLinuxとはWindowsで異なる動作をする場合があります。特に、古いバージョンのWindowsシステム(XPなど)では、シンボリックリンクサポートが貧弱であり、 IS_Linkはシンボリックリンクを正しく識別できない場合があります。さらに、Windowsでは、シンボリックリンクが存在していても、許可の問題により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-string">'C:\\path\\to\\symlink'</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'This is a symbolic link.'</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-string">'This is not a symbolic link.'</span></span><span>;
}
</span></span>
十分な権限がない場合、またはオペレーティングシステムがシンボリックリンクを完全にサポートしていない場合、 IS_LINKは結果を正確に返すことはできません。
MACOSはUNIXベースのオペレーティングシステムであるため、そのシンボリックリンクの実装はLinuxシステムの実装と類似しています。 MacOSは、HFS+ファイルシステム(またはより近代的なAPFSファイルシステム)を使用し、シンボリックリンクを非常によくサポートします。 MacOSでは、 IS_Linkは通常、シンボリックリンクを正確に識別し、正しいブール値を返します。
MacOSでは、シンボリックリンクの動作はLinuxと非常に似ており、 IS_Linkの使用はあまり制限の対象ではありません。ファイルへのシンボリックリンクであろうとディレクトリであろうと、 IS_LINKは適切に動作します。
IS_LINK関数はすべての主要なオペレーティングシステムで実行される可能性がありますが、一部の特別な場合、互換性の問題が発生する場合があります。これは主に次の側面に反映されています。
前述のように、Windowsシステムは、シンボリックリンクを作成する際に管理者の特権を必要とする場合があります。対応する許可がない場合、 IS_LINKは、それがシンボリックリンクであるかどうかを正しく決定できない場合があります。この場合、スクリプトに許可チェックを追加することを検討してください。
異なるオペレーティングシステムで使用されるファイルシステムの違いも、互換性の問題の理由の1つです。たとえば、Linux SystemおよびWindowsのNTFSファイルシステムのExt4ファイルシステムのシンボリックリンクのサポートには違いがあります。ファイルパスが同じであっても、パフォーマンスはファイルシステムが異なる場合があります。
LinuxおよびMacOSでは、シンボリックリンクはファイルまたはディレクトリを指すことができますが、Windowsでは、いくつかのタイプのシンボリックリンクは、それらの実装方法とファイルシステムの違いのために正しく識別されない場合があります。たとえば、Windowsの「ディレクトリシンボルリンク」と「ファイルシンボルリンク」は、PHPのIS_LINK関数で一貫して動作する場合があります。
WindowsとUNIXオペレーティングシステムのパス形式はさまざまです。 Windowsでは、Path Separatorはバックスラッシュ( \ )を使用し、Unixクラスシステムではフォワードスラッシュ( / )が使用されます。 IS_LINKを使用する場合、パス形式がオペレーティングシステムの要件を満たしていることを確認してください。そうしないと、判断エラーを引き起こす可能性があります。
PHPスクリプトがさまざまなオペレーティングシステムでシンボリックリンクを正しく判断できるようにするために、開発者は次の方法を取ることができます。
パス正規化: IS_LINKを使用する前に、 RealPath()関数を使用してパスを正規化することができます。パスの形式が異なるオペレーティングシステム間で一貫していることを保証します。
許可チェック:Windows Systemsでは、PHPスクリプトにシンボリックリンクにアクセスするのに十分な権限があることを確認してください。 PHPのis_readable 、 is_writable 、およびその他の機能を介してファイルアクセス許可を確認できます。
クロスプラットフォームシンボリックリンク検出ライブラリ:いくつかの特別なライブラリまたはツールを使用して、異なるオペレーティングシステムのシンボリックリンクの違いを処理し、 IS_LINKのデフォルト動作に直接依存しないようにします。