>백엔드 개발 >PHP 문제 >PHP의 상대 디렉터리를 열 수 없으면 어떻게 해야 합니까?

PHP의 상대 디렉터리를 열 수 없으면 어떻게 해야 합니까?

藏色散人
藏色散人원래의
2022-12-01 09:25:425860검색

열 수 없는 PHP 상대 디렉터리에 대한 해결 방법: 1. "절대 경로"를 사용합니다. 2. 일반 함수 import.php를 정의하고 "자동으로 파일을 미리 가져오기"로 설정한 다음 php.ini의 내용을 다음과 같이 수정합니다. "auto_prepend_file = "C:xampphtdocsauto_prepend_file.php""이면 충분합니다.

PHP의 상대 디렉터리를 열 수 없으면 어떻게 해야 합니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, PHP 버전 8.1, Dell G3 컴퓨터.

php 상대 디렉토리를 열 수 없습니까? PHP

1의 필수 및 포함 경로 문제 요약

1 절대 경로, 상대 경로 및 미확인 경로

상대 경로

상대 경로는

./a/a.php (相对当前目录)    
../common.inc.php (相对上级目录),
절대 경로

와 같이 .로 시작하는 경로를 나타냅니다. 또는 Windows에서 C:/는 드라이브 문자로 시작하는 유사한 경로이며, 전체 경로는 참조 경로 없이 파일의 최종 주소를 고유하게 결정할 수 있습니다. 예를 들어

/apache/wwwroot/site/a/a.php
c:/wwwroot/site/a/a.php
Undetermined path

