복잡한 PHP 프로젝트를 구축 할 때는 종종 구성 파일, 기능 라이브러리 또는 템플릿과 같은 여러 사이트 나 서브 시스템간에 코드를 공유해야합니다. php에서 제공 한 get_include_path () 및 set_include_path () 함수를 통해 파일의 검색 경로를 유연하게 구성하여 사이트 또는 프로젝트 전체에 걸쳐 파일의 도입을 구현하여 코드의 재사용 가능성과 유지 관리를 크게 향상시킬 수 있습니다.
include_path는 포함, 요구 , include_once 및 require_once 찾기 파일을 포함시킬 때 기본 디렉토리 목록을 지정하는 PHP의 구성 옵션입니다. 파일의 경로가 절대 경로가 아닌 경우 PHP는 이러한 디렉토리에서 파일을 차례로 찾습니다.
include_path는 php.ini , set_include_path () 함수를 통해 수정하거나 .htaccess 파일에서 php_value 지시문을 사용하여 수정할 수 있습니다.
get_include_path ()는 현재 포함 _Path 설정을 얻는 데 사용됩니다.
echo get_include_path();
일반적으로 콜론 (Linux/Unix) 또는 세미콜론 (Windows)으로 분리되는 문자열을 반환합니다.
우리에게는 두 개의 사이트가 있다고 상상해보십시오.
메인 사이트 : https://www.gitbox.net/
하위 사이트 : https://sub.gitbox.net/
기본 사이트는 공통 도구 라이브러리 파일을 저장합니다. 하위 사이트 가이 파일을 복사 하지 않고도 이러한 파일을 직접 사용할 수 있기를 바랍니다.
기본 사이트의 공유 디렉토리가 /var/www/gitbox.net/shared 라고 가정하면 하위 사이트의 항목 파일에 추가하십시오.
<?php
// 원본을 얻으십시오 include_path
$originalPath = get_include_path();
// 기본 사이트의 공유 디렉토리를 추가하십시오
$newPath = '/var/www/gitbox.net/shared' . PATH_SEPARATOR . $originalPath;
// 새로운 것을 설정하십시오 include_path
set_include_path($newPath);
// 공유 라이브러리 소개
include 'common_functions.php';
이러한 방식으로 Common_Functions.php 파일은 실제로 하위 사이트의 디렉토리 구조 내에 있지 않더라도 하위 사이트에서 참조 할 수 있습니다.
더 권장되는 접근법은 클래스 파일을로드 할 때 자동 로더를 사용하여 자동으로 조회하는 것입니다.
<?php
set_include_path('/var/www/gitbox.net/shared' . PATH_SEPARATOR . get_include_path());
spl_autoload_register(function ($className) {
include $className . '.php';
});
Utils \ Logger 클래스가 공유/utils/logger.php 에 정의되어 있다고 가정합니다.이 클래스가 하위 사이트에서 사용될 때 :
<?php
use Utils\Logger;
$logger = new Logger();
PHP는 include_path에 따라 utils/logger.php 파일을 자동으로 검색하고로드합니다.
include_path를 구성하면 크로스 사이트 공유를 달성 할 수 있지만, 특히 경로가 제한되지 않은 경우 악의적으로 덮어 쓰거나 잘못된 파일이 도입 될 수 있습니다. 이를 위해 :
공유 디렉토리 권한을 엄격히 제어합니다.
include_path에 사용자 쓰레기 디렉토리를 추가하지 마십시오.
RealPath를 사용하여 파일 위치를 확인하십시오.
이름 충돌을 피하기 위해 공유 디렉토리의 네임 스페이스를 사용하십시오.
개발 중에 현재 include_path를 인쇄하여 구성이 효과적인지 확인할 수 있습니다.
echo '현재의 include_path: ' . get_include_path();
또한 실패를 포함하면 ini_get ( 'display_errors')을 사용하여 문제 해결을 쉽게 할 수 있도록 오류 메시지가 활성화되어 있는지 확인할 수 있습니다.
get_include_path () 및 set_include_path ()를 합리적으로 구성하면 크로스 사이트 코드 공유를 우아하게 달성 할 수 있습니다. 코드 재사용 속도를 향상시킬뿐만 아니라 모듈 식 개발의 기초도 제공합니다. 디렉토리 구조 및 명명 사양과 일치하는 한,이 방법은 효율적이고 유연하며 대규모 PHP 프로젝트의 일반적인 기술입니다.