Table of Contents
Summary of require and include path issues in PHP, requireinclude
1 Absolute path, relative path and undetermined path
2. Relative path:
3. Absolute path
4. Undetermined path
Test environment description
5. Solution
Home Backend Development PHP Tutorial Summary of require and include path issues in PHP, requireinclude_PHP tutorial

Summary of require and include path issues in PHP, requireinclude_PHP tutorial

Jul 13, 2016 am 10:11 AM
include

Summary of require and include path issues in PHP, requireinclude

1 Absolute path, relative path and undetermined path

Relative path

Relative paths refer to paths starting with ., such as

<code>./a/a.php (相对当前目录)    
../common.inc.php (相对上级目录),
</code>
Copy after login

Absolute path

The absolute path is a path starting with / or a drive letter similar to C:/ under Windows. The full path can uniquely determine the final address of the file without any reference path. For example

<code>/apache/wwwroot/site/a/a.php
c:/wwwroot/site/a/a.php</code>
Copy after login

Undetermined path

Any path that does not start with . or /, nor does it start with drive letter:/ under Windows, such as

<code>a/a.php  
common.inc.php,
</code>
Copy after login

At first I thought this was also a relative path, but in PHP’s include/require mechanism, this type of path is handled completely differently from relative paths starting with . require './a.php' and require 'a.php' are different!

Let’s analyze the processing methods of these three types of include paths: First, remember a conclusion: if the include path is a relative path or an absolute path, it will not go to include_path (the include_path environment variable defined in php.ini, or in the program Use set_include_path(...) to find the file.

Test environment description

Note: The following discussion and conclusion are based on this environment: Assume A=http://www.xxx.com/app/test/a.php. Again, it is emphasized that the following discussion is for direct Access to A.

2. Relative path:

A relative path requires a reference directory to determine the final path of the file. In include parsing, no matter how many levels of nesting are included, this reference directory is The directory where the program execution entry file is located.

Example 1

<code>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
</code>
Copy after login

Example 2

<code>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 
</code>
Copy after login

Example 3

<code>A中定义  require '../b.php';   //则B=[SITE]/app/b.php 
B中定义  require '../c.php';   //则C=[SITE]/app/c.php  不是 [SITE]/c.php 
</code>
Copy after login

Example 4:

<code>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 
</code>
Copy after login

Example 5

<code>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 
</code>
Copy after login

Example 6

<code>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 
</code>
Copy after login

3. Absolute path

Absolute paths are relatively simple and less likely to cause confusion and errors. require|inclue corresponds to files on the disk.

<code>require '/wwwroot/xxx.com/app/test/b.php';    // Linux中
require 'c:/wwwroot/xxx.com/app/test/b.php';  // windows中</code>
Copy after login

dirname(__FILE__) is also calculated as a directory in the form of an absolute path, but please note that __FILE__ is a Magic constants, which is equal to the location of the php file where this statement is written at any time. Absolute path, so dirname(__FILE__) always points to the absolute path of the php file where this statement is written, and has nothing to do with whether this file is included and used by other files.

Example 1

<code>A中定义  require '../b.php';                  // 则B=[SITE]/app/b.php
B中定义  require dirname(__FILE__).'/c.php';  // 则B=[SITE]/app/c.php
</code>
Copy after login

Example 2

<code>A中定义  require '../inc/b.php';              // 则B=[SITE]/app/inc/b.php
B中定义  require dirname(__FILE__).'/c.php';  // 则B=[SITE]/app/inc/c.php 始终跟B在同一个目录
</code>
Copy after login

Conclusion: No matter whether B is included and used by A, or directly accessed

<code>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文件;</code>
Copy after login

4. Undetermined path

First, use the include directories defined in include_path to splice [undetermined path] one by one. If an existing file is found, the include will exit successfully. If it is not found, use the directory where the php file that executes the require statement is located to splice [undetermined path] ] to search for the file. If the file exists, it will exit successfully. Otherwise, it means the file does not exist and an error will occur. Undetermined paths are easy to confuse and are not recommended.

5. Solution

Since the "reference directory" in "relative path" is the directory where the execution entry file is located , the "undetermined" path is also easier to confuse, so is the best The solution is to use the "absolute path" ; For example, the content of b.php is as follows. No matter where you require b.php, you will require the path of b.php as a reference to require c.php

<code>$dir = dirname(__FILE__);
require($dir . '../c.php');
</code>
Copy after login

Or define a general function import.php, set it to "automatically import files in advance", and make the following configuration in php.ini

<code>更改配置项(必须)auto_prepend_file = "C:\xampp\htdocs\auto_prepend_file.php"
更改配置项(可选)allow_url_include = On
</code>
Copy after login

The content of import.php is as follows

<code>function import($path) {    
    $old_dir = getcwd();        // 保存原&ldquo;参照目录&rdquo;
    chdir(dirname(__FILE__));    // 将&ldquo;参照目录&rdquo;更改为当前脚本的绝对路径
    require_once($path);
    chdir($old_dir);            // 改回原&ldquo;参照目录&rdquo;
}
</code>
Copy after login

In this way, you can use the import() function to require the file. No matter how many levels of "reference directories" it contains, it is the current file

Reference article: Experience summary of PHP’s require and include path issues

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/930707.htmlTechArticleSummary of require and include path problems in PHP, requireinclude 1 absolute path, relative path and undetermined path relative path relative path Refers to the path starting with ., such as ./a/a.php (relative to...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

Describe the SOLID principles and how they apply to PHP development. Describe the SOLID principles and how they apply to PHP development. Apr 03, 2025 am 12:04 AM

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

How to automatically set permissions of unixsocket after system restart? How to automatically set permissions of unixsocket after system restart? Mar 31, 2025 pm 11:54 PM

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

Explain the concept of late static binding in PHP. Explain the concept of late static binding in PHP. Mar 21, 2025 pm 01:33 PM

Article discusses late static binding (LSB) in PHP, introduced in PHP 5.3, allowing runtime resolution of static method calls for more flexible inheritance.Main issue: LSB vs. traditional polymorphism; LSB's practical applications and potential perfo

How to send a POST request containing JSON data using PHP's cURL library? How to send a POST request containing JSON data using PHP's cURL library? Apr 01, 2025 pm 03:12 PM

Sending JSON data using PHP's cURL library In PHP development, it is often necessary to interact with external APIs. One of the common ways is to use cURL library to send POST�...

How to debug CLI mode in PHPStorm? How to debug CLI mode in PHPStorm? Apr 01, 2025 pm 02:57 PM

How to debug CLI mode in PHPStorm? When developing with PHPStorm, sometimes we need to debug PHP in command line interface (CLI) mode...

Framework Security Features: Protecting against vulnerabilities. Framework Security Features: Protecting against vulnerabilities. Mar 28, 2025 pm 05:11 PM

Article discusses essential security features in frameworks to protect against vulnerabilities, including input validation, authentication, and regular updates.

See all articles