<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// このドキュメントは説明していますPHP真ん中set_include_path関数アプリケーションスキル,共通を解決するためincludeパス競合の問題。</span></span><span>
</span><span><span class="hljs-comment">// ------------------------------------------------------------</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
<h1>使い方set_include_path関数は効果的に解決されます</span><span><span class="hljs-keyword">include</span></span><span>パス競合の問題?</h1>
日常生活でPHP开发真ん中,よく使用します `</span><span><span class="hljs-keyword">include</span></span><span>`、`</span><span><span class="hljs-keyword">require</span></span><span>`、`</span><span><span class="hljs-keyword">include_once</span></span><span>` そして `</span><span><span class="hljs-keyword">require_once</span></span><span>` ステートメントを送信して、外部ファイルを導入します。しかし,プロジェクト構造が複雑な場合、または複数のサードパーティライブラリが使用されている場合,異なるファイルの相対パスは競合する可能性があります,ファイルが正常にロードされます。現時点では,`</span><span><span class="hljs-title function_ invoke__">set_include_path</span></span><span>()` 機能は特に重要です。
</span><span><span class="hljs-comment">## 1つ、理解するinclude_pathの役割</span></span><span>
`include_path` はい PHP インポートされたファイルを検索するときに使用されるパスのリスト。妥当な構成を介して `include_path`,できるPHP优先在指定目录真ん中查找文件,而不はい依赖调用位置的相对路径。
デフォルトで,PHP只会在当前脚本目录或系统默认路径真ん中查找包含文件。これは、大規模なプロジェクトでは非常に柔軟性がありません,パスの競合になりやすい。
</span><span><span class="hljs-comment">## 二、set_include_path() 基本的な使用法</span></span><span>
```php
</span><span><span class="hljs-title function_ invoke__">set_include_path</span></span><span>(</span><span><span class="hljs-string">'/path/to/includes'</span></span><span>);
</span></span>
この関数は、元の構成をオーバーライドするようにPHPのinclude_pathを直接設定します。より安全な方法は、既存のinclude_pathに新しいパスを追加することです。
<span><span><span class="hljs-variable">$path</span></span><span> = </span><span><span class="hljs-string">'/my/custom/path'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">set_include_path</span></span><span>(</span><span><span class="hljs-title function_ invoke__">get_include_path</span></span><span>() . PATH_SEPARATOR . </span><span><span class="hljs-variable">$path</span></span><span>);
</span></span>
これにより、元の検索ディレクトリが保存され、他のファイルが障害の読み込みを防ぐことができます。
/vendor/liba/ and /vendor/libb/にある2つのライブラリを使用しているとします。どちらもconfig.phpという名前のファイルが含まれています。従来の使用を使用する場合:
<span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'config.php'</span></span><span>;
</span></span>
PHPはLibbファイルをロードする場合がありますが、LIBAは期待していません。この場合、 set_include_pathを使用して、負荷順序を正確に制御できます。
<span><span><span class="hljs-title function_ invoke__">set_include_path</span></span><span>(</span><span><span class="hljs-string">'/vendor/libA'</span></span><span> . PATH_SEPARATOR . </span><span><span class="hljs-string">'/vendor/libB'</span></span><span> . PATH_SEPARATOR . </span><span><span class="hljs-title function_ invoke__">get_include_path</span></span><span>());
</span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'config.php'</span></span><span>; </span><span><span class="hljs-comment">// からの優先度libA負荷</span></span><span>
</span></span>
自動読み込みクラスを使用するシナリオでは、 conclude_pathの設定もクラスの正しい位置を備えています。例えば:
<span><span><span class="hljs-title function_ invoke__">set_include_path</span></span><span>(</span><span><span class="hljs-keyword">__DIR__</span></span><span> . </span><span><span class="hljs-string">'/classes'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">spl_autoload_register</span></span><span>(function (</span><span><span class="hljs-variable">$class</span></span><span>) {
</span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-variable">$class</span></span><span> . </span><span><span class="hljs-string">'.php'</span></span><span>;
});
</span></span>
これにより、実際のパスを心配することなく、クラス名のみに集中できます。
一部のフレームワークまたはグローバル効果が必要な場合、 ini_setを使用してinclude_pathを変更することもできます。
<span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'include_path'</span></span><span>, </span><span><span class="hljs-string">'/global/includes'</span></span><span> . PATH_SEPARATOR . </span><span><span class="hljs-title function_ invoke__">ini_get</span></span><span>(</span><span><span class="hljs-string">'include_path'</span></span><span>));
</span></span>
set_include_pathとは異なり、 ini_setは、後続のすべてのスクリプトに有効になるphp.iniの構成値を直接変更します。
set_include_path()は、PHPのパス競合を解決するための強力なツールです。 path_separator 、 get_include_path()およびspl_autoload_register()を柔軟に設定および結合することにより、コードの堅牢性と保守性を大幅に強化できます。大規模なプロジェクトと複数人のコラボレーション環境では、パスの競合によって引き起こされる隠されたバグを避けるためにパスを管理するためにそれを使用するための良い習慣を開発する必要があります。
<span></span>