如何相对地(在不同的目录级别)要求PHP文件?

如何相对地(在不同的目录级别)要求PHP文件?,php,relative-path,Php,Relative Path,我有以下文件结构: rootDIR dir1 subdir1 file0.php file1.php dir2 file2.php file3.php file4.php file2.php要求file1.php如下: require('../dir1/subdir1/file1.php') 但是file1.php中的require无法打开file3.php和file4.php

我有以下文件结构:

rootDIR dir1 subdir1 file0.php file1.php dir2 file2.php file3.php file4.php
file2.php
要求
file1.php
如下:

require('../dir1/subdir1/file1.php')
但是
file1.php
中的require无法打开
file3.php
file4.php
(可能是由于路径相对性)

但是,原因是什么,我能为
file2.php
做些什么,所以
file1.php
正确地要求
file3.php
file4.php

尝试在路径之前添加
dirname(\u FILE\uuuuuu)
,如:

require(dirname(__FILE__).'/../../dir2/file3.php');
它应该包括从根目录开始的文件

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


对于相对路径,您可以直接使用
\uuuu DIR\uuu
,而不是
dirname(\uuu FILE\uuuu)
(只要您是):

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

见:


    • 一个可行的建议是避免在php web应用程序中使用“../../”相对路径。它很难阅读,维护也很糟糕

    • 你可以证明。这使得你很难知道你指的是什么

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

    • 相反,首选模式是在引导文件中为主路径定义几个常量,然后使用:

      require(MY_DIR.'/dir1/dir2/file3.php');
      
      从那里移动应用程序,只需在一个文件中替换
      MY_DIR
      常量即可


      如果你必须保持相对。至少,如公认的回答所示。但是,也要牢记命名您的
      。/
      匿名中间路径的重要性,以消除混淆或歧义。

      您可以始终使用
      $\u服务器['DOCUMENT\u ROOT']
      作为有效的起点,而不是求助于相对路径。只是另一种选择

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

      如果您使用的是5.3或更高版本,您最好使用DIR,与dirname(FILE)相同,但省去了“昂贵的”dirname()调用。谢谢..您能告诉我“/../DIR”和“../DIR”之间的区别吗?在这种情况下,您使用/。/因为dirname(FILE)返回的字符串类似于:“/root/dir1/dir2/dir3”,缺少最后一个“/”,因此,如果不合并这两条路径,它将变成“/root/dir1/dir2/dir3../”。与question@Gershy在我的书中,这是一个相关的答案,给出了一个“可行的替代方案”,并给出了一个“试试这个”的建议。并不是每个答案都是直接的。然而,我改进了我的答案。
      require(__DIR__.'/../../dir2/file3.php');
      
      require(MY_DIR.'/dir1/dir2/file3.php');
      
      require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');