. 또는 /로 시작하지 않거나 Windows 드라이브 문자:/로 시작하지 않는 경로(예:

a/a.php  
common.inc.php,
처음에는 이것도 상대 경로인 줄 알았습니다. 그러나 php 의 include/require 포함 메커니즘에서 이러한 유형의 경로는 로 시작하는 상대 경로 처리와 완전히 다릅니다.

require './a.php'와 require 'a.php'는 다릅니다!

세 가지 유형의 포함 경로가 처리되는 방식을 분석해 보겠습니다. 먼저 한 가지 결론을 기억하세요. 포함 경로가 상대 경로이거나 절대 경로인 경우 include_path(php.ini에 정의된 include_path 환경 변수)로 이동하지 않습니다. , 또는 프로그램에서 파일을 찾으려면 set_include_path(...)를 사용하십시오.

테스트 환경 설명

참고: 다음 토론과 결론은 이 환경을 기반으로 합니다. A=http://www.xxx.com

/app/test/

a.php를 가정하고, 다음 토론은 다음과 같다는 점을 다시 강조합니다. A에 직접 액세스하려면

2. 상대 경로: 파일의 최종 경로를 결정하려면 참조 디렉터리가 필요합니다.

포함된 중첩 수준에 관계없이 이 참조 디렉터리는 프로그램 실행 항목 파일이 있는 디렉토리

.

예제 1

A中定义  require './b/b.php';  // 则B=[SITE]/app/test/b/b.php
B中定义  require './c.php';    // 则C=[SITE]/app/test/c.php 不是[SITE]/app/test/b/c.php
예제 2

A中定义  require './b/b.php';  // 则B=[SITE]/app/test/b/b.php 
B中定义  require '../c.php';   // 则C=[SITE]/app/c.php  不是 [SITE]/app/test/c.php
예제 3

A中定义  require '../b.php';   //则B=[SITE]/app/b.php 
B中定义  require '../c.php';   //则C=[SITE]/app/c.php  不是 [SITE]/c.php
예제 4:

A中定义  require '../b.php';   // 则B=[SITE]/app/b.php 
B中定义  require './c/c.php';  / /则C=[SITE]/app/test/c/c.php  不是 [SITE]/app/c/c.php
예제 5

A中定义  require '../inc/b.php';  // 则B=[SITE]/app/inc/b.php 
B中定义  require './c/c.php';     // 则C还是=[SITE]/app/test/c/c.php  不是 [SITE]/app/inc/c/c.php

예제 6

A中定义  require '../inc/b.php';  // 则B=[SITE]/app/inc/b.php 
B中定义  require './c.php';       // 则C=[SITE]/app/test/c.php  不是 [SITE]/app/inc/c.php
3. 용질 경로는 상대적으로 단순하고 혼동하기 쉽지 않습니다. 실수를 하세요. require|inclue는 디스크의 파일에 해당합니다.

require '/wwwroot/xxx.com/app/test/b.php';    // Linux中
require 'c:/wwwroot/xxx.com/app/test/b.php';  // windows中
dirname(__FILE__)도 절대 경로 형태의 디렉터리로 계산되지만 __FILE__는 Magic 상수로 이 구문이 작성된 php 파일의 절대 경로와 동일하다는 점에 유의하세요. 따라서 dirname(__FILE__)은 항상 이 명령문이 작성된 PHP 파일의 절대 경로를 가리키며 해당 파일이 다른 파일에 포함되어 사용되는지 여부와는 아무런 관련이 없습니다.

예제 1

A中定义  require '../b.php';                  // 则B=[SITE]/app/b.php
B中定义  require dirname(__FILE__).'/c.php';  // 则B=[SITE]/app/c.php
예제 2

A中定义  require '../inc/b.php';              // 则B=[SITE]/app/inc/b.php
B中定义  require dirname(__FILE__).'/c.php';  // 则B=[SITE]/app/inc/c.php 始终跟B在同一个目录
결론: B가 A에 포함되어 사용되거나 직접 액세스되는

B如果 require dirname(__FILE__).'/c.php';    // 则始终引用到跟B在同一个目录中的 c.php文件; 
B如果 require dirname(__FILE__).'/../c.php'; // 则始终引用到B文件所在目录的父目录中的 c.php文件; 
B如果 require dirname(__FILE__).'/c/c.php';  // 则始终引用到B文件所在目录的c子目录中的 c.php文件;

4 경로가 결정되지 않음

먼저, include_path에 정의된 포함 디렉터리를 사용하여 하나씩 연결합니다. 하나 [Unknown 경로 확인], 기존 파일이 발견되면 성공적인 종료를 포함합니다. 찾을 수 없으면 require 문을 실행하는 php 파일이 있는 디렉터리를 사용하여 [ 로 구성된 전체 경로를 연결합니다. undetermined path] 파일을 찾으려면 해당 파일이 있으면 성공적인 종료가 포함되고, 그렇지 않으면 포함된 파일이 존재하지 않고 오류가 발생한다는 의미입니다. 확인되지 않은 경로는 혼동되기 쉬우므로 권장되지 않습니다.

5. 해결 방법

"상대 경로"의 "참조 디렉터리"는 실행 항목 파일이 있는 디렉터리이므로 "결정되지 않은" 경로도 혼동하기 쉽기 때문에 최선의 해결책은 다음과 같습니다. "절대 경로" 를 사용합니다. 예를 들어, b.php가 필요한 위치에 관계없이 b.php의 경로는 c.php

$dir = dirname(__FILE__);
require($dir . '../c.php');

를 요구하는 참조로 사용됩니다. 일반 함수 import.php가 정의되어 있고 "미리 자동으로 파일 가져오기"로 설정하고 php.ini

更改配置项(必须)auto_prepend_file = "C:\xampp\htdocs\auto_prepend_file.php"
更改配置项(可选)allow_url_include = On

에서 다음과 같이 구성합니다. import.php의 내용은 다음과 같습니다

function import($path) {    
    $old_dir = getcwd();        // 保存原“参照目录”
    chdir(dirname(__FILE__));    // 将“参照目录”更改为当前脚本的绝对路径
    require_once($path);
    chdir($old_dir);            // 改回原“参照目录”
}

이렇게 하면 현재 파일

권장 학습: "PHP 비디오 튜토리얼"

을 포함하는 "참조 디렉토리"의 수준에 관계없이 파일을 요구하려면 import() 함수를 사용하십시오.

위 내용은 PHP의 상대 디렉터리를 열 수 없으면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.