如何相对地(在不同的目录级别)要求PHP文件?
我有以下文件结构: rootDIR dir1 subdir1 file0.php file1.php dir2 file2.php file3.php file4.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
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');