디렉토리가 3 개 이상인 파일을 어떻게 포함합니까? ../index.php
2 개의 디렉토리가있는 파일을 포함하는 데 사용할 수 있다는 것을 알고 있지만 3 개의 디렉토리에 대해 어떻게 수행합니까? 이게 말이 돼? 시도 .../index.php
했지만 작동하지 않습니다.
파일이 /game/forum/files/index.php
있고 PHP include를 사용하여 파일을 포함합니다. 에 위치한 /includes/boot.inc.php
; /
루트 디렉토리입니다.
답변
..
현재에서 상위 디렉토리를 선택합니다. 물론 다음과 같이 연결할 수 있습니다.
../../index.php
이것은 두 개의 디렉토리가 될 것입니다.
답변
한 디렉토리 뒤로 파일을 포함하려면 '../file'
. 두 개의 디렉토리를 다시 사용하려면 '../../file'
. 등등.
그러나 현실적으로 현재 디렉토리를 기준으로 include를 수행해서는 안됩니다. 해당 파일을 이동하려면 어떻게해야합니까? 모든 링크가 끊어집니다. 파일을 이동하는 경우 해당 링크를 유지하면서 다른 파일에 링크 할 수 있도록하는 방법은 다음과 같습니다.
require_once($_SERVER['DOCUMENT_ROOT'] . 'directory/directory/file');
DOCUMENT_ROOT
코드가있는 기본 디렉토리를 나타내는 서버 변수입니다.
답변
. = current directory
.. = parent directory
따라서 두 개가 아닌 하나의 디렉토리를 다시../
가져 옵니다 .
체인 ../
필요한만큼 여러 번 같은 2 개 이상의 수준을 이동합니다.
답변
include dirname(__FILE__).'/../../index.php';
여기서 가장 좋은 방법이며 다른 솔루션에서 발생할 수있는 상대 경로 버그의 대부분을 피할 수 있습니다.
실제로이 코드가 배치 된 현재 스크립트의 위치 (애플리케이션의 아키텍처를 정의하기 때문에 가장 안정적인 위치) 에 항상 상대적으로 포함되도록 강제합니다 . 이것은 include '../../index.php'
실행 ( “호출”이라고도 함) 스크립트에 상대적으로 포함 된 다음 상대적으로 현재 작업 디렉토리 를 포함하는 작업과 다릅니다. 포함 된 스크립트 경로에서 확인하는 대신 스크립트를 포함하는 상위 스크립트를 가리 킵니다. .
PHP 문서에서 :
파일은 주어진 파일 경로 또는 지정된 경로가 없으면 include_path를 기반으로 포함됩니다. include_path에서 파일을 찾을 수 없으면 include는 실패하기 전에 마지막으로 호출 스크립트의 자체 디렉토리와 현재 작업 디렉토리를 확인합니다.
이 트릭을 인용 한 가장 오래된 게시물은 2003 년 Tapken의 게시물 입니다.
다음 설정으로 테스트 할 수 있습니다.
다음과 같은 레이아웃을 만듭니다.
htdocs
¦ parent.php
¦ goal.php
¦
+---sub
¦ included.php
¦ goal.php
에 다음 parent.php
을 입력하십시오.
<?php
include dirname(__FILE__).'/sub/included.php';
?>
에 다음 sub/included.php
을 입력하십시오.
<?php
print("WRONG : " . realpath('goal.php'));
print("GOOD : " . realpath(dirname(__FILE__).'/goal.php'));
?>
액세스시 결과 parent.php
:
WRONG : X:\htdocs\goal.php
GOOD : X:\htdocs\sub\goal.php
보시다시피 첫 번째 경우 경로는 호출하는 스크립트에서 확인되는 parent.php
반면 dirname(__FILE__).'/path'
트릭 을 사용 included.php
하면 코드가 있는 스크립트 에서 포함이 수행 됩니다.
다음은 다른 곳에서 읽을 수있는 것과는 반대로 위의 트릭과 동일하지 않습니다.
include '/../../index.php';
실제로 prepending /
은 작동하지만 include ../../index.php
호출 스크립트 에서처럼 해결 됩니다 (차이점은 include_path
실패 할 경우 나중에 표시되지 않는다는 것입니다). PHP 문서에서 :
경로가 정의 된 경우 (Windows에서 드라이브 문자 또는 \로 시작하거나 Unix / Linux 시스템에서 /로 시작) 또는 현재 디렉토리 (. 또는 ..로 시작)에 상대적인지 여부에 관계없이 include_path가 모두 무시됩니다.
답변
../
하나의 디렉토리, 두 개의 디렉토리 ../../
또는 심지어 세 개의 디렉토리에 대해 반복합니다 ../../../
.
상수를 정의하면 디렉토리 구절을 거꾸로 드릴 수 있으므로 혼동을 줄일 수 있습니다.
다음과 같이 몇 가지 상수를 정의 할 수 있습니다.
define('BD', '/home/user/public_html/example/');
define('HTMLBD', 'http://example.com/');
‘BD’또는 ‘기본 디렉터리’를 사용하면 다음과 같이 보입니다.
file(BD.'location/of/file.php');
답변
../../index.php
답변
../../../includes/boot.inc.php
의 각 인스턴스는 ../
하나의 디렉토리를 백업 / 백업하는 것을 의미합니다.
