PHP require()相对路径错误

时间:2012-10-18 12:24:03

标签: php relative-path

我有以下文件结构:

rootDIR
    dir1
        subdir1
           file0.php
           file1.php
    dir2
       file2.php
       file3.php
       file4.php   

file1.php需要来自dir2的file3和file4,如下所示:

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

file2.php需要file1.php,如下所示:

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

然后在file1中要求无法打开file3和file4(可能是由于路径相对性)

然而,原因是什么?我可以为file2.php做些什么,以便file1.php正确地要求file3和file4

5 个答案:

答案 0 :(得分:50)

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

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

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

答案 1 :(得分:45)

对于相对路径,您可以直接使用__DIR__而不是dirname(__FILE__)(只要您是using PHP 5.3.0 and above):

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

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

请参阅:

答案 2 :(得分:5)

这里适当的建议是永远不要在你的网络应用程序中使用“../../”相对路径这样的东西。它难以阅读,维护也很糟糕。

  1. 你可以证明。这让你很难知道你指的是什么。

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

  3. 相反,define你的主路径的bootstrap文件中的一些常量然后使用:

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

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

答案 3 :(得分:0)

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

require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');

答案 4 :(得分:-1)

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

require("file3.php");
require("file4.php");