PHP의 필수 및 포함 경로 문제에 대한 코드 예제

怪我咯
풀어 주다: 2023-03-12 20:24:01
원래의
1440명이 탐색했습니다.

이 글은 주로 require에 대한 자세한 설명과 PHP의 포함 경로 문제를 소개합니다. 매우 상세합니다. 필요한 친구는

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의 포함/요구 포함 메커니즘에서는 이 유형의 경로가 . 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에는 '../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에는 './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 정의에는 '../inc/가 필요합니다. b.php'; // 그러면 B=[SITE]/app/inc/b.php

B의 정의는 './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은 매직 상수이며 이는 이 명령문이 작성된 PHP 파일의 절대 경로와 동일하다는 점에 유의해야 합니다. time이므로 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는 require를 정의합니다. dirname(FILE).'/c.php'; // 그러면 B=[SITE]/app/inc/c.php는 항상 B와 같은 디렉토리에 있습니다.

결론: A에 B가 포함되어 있어도 사용하지 않으면 됩니다. 직접 접속

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中定义的包含目录来拼接[未确定路径],找到存在的文件则包含成功退出,如果没有找到,则用执行require语句的php文件所在目录来拼接[未确定路径]组成的全路径去查找该文件,如果文件存在则包含成功退出,否则表示包含文件不存在,出错。 未确定路径比较容易搞混不建议使用。

5. 解决方案

由于“相对路径”中的“参照目录”是执行入口文件所在目录,“未确定”路径也比较容易混淆,因此最好的解决方法是使用“绝对路径”; 例如b.php的内容如下,无论在哪里require b.php都是以b.php的路径为参照来require 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);            // 改回原“参照目录”
}
로그인 후 복사

这样就可以使用import()函数来require文件了,无论包含多少级“参照目录”都是当前文件

위 내용은 PHP의 필수 및 포함 경로 문제에 대한 코드 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!