我有以下文件结构:
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
答案 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)
这里适当的建议是永远不要在你的网络应用程序中使用“../../”相对路径这样的东西。它难以阅读,维护也很糟糕。
你可以证明。这让你很难知道你指的是什么。
如果您需要更改应用程序或部分文件夹的文件夹级别。它完全容易出错,并且可能会破坏调试可怕的东西。
相反,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");