PHP包括另一个目录中也包含文件的文件

use*_*599 2 php directory include

我已经包含多个文件,我最近开始了一个新目录,我无法让我的一些包含工作.

例如,我在postpage.php中包含了这个,它位于example.com/c/postpage.php:

include '../includes/overall/header.php';
Run Code Online (Sandbox Code Playgroud)

它的工作原理是它进入根目录并包含header.php但我的问题是header.php还包括未包含的文件.

header.php中的代码是:

include 'includes/head.php';
Run Code Online (Sandbox Code Playgroud)

这是行不通的

如果我将header.php更改为:

include '../includes/head.php';
Run Code Online (Sandbox Code Playgroud)

然后它打破了我网站的其余部分,同时只为postpage.php工作

欢迎任何建议.

Tiv*_*vie 6

防止可能破坏相对路径的CWD更改的最佳方法是使用绝对路径包含文件.

一个简单的方法是使用__DIR__常量.

例:

文件结构:

serverRoot (/)
    |-usr
        |-local
            |-www
                |-index.php
                |-bootstrap.php
                |-includes
                    |-a.php
                    |-overall
                        |-b.php
                        |-c.php
Run Code Online (Sandbox Code Playgroud)

让我们说:

  • index.php包括bootstrap.phpa.php
  • a.php包括b.php
  • bootstrap.php包含c.php

的index.php

$basedir = realpath(__DIR__);
include($basedir . '/bootstrap.php');
include($basedir . '/includes/a.php');
Run Code Online (Sandbox Code Playgroud)

a.php只会

global $basedir;
include($basedir . '/includes/overall/b.php');
Run Code Online (Sandbox Code Playgroud)

bootstrap.php中

global $basedir;
include($basedir . '/includes/overall/c.php');
Run Code Online (Sandbox Code Playgroud)