<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">## 하나、이해하다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>
이렇게하면 원래 검색 디렉토리를 보존하고 다른 파일이 고장을로드하지 못하게 할 수 있습니다.
/벤더/liba/ 및 /벤더/libb/ 에 위치한 두 개의 라이브러리를 사용한다고 가정 해 봅시다. 전통을 사용하는 경우 :
<span><span><span class="hljs-keyword">include</span></span><span> </span><span><span class="hljs-string">'config.php'</span></span><span>;
</span></span>
PHP는 당신이 기대하는 liba가 아니라 libb 파일을로드 할 수 있습니다. 이 경우 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>
자동 로딩 클래스를 사용하는 시나리오에서는 포함 포함 포함 설정은 클래스의 올바른 위치에 도움이됩니다. 예를 들어:
<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의 경로 충돌을 해결하는 강력한 도구입니다. get_include_path () 및 spl_autoload_register () 를 유연하게 설정하고 결합함으로써 코드의 견고성과 유지 보수 가능성을 크게 향상시킬 수 있습니다. 대규모 프로젝트 및 다인원 협업 환경에서는 경로 충돌로 인한 숨겨진 버그를 피하기 위해 경로를 관리하기 위해 좋은 습관을 개발해야합니다.
<span></span>