[php] 2 개의 디렉토리에 파일을 포함하려면 어떻게해야합니까?

디렉토리가 3 개 이상인 파일을 어떻게 포함합니까? ../index.php2 개의 디렉토리가있는 파일을 포함하는 데 사용할 수 있다는 것을 알고 있지만 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

의 각 인스턴스는 ../하나의 디렉토리를 백업 / 백업하는 것을 의미합니다.