by longnetpro
인용문:
PERL 및 PHP의 포함 경로는 주로 운영 체제 및 웹 서버와 관련된 어려운 문제였습니다. 이 경로 문제를 매우 지능적으로 해결하는 것은 불가능합니다. PERL에 비해 PHP의 경로는 훨씬 더 좋고 해결하기가 훨씬 쉽습니다. 왜냐하면 특정 명령문에서 절대 경로를 사용해야 하는 PERL과 달리 PHP의 상대 경로는 PHP 프로그램에서 언제든지 사용할 수 있기 때문에 이식이 매우 복잡하기 때문입니다. .
이를 바탕으로 PHP에서는 아래와 같이 절대적으로 견고한 솔루션을 설계했습니다.
원칙적으로:
상대 경로를 사용하되, 상대 경로 내에 절대 경로를 사용합니다(조금 복잡합니다. 나중에 자세히 설명합니다). 둘째, 쉽게 수정할 수 있습니다. 셋째, 공식적이고 명확한 구조를 가지고 있습니다. 확장하다.
세부 단계:
1. 먼저 프로그램의 루트 디렉터리를 결정합니다. 이 디렉터리는 웹 서버 아래의 가상 디렉터리가 아니라 파일 시스템 아래에 있습니다. 그러나 일반적으로 해당 디렉터리 아래의 하위 디렉터리의 상대 경로는 해당 디렉터리 아래의 가상 하위 디렉터리와 동일합니다. URL.
2. 정의된 프로그램 루트 디렉토리 아래의 각 하위 디렉토리에 settings.php를 생성하고(실제로 필요에 따라 모든 디렉토리에 있을 필요는 없음) 그 안에 변수나 상수를 정의합니다(범위가 더 크기 때문에 상수가 더 좋습니다). APPROOT이지만 이 APPROOT는 절대 경로가 아니라 지정한 프로그램 루트 디렉터리에 대한 상대 디렉터리의 경로입니다.
3. 이 디렉토리에 있는 모든 프로그램 항목 파일(즉, 다른 파일이 포함된 첫 번째 파일 또는 브라우저에서 직접 탐색을 허용하는 파일)의 첫 번째 문장에 require_once('settings.php');를 작성하십시오. 포함된 모든 파일에 이 문장을 추가하지 않는 것이 가장 좋습니다. 사실 추가해도 괜찮습니다. if(!defined(APPROOT)) 정의(APPROOT, '../. .'); 이러한 유형의 명령문은 재정의를 방지합니다.
4. 직접 또는 간접적으로 다른 파일을 포함하려면 include(APPROOT.$path);를 작성할 수 있습니다. 여기서 $path는 지정한 프로그램 루트 디렉터리를 기준으로 포함된 파일의 절대 경로입니다.
원칙:
결정된 프로그램 루트 디렉터리는 상대 경로이지만 특정 디렉터리 위치는 해당 루트 디렉터리에 대한 절대 경로입니다. 이 둘의 조합은 프로그램 루트 디렉터리에 대한 특정 파일의 상대 경로입니다. 예를 들어 c:wwwrootapp 디렉토리는 지정한 프로그램 루트 디렉토리이고 c:wwwrootappaindex.php 및 c:wwwrootappbinc.php라는 두 개의 파일이 있습니다. . 하위 디렉터리 a의 경우 APPROOT는 '..'이고, 프로그램 루트 디렉터리의 경우 inc.php의 절대 경로는 $path='/b/inc.php'이며 이 둘의 조합은 '../b /inc.php'. index.php에 inc.php를 포함시키려면 include('../b/inc.php');라고 작성해야 하는데, 이 경로는 방금 결합한 APPROOT.$path가 아닌가요?
결론적으로:
위의 처리 후 각 경로는 매우 깔끔하고 균일합니다. 약간 번거로운 점은 APPROOT가 각 디렉터리에 정의되어야 하지만 각 디렉터리의 settings.php에서 한 번만 정의하면 된다는 것입니다. 예배 규칙서. 전체 프로그램에 index.php와 같은 항목 파일이 하나만 있고 다른 모든 파일이 이 유일한 항목 파일에 직접 또는 간접적으로 포함되어 있는 경우 index.php가 있는 디렉터리에 settings.php만 추가하면 됩니다. 한 번이면 괜찮습니다. 친구가 Delphi 프로젝트를 수행하고 프로젝트 파일을 연구한 경우 프로그램에 메인 항목 파일이 하나만 있다고 방금 언급한 상황이 Delphi 프로젝트와 매우 유사하다는 것을 알게 될 것입니다. 왜냐하면 Delphi에는 메인 프로그램 파일(dpr)이 하나만 있기 때문입니다. file) , 나머지는 모두 유닛 파일 또는 리소스 파일로, 독립적으로 실행될 수 없습니다. PHP에서는 이러한 상황이 발생하면 APPROOT를 한 번만 정의하고 기본 프로그램 파일의 첫 번째 문장에 require_once('settings.php')를 작성하면 이후의 모든 포함은 include(APPROOT.$ 경로)를 사용할 수 있습니다. ;, "프로그램 루트 디렉토리에 상대적인 파일의 절대 경로 포함" $path를 작성하지 않는 한 문제가 없음이 보장됩니다.
나는 이 방법을 여러 번 사용해 보았는데 좋은 결과를 얻었습니다. 또한 JSP의 WEB-INFO에서 경로가 정의된 방식을 참고할 수도 있습니다.
이는 끊임없이 변화하는 변화에 대응하여 변함없이 유지되는 공식적인 계획입니다. 더 나은 계획이 있다면 자유롭게 논의해 주세요! 이해가 안 되는 부분이 있으면 언제든지 질문해 주세요.