php를 사용하여 개발할 때 get_include_path () 와 포함 ()은 종종 함께 나타나는 두 가지 기능입니다. 그러나 경우에 따라 개발자는 혼란스러운 문제에 직면 할 수 있습니다. 경로는 포함 _path에 추가되었지만 포함 ()을 사용하여 파일을 찾을 수 없습니다. 이 "충돌"은 실제로 몇 가지 일반적인 이유로 인해 발생합니다. 이 기사는 솔루션을 하나씩 분석하고 제공합니다.
PHP의 포함 () 함수는 지정된 파일을 다음 순서로 찾습니다.
상대 경로 사용 (현재 파일의 디렉토리와 관련하여)
현재 스크립트가있는 디렉토리를 찾으십시오
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');
때로는 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');
config/config.php가 이미 포함 된 경우에도 포함 ( 'config/config.php') 이 호출되면 ( 'config/config.php ')가 호출되면 현재 스크립트 디렉토리에 따라 먼저 시작됩니다. 현재 디렉토리 구조가 올바르지 않으면 "파일을 찾을 수 없음"의 오류로 이어집니다.
해결책:
경로에서 디렉토리 부분을 제거하고 include_path를 적용하십시오. 예를 들어:
include('config.php'); // config.php 이미 여기 include_path 길에서
include_path가 올바르게 설정 되더라도 파일이 존재하지 않거나 읽기 권한이없는 경우에도 여전히 실패합니다.
문제 해결 제안 :
파일 경로가 올바른지 확인하려면 명령 줄에서 ls 또는 file_exists () 로 확인할 수 있습니다.
echo file_exists('/path/to/config.php') ? 'found' : 'not found';
PHP 사용자가 읽기 권한이 있는지 확인하려면 서버 권한 설정을 확인하십시오.
PHP는 다음과 같은 URL을 통한 원격 파일을 포함하는 지원입니다.
include('http://gitbox.net/includes/header.php');
이 기능은 두 개의 구성 항목 allow_url_include 및 allow_url_fopen 에 의존하며 많은 서버가 기본적으로 폐쇄 된 상태에 있습니다.
해결책:
php.ini 에서 이러한 설정을 활성화하십시오.
allow_url_fopen = On
allow_url_include = On
그러나 보안상의 이유로, 특히 HTTP 프로토콜을 사용하여 생산 환경에서 URL 포함을 가능하게하는 것이 권장되지 않습니다.
절대 경로를 사용 하거나 __dir__ 상수를 사용하여 상대 경로를 구축하십시오.
include(__DIR__ . '/includes/config.php');
포함 _Path 사용 자동로드 또는 프레임 워크 : 최신 프레임 워크는 일반적으로 PSR-4와 같은 자동로드 메커니즘을 사용하여 클래스 파일이 위치한 경로를 자동으로 찾아 오류를 포함하지 않습니다.
배포 단계에서 _path 설정 포함 : 개발 및 생산 환경의 경로는 종종 다릅니다. 온라인으로 가기 전에 완전한 경로 테스트를 수행하는 것이 좋습니다.
get_include_path ()는 포함 된 () 와 충돌하지 않지만, 그것을 사용하는 잘못된 방법은 그들이 "싸우는"것처럼 보이게 만듭니다. 검색 메커니즘과로드 순서를 이해하는 것이 문제를 해결하는 데 핵심입니다. 합리적으로 포함하여 _path를 설정하면, 쓰기에는 경로가 올바르게 포함되며 원격 파일을 포함하는 URL을 사용하지 않으면 코드의 견고성과 보안이 크게 향상 될 수 있습니다.