Symlink()関数の基本的な構文は次のとおりです。
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">symlink</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$target</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$link</span></span><span>)
</span></span>
$ターゲット:ターゲットファイルまたはディレクトリへのパス。
$リンク:シンボリックリンクへのパス。
関数が成功した場合、それはtrueを返し、それ以外の場合はfalseを返し、エラーメッセージを生成します。
Symlink()について話すときは、最初に2つのパスの基本的な定義を理解する必要があります。
絶対パス:ファイルシステムのルートから始まるフルパス。例: /var/www/html/index.php 。
相対パス:現在の作業ディレクトリに対するパス。例: ./index.phpまたは../images/logo.png 。
絶対パスをターゲットとして使用する場合、 Symlink()はファイルまたはディレクトリのフルパスを直接参照し、現在の作業ディレクトリ(現在のスクリプトがあります)の影響を受けません。作成されたシンボリックリンクは常にこの絶対的なパスを指し示し、シンボリックリンクへの訪問者が異なるディレクトリにある場合でも、ターゲットを正しく見つけることができます。
例:
<span><span><span class="hljs-comment">// ターゲットファイルは絶対パスです</span></span><span>
</span><span><span class="hljs-variable">$target</span></span><span> = </span><span><span class="hljs-string">'/var/www/html/index.php'</span></span><span>;
</span><span><span class="hljs-variable">$link</span></span><span> = </span><span><span class="hljs-string">'/var/www/html/link_to_index.php'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">symlink</span></span><span>(</span><span><span class="hljs-variable">$target</span></span><span>, </span><span><span class="hljs-variable">$link</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"シンボルリンクの作成に成功します!"</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">"シンボルリンクの作成に失敗しました!"</span></span><span>;
}
</span></span>
この例では、現在のPHPスクリプトのワーキングディレクトリがどこにあるかに関係なく、Symlink $リンクは常に/var/www/html/index.phpを指します。
相対パスの処理は少し複雑です。 Symlink()関数は、相対パスを現在の作業ディレクトリに対するパスに変換します。したがって、シンボリックリンクの正しさは、リンクが作成されたときの作業ディレクトリと、シンボリックリンクにアクセスするときの作業ディレクトリに依存します。作業ディレクトリが異なる場合、シンボリックリンクがターゲットを正しく指している可能性があります。
例:
<span><span><span class="hljs-comment">// ターゲットファイルは相対パスです</span></span><span>
</span><span><span class="hljs-variable">$target</span></span><span> = </span><span><span class="hljs-string">'images/logo.png'</span></span><span>;
</span><span><span class="hljs-variable">$link</span></span><span> = </span><span><span class="hljs-string">'link_to_logo.png'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">symlink</span></span><span>(</span><span><span class="hljs-variable">$target</span></span><span>, </span><span><span class="hljs-variable">$link</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"シンボルリンクの作成に成功します!"</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">"シンボルリンクの作成に失敗しました!"</span></span><span>;
}
</span></span>
この例では、現在のスクリプトが/var/www/html/ディレクトリにあると仮定すると、Symbolic link link_to_logo.pngは/var/www/html/images/logo.pngを指します。シンボリックリンクが別のディレクトリにアクセスされ、このディレクトリの下に同一の相対パス構造がない場合、シンボリックリンクは無効になります。
絶対パスを使用する:異なるディレクトリ間でリソースを共有する必要がある状況に適しているため、シンボリックリンクはターゲットファイルまたはディレクトリをどこでも正しく指すことができます。たとえば、重要なファイルまたはディレクトリをグローバルアクセス場所にリンクする場合。
相対パスを使用します。相対構造を維持する必要がある場合は、リソースリンクに適しています。たとえば、プロジェクトディレクトリでは、リソースファイルを同じディレクトリまたはそのサブディレクトリにリンクする場合、相対パスを使用すると、プロジェクト構造の利便性をより適切に維持できます。
相対パスのワーキングディレクトリの依存関係:相対パスを使用する場合、シンボリックリンクを作成するときは、現在の作業ディレクトリに注意を払ってください。現在の作業ディレクトリが変更された場合、相対パスポイントエラーが発生する可能性があります。
ファイル許可:相対パスまたは絶対パスを使用するかどうかにかかわらず、ターゲットファイルとシンボリックリンクファイルのアクセス権限を正しく設定する必要があります。
シンボリックリンクの再帰問題:シンボリックリンクがそれ自体を指しているか、円形のリンクを形成する場合、 Symlink()はエラーで失敗します。
Symlink()関数は、相対パスと絶対パスへの対処に明らかな違いがあります。絶対パスは、現在の作業ディレクトリがどこにあるとしても、シンボリックリンクがターゲットファイルを正しく指していることを保証します。相対パスは現在の作業ディレクトリに依存し、アクセス時にディレクトリの場所の影響を受ける可能性があります。実際の開発では、選択するパスフォームは、ニーズに基づいて決定する必要があります。シンボリックリンクが異なる場所で正しく動作するようにしたい場合、絶対パスを使用することが最良の選択です。シンボリックリンクが特定のディレクトリ構造内でのみ有効である場合、相対パスはプロジェクトの構造を維持できます。