2012-10-18 75 views
27

我有以下文件结构:PHP需要()相对路径错误

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

file1.php需要来自DIR2这样file3的和文件4:

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

file2.php要求file1.php这样的:

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

但之后在file1中要求无法打开文件3和文件4(可能是由于路径亲戚关系)

但究竟是什么原因,什么能为file2.php我这样做file1.php正常需要文件3和文件4

+2

http://stackoverflow.com/questions/11383960/how-to-refer-back-to-public-html-root-file-using-include-after-going-up-one-file在这里你可以找到明确的解释。 –

回答

37

尝试路径之前加入dirname(__FILE__),如:

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

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

+9

如果你在5。3或更高版本,您最好使用__DIR__,与dirname(__ FILE__)相同,但为您节省'昂贵'的dirname()调用。 –

+1

谢谢..你可以告诉我'/../dir'和'../dir' –

+1

之间的区别,在这种情况下你使用/../,因为dirname(__ FILE__)返回一个字符串,例如:'/ root/dir1/dir2/dir3',错过了最后一个'/',所以如果没有合并这两条路径,就会变成'/root/dir1/dir2/dir3../'。 – Baronth

-1

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

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

这里一个适当的建议,是从来没有使用这样的事情 “../../” 在你的web应用程序的相对路径。维护很难阅读和可怕。

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

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

相反,define在你的主路径(S)引导文件的几个常数,然后使用:

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

从那里移动您的应用程序,是那么容易,因为在更换您的MY_DIR常数一个文件。