51

我有以下文件结构:

根目录
    目录1
        子目录1
           文件0.php
           文件1.php
    目录2
       文件2.php
       文件3.php
       文件4.php   

file1.php需要file3.phpfile4.php来自 dir2 像这样:

require('../../dir2/file3.php')

file2.php要求file1.php是这样的:

require('../dir1/subdir1/file1.php')

但是随后 require infile1.php无法打开file3.php并且file4.php(可能是由于路径相关性)

但是,这是什么原因,我该怎么做才能file2.php正确file1.php地要求file3.phpfile4.php

4

5 回答 5

66

对于相对路径,您可以__DIR__直接使用而不是dirname(__FILE__)(只要您使用的是 PHP 5.3.0 及更高版本):

require(__DIR__.'/../../dir2/file3.php');

请记住在引号内的路径开头添加额外的正斜杠。

看:

于 2013-08-11T13:19:29.940 回答
55

尝试dirname(__FILE__)在路径之前添加,例如:

require(dirname(__FILE__).'/../../dir2/file3.php');

它应该包括从根目录开始的文件

于 2012-10-18T12:38:28.570 回答
5

一个可行的建议是避免在您的 php Web 应用程序中使用“../../”相对路径。它很难阅读并且维护起来很糟糕。

  1. 正如你可以证明的那样。这使您很难知道您所指向的内容。

  2. 如果您需要更改应用程序的文件夹级别或其中的一部分。它完全容易出错,并且可能会破坏一些难以调试的东西。

相反,首选模式是define引导文件中的一些常量作为主路径,然后使用:

require(MY_DIR.'/dir1/dir2/file3.php');

MY_DIR从那里移动您的应用程序就像在一个文件中替换您的常量一样简单。

如果你必须保持相对。至少,根据相对路径引用构造一个绝对路径,就像接受的响应所建议的那样。但是,请牢记命名../匿名中间路径的重要性,以消除混淆或歧义。

于 2015-03-03T02:52:03.937 回答
0

您也可以始终将$_SERVER['DOCUMENT_ROOT']用作有效的起点,而不是诉诸相对路径。只是另一种选择。

require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
于 2019-05-07T14:14:56.043 回答
-2

我认为你的 cwd 是 dir2。尝试 :

require("file3.php");
require("file4.php");
于 2012-10-18T12:49:14.750 回答