PHP의 필수 및 포함 경로 문제에 대한 코드 예제
이 글은 주로 require에 대한 자세한 설명과 PHP의 포함 경로 문제를 소개합니다. 매우 상세합니다. 필요한 친구는
1 절대 경로, 상대 경로 및 미정 경로
상대 경로를 참조하세요.
상대 경로는 .로 시작하는 경로를 나타냅니다. 예를 들어 코드는 다음과 같습니다.
./a/a.php (相对当前目录) ../common.inc.php (相对上级目录),
절대 경로는 Windows 또는 유사한 드라이브 문자에서 / 또는 C:/로 시작하는 경로입니다. 전체 경로에는 참조가 필요하지 않습니다. 경로는 파일의 최종 주소를 고유하게 결정할 수 있습니다. 예를 들어
코드는 다음과 같습니다.
/apache/wwwroot/site/a/a.php c:/wwwroot/site/a/a.php
. 또는 /로 시작하지 않거나 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절대 경로는 비교적 간단하고 오류가 발생하기 쉽지 않으며 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다
