PHP require()相对路径错误

Bor*_*rov 42 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')
Run Code Online (Sandbox Code Playgroud)

file2.php要求file1.php如下:

require('../dir1/subdir1/file1.php')
Run Code Online (Sandbox Code Playgroud)

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

然而是什么原因,什么我可以做file2.php这样file1.php正确地要求文件3和文件4

Bar*_*nth 54

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

require(dirname(__FILE__).'/../../dir2/file3.php');
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您使用的是5.3或更高,则最好使用__DIR__,与dirname(__ FILE__)相同,但可以节省"昂贵的"dirname()调用. (10认同)

Sha*_*rpC 49

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

require(__DIR__.'/../../dir2/file3.php');
Run Code Online (Sandbox Code Playgroud)

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

看到:


hex*_*lys 5

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

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

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

相反,define您的引导程序文件中的一些常量用于主路径,然后使用:

require(MY_DIR.'/dir2/file3.php');
Run Code Online (Sandbox Code Playgroud)

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