source

PHP에 상대 경로 포함

factcode 2022. 11. 5. 08:54
반응형

PHP에 상대 경로 포함

/root/update/test.php 파일이 있습니다.파일 /root/connect.php도 있습니다.이 파일에는 행이 있습니다.

include "../config.php";

/root/update/test.php에 있습니다.여기 코드가 있습니다.

set_include_path(".:/root");
include "connect.php";

/root/update/test.php를 실행하면 connect.php를 찾을 수 없지만 config.php를 찾을 수 없기 때문에

PHP Warning:  include(../config.php): failed to open stream: No such file or directory in /root/connect.php on line 2
PHP Warning:  include(): Failed opening '../config.php' for inclusion (include_path='.:/root')

경고로 인해 모든 것이 올바르게 수행되고 있는 것처럼 보이기 때문에 혼란스럽습니다.포함 경로는 /root이며, 존재하는 파일 ../config.php(/config.php)를 찾고 있습니다.누가 이것 좀 정리해 주시겠어요?액세스 권한이 없는 프로덕션 서버에 배포하기 때문에 절대 경로를 사용할 수 없습니다.

우분투/아파체

다음을 사용하여 언제든지 포함할 수 있습니다.__DIR__:

include(dirname(__DIR__).'/config.php');

__DIR__는 '상수'로 후행 슬래시 없이 현재 파일의 디렉토리를 반환합니다.실제로는 절대 경로입니다.파일명을 연결하기만 하면 됩니다.__DIR__이 경우 디렉토리의 상승이 필요하기 때문에 PHP를 사용합니다.dirname파일 트리가 올라갑니다.여기서 액세스 할 수 있습니다config.php.

다음 방법으로 루트 경로를 설정할 수도 있습니다.

define('ROOT_PATH', dirname(__DIR__) . '/');

테스트 중.php는 root을 root로 설정합니다./root/수평을 유지.

include(ROOT_PATH.'config.php');

그런 다음 원하는 위치에서 구성 파일을 포함하도록 작업합니다.

절대 경로가 옵션이 아니라고 생각하시는 것은 감사하지만, 상대 경로 및 PHP include 경로 업데이트보다 더 나은 옵션입니다.

환경에 따라 설정할 수 있는 상수가 있는 절대 경로를 사용합니다.

if (is_production()) {
    define('ROOT_PATH', '/some/production/path');
}
else {
    define('ROOT_PATH', '/root');
}

include ROOT_PATH . '/connect.php';

코멘트대로ROOT_PATH또한 현재 경로에서 파생될 수 있습니다.$_SERVER['DOCUMENT_ROOT'],기타.

function relativepath($to) {
    $a=explode("/",$_SERVER["PHP_SELF"] );
    $index= array_search("$to",$a);
    $str=""; 
    for ($i = 0; $i < count($a)-$index-2; $i++) {
        $str.= "../";
    }
    return $str;
}

이 문제에 대한 최선의 해결책은 다음과 같습니다. 정지할 수준을 지정하기만 하면 됩니다. 하지만 문제는 이 폴더 이름을 한 번 사용해야 한다는 것입니다.

언급URL : https://stackoverflow.com/questions/17407664/php-include-relative-path

반응형