php로 개발할 때 get_include_path () 및 set_include_path ()는 동적으로 설정하고 포함 된 파일의 검색 경로를 얻는 데 도움이되는 두 가지 매우 유용한 기능입니다. 그러나 경우에 따라 개발자는 새로운 포함 경로를 설정하기 위해 Set_include_path ()가 성공적으로 호출 되더라도 PHP가 설정을 완전히 무시하는 것처럼 여전히 인식 할 수 없다는 문제에 직면합니다. 이 기사는이 문제의 가능한 원인을 분석하고 해당 솔루션을 제공합니다.
가장 먼저 확인해야 할 것은 php configuration 파일 php.ini 입니다. contact_path 에 지정되어 있는지 여부에 관계없이 구성은 Safe_Mode 또는 Open_Basedir 와 같은 보안 옵션에 의해 제한됩니다. 예를 들어:
; php.ini
include_path = ".:/usr/local/php/includes"
이 구성은 모든 PHP 스크립트의 동작 포함에 영향을 미칩니다. set_include_path () 가 호출되었지만 적용되지 않으면 구성 파일 또는 웹 서버 환경에 의해 값이 강요 될 수 있습니다. 다음 코드를 사용하여 현재 포함 _Path를 볼 수 있습니다.
echo get_include_path();
또한 Apache에서 .htaccess를 사용하는 경우 유사한 매개 변수를 설정할 수도 있습니다.
php_value include_path ".:/some/path"
또한 스크립트에서 set_include_path ()가 적용되지 않게됩니다.
set_include_path () 는 현재 실행 환경에서 바로 적용되는 함수이지만, auto_prepend_file 또는 일부 내부 프레임 워크 후크와 같은 부적절한 위치에서 호출되면 후속 로직에 의해 덮어 쓸 수 있습니다. 대상 파일을 포함시키기 전에 set_include_path ()에게 전화하십시오.
set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/gitbox.net/includes');
require_once 'somefile.php';
극단적 인 경우, set_include_path ()는 일부 확장자 또는 프레임 워크에 의해 다시 작성되거나 무시 될 수 있습니다. 현재 ini_set ()을 사용하여 경로를 설정하려고 시도 할 수 있습니다.
ini_set('include_path', get_include_path() . PATH_SEPARATOR . '/var/www/gitbox.net/includes');
require_once 'somefile.php';
이 두 가지는 일반적으로 동일하지만 ini_set ()는 PHP 엔진에 구성 매개 변수를보다 명시 적으로 수정하도록 지시합니다.
아무 일도 작동하지 않을 때는 포함 된 문제를 피하기 위해 절대 경로를 사용하는 것을 고려하십시오. 이것은 가장 유연한 방법은 아니지만 안정적인 작동을 보장 할 수 있습니다.
require_once '/var/www/gitbox.net/includes/somefile.php';
명령 줄에서 PHP 스크립트 (CLI 모드)를 실행할 때 PHP.ini 구성은 웹 환경과 완전히 다를 수 있습니다. 예를 들어, 명령 줄에서 올바른 포함 _Path를 설정할 수 있지만 브라우저에서 액세스 할 때 APACHE 또는 NGINX 구성으로 덮어 씁니다. 다음 코드를 사용하여 다른 환경에서 구성을 확인하십시오.
php -i | grep include_path
그리고:
// 브라우저에서 실행하십시오
phpinfo();
Composer 또는 기타 자동로드 도구를 사용하는 경우 Include_Path 에 의존하지 않지만 자체 내부 경로 매핑 메커니즘을 사용하여 파일을로드하십시오. 파일로드 가이 경로를 전혀 사용하지 않기 때문에이 시점에서 include_path를 수정하는 것은 유효하지 않습니다. 예를 들어, Composer의 Autoload.php는 conture_path를 사용하는 대신 매핑 된 배열을로드합니다.
get_include_path () 설정이 무시되는 문제가 발생하면 코드를 응시할뿐만 아니라 구성 파일, 웹 서버 환경, 실행 컨텍스트 및 자동로드 메커니즘과 같은 요소를 고려해야합니다. 일반적으로 말하면, Set_Include_Path ()는 경로 설정 로직이 올바른 위치에 배치되어 다른 메커니즘이 그것을 무시하지 않는 한 예상대로 적용되어야합니다.
PHP의 파일로드 메커니즘에 대한 올바른 이해는 특히 안정적이고 유지 관리 가능한 코드를 작성하는 데 중요합니다. 이 기사의 분석이 문제를 해결하고 해결하는 데 도움이되기를 바랍니다.