2011-11-18 69 views
2

所以我试图在PHP中包含一些文件,它不起作用。将它包含在PHP中后找不到文件

我正在编写的文件位于主目录中。主目录中有一个子目录“D1”,在D1中有另一个目录“D2”。

D2内有一堆文件。我写了一个类文件并将其存储在D1中。它看起来像这样:

<?php 
include_once('D2/file1.php'); 
include_once('D2/file2.php'); 
//ect 

class myClass { 
    //class stuff 
} 
?> 

于是我写这样的主目录中的文件:

<?php 
include_once('D1/myclass.php'); 
?> 

但是当我打开这个文件,我得到这个:

警告:include_once(file1.php)[function.include-once]:未能打开流:第2行中的/home/D1/D2/file1.php中没有这样的文件或目录

“file1.php”肯定在那个目录下,所以我做错了什么?

回答

2

当包含文件时,相对位置是相对于被调用的脚本而言的,即“当前工作目录”。所以如果脚本A.php包含./test/B.phpB.php想包含./test/下的文件,则它将与A.php相关。您可以使用__DIR__创建绝对路径,该路径具有脚本路径和名称,而不管它包含在何处或使用$_SERVER['DOCUMENT_ROOT']这将指向文档根目录。

B.php例如:

<?php 
include(__DIR__.'/C.php'); 
//will include C.php under the same directory as B.php 
?> 

的另一种选择是添加D1到包括在php.ini路径。这告诉php在执行include时在该目录中查找该文件。

+0

这是问题所在。谢谢! – TheEnigmaMachine

0

我猜你有权限问题。检查文件夹/文件是否具有允许Web服务访问的正确权限。

1

如果您在Linux操作系统或MAC操作系统上,您需要知道您的文件是否为D2的大写或小写?等等;

另外我注意到你的class myClass {行,这是否意味着这个文件正在被其他文件包含/使用?在这种情况下,您的包含文件的相对位置可能会发生变化。

+0

这是正确的,“myClass”所在的文件是我正在尝试包含的文件。这是否意味着当我从一个不同的目录中包含“myclass.php”文件时,包含的相对位置会越来越混乱? – TheEnigmaMachine