현재 위치: > 최신 기사 목록> get_include_path ()와 PHP의 () 사이의 충돌 문제 해결

get_include_path ()와 PHP의 () 사이의 충돌 문제 해결

gitbox 2025-05-29

php를 사용하여 개발할 때 get_include_path ()포함 ()은 종종 함께 나타나는 두 가지 기능입니다. 그러나 경우에 따라 개발자는 혼란스러운 문제에 직면 할 수 있습니다. 경로는 포함 _path에 추가되었지만 포함 ()을 사용하여 파일을 찾을 수 없습니다. 이 "충돌"은 실제로 몇 가지 일반적인 이유로 인해 발생합니다. 이 기사는 솔루션을 하나씩 분석하고 제공합니다.

1. get_include_path () 의 관계를 이해하고 포함 ()

PHP의 포함 () 함수는 지정된 파일을 다음 순서로 찾습니다.

  1. 상대 경로 사용 (현재 파일의 디렉토리와 관련하여)

  2. 현재 스크립트가있는 디렉토리를 찾으십시오

  3. include_path로 구성된 경로를 통해 반복하십시오

get_include_path () 는 현재 include_path 구성을 얻기위한 도구입니다. 현재 설정을 볼 수 있습니다.

 echo get_include_path();

예를 들어 set_include_path () 를 통해 contact_path를 동적으로 수정할 수도 있습니다.

 set_include_path(get_include_path() . PATH_SEPARATOR . '/usr/local/lib/php');

2. 자주 묻는 질문과 갈등

질문 1 : include_path에 경로가 올바르게 추가되지 않았습니다.

때로는 set_include_path ()가 호출되지만 경로는 실제로 추가되지 않습니다. 일반적인 오류는 다음과 같습니다.

 set_include_path('/some/path');
set_include_path('/another/path'); // 이전 설정을 덮어 씁니다

해결책:

Path_Separator를 사용하여 덮어 쓰기 대신 경로를 추가하십시오.

 set_include_path(get_include_path() . PATH_SEPARATOR . '/another/path');

질문 2 : 포함 () include includative 경로를 사용하여 재정의 _path 검색 로직

config/config.php가 이미 포함 된 경우에도 포함 ( 'config/config.php') 이 호출되면 ( 'config/config.php ')가 호출되면 현재 스크립트 디렉토리에 따라 먼저 시작됩니다. 현재 디렉토리 구조가 올바르지 않으면 "파일을 찾을 수 없음"의 오류로 이어집니다.

해결책:

경로에서 디렉토리 부분을 제거하고 include_path를 적용하십시오. 예를 들어:

 include('config.php'); // config.php 이미 여기 include_path 길에서

질문 3 : 파일이 실제로 존재하지 않거나 권한이 충분하지 않습니다.

include_path가 올바르게 설정 되더라도 파일이 존재하지 않거나 읽기 권한이없는 경우에도 여전히 실패합니다.

문제 해결 제안 :

  • 파일 경로가 올바른지 확인하려면 명령 줄에서 ls 또는 file_exists () 로 확인할 수 있습니다.

 echo file_exists('/path/to/config.php') ? 'found' : 'not found';
  • PHP 사용자가 읽기 권한이 있는지 확인하려면 서버 권한 설정을 확인하십시오.

문제 4 : 파일을 포함한 URL을 사용할 때 구성이 활성화되지 않습니다.

PHP는 다음과 같은 URL을 통한 원격 파일을 포함하는 지원입니다.

 include('http://gitbox.net/includes/header.php');

이 기능은 두 개의 구성 항목 allow_url_includeallow_url_fopen 에 의존하며 많은 서버가 기본적으로 폐쇄 된 상태에 있습니다.

해결책:

php.ini 에서 이러한 설정을 활성화하십시오.

 allow_url_fopen = On
allow_url_include = On

그러나 보안상의 이유로, 특히 HTTP 프로토콜을 사용하여 생산 환경에서 URL 포함을 가능하게하는 것이 권장되지 않습니다.

3. 권장 연습

  • 절대 경로를 사용 하거나 __dir__ 상수를 사용하여 상대 경로를 구축하십시오.

     include(__DIR__ . '/includes/config.php');
    
  • 포함 _Path 사용 자동로드 또는 프레임 워크 : 최신 프레임 워크는 일반적으로 PSR-4와 같은 자동로드 메커니즘을 사용하여 클래스 파일이 위치한 경로를 자동으로 찾아 오류를 포함하지 않습니다.

  • 배포 단계에서 _path 설정 포함 : 개발 및 생산 환경의 경로는 종종 다릅니다. 온라인으로 가기 전에 완전한 경로 테스트를 수행하는 것이 좋습니다.

요약

get_include_path ()는 포함 된 () 와 충돌하지 않지만, 그것을 사용하는 잘못된 방법은 그들이 "싸우는"것처럼 보이게 만듭니다. 검색 메커니즘과로드 순서를 이해하는 것이 문제를 해결하는 데 핵심입니다. 합리적으로 포함하여 _path를 설정하면, 쓰기에는 경로가 올바르게 포함되며 원격 파일을 포함하는 URL을 사용하지 않으면 코드의 견고성과 보안이 크게 향상 될 수 있습니다.