2012-01-11 234 views
30

我需要将父目录和其他子目录中的文件包含到子目录中。我之前通过简单地使用include('/ rootdirectory/file.php');但现在它似乎不起作用。包含来自父级或其他目录的文件

只是想知道我该如何做到这一点,谢谢。

这里是我的确切路线:

include('/forums/groups.php'); 

它给我这个错误(页面仍然运行):

警告:包括(/forums/groups.php)功能。包括]:未能 打开流:没有这样的文件或目录在 C:\ XAMPP \ htdocs中\论坛\在线博客\ posts.php

Warning: include()[function.include]:打开 '/forums/groups.php'包含在 (include_path ='.; C:\ xampp \ php \ PEAR')中失败 C:\ xampp \第3行的htdocs \ forums \ blog \ posts.php

+0

一个经常运行到这个错误,并迅速解决它,请按照下列步骤操作:stackoverflow.com/a/36577021/2873507 – 2016-04-12 15:18:12

回答

58

include()及其亲属采取文件系统路径,而不是相对于文档根目录的网络路径。获取父目录,使用../

include('../somefilein_parent.php'); 
include('../../somefile_2levels_up.php'); 

如果您有/开始,一个绝对的系统文件路径将用于:

// Full absolute path... 
include('/home/username/sites/project/include/config.php'); 
+3

尝试这样做的,它不起作用的问题,因为我有同样的问题。 – ubique 2013-10-19 18:14:28

+0

@ubique如果它不能像应用程序中发布的那样工作,那是因为您的文件系统布局可能与您的期望不同,而不是因为这是不正确的。发布有关您试图包含的文件以获得帮助的信​​息。 – 2013-10-19 22:41:20

+1

@ubique ..或者你的脚本改变了当前的工作目录。 getcwd()看看它是什么。 – 2013-10-19 22:57:48

2

任何以斜线开头的路径将是绝对路径。从服务器的根文件夹而不是文档根目录的根文件夹。您可以使用../进入父目录。

+0

我已经开始了一个故障排除清单的这种频繁的错误在这里:stackoverflow.com/a/36577021/2873507 – 2016-04-12 15:18:52

4

取决于您尝试包含的文件位于何处。

例子:

/rootdir/pages/file.php

/someotherDir/index.php

如果你在写的index.php以下几点: include('/rootdir/pages/file.php');会出错,原因是其将尝试获得:

/someotherDir/rootdir/pages/file.php这当然不存在...

所以,你将不得不使用include('../rootdir/pages/file.php');

+0

我已经开始了一个故障排除此处出现此频繁错误的清单:stackoverflow.com/a/36577021/2873507 – 2016-04-12 15:18:46

5

这里的东西我记住这一问题写道:

<? 
function absolute_include($file) 
     { 
     /* 
     $file is the file url relative to the root of your site. 
     Yourdomain.com/folder/file.inc would be passed as 
     "folder/file.inc" 
     */ 

     $folder_depth = substr_count($_SERVER["PHP_SELF"] , "/"); 

     if($folder_depth == false) 
      $folder_depth = 1; 

     include(str_repeat("../", $folder_depth - 1) . $file); 
     } 
?> 

希望它帮助。

2

从外行人的角度和实用性来看,我认为这是一种老式的DOS技巧。哇!那是什么? DOS?从来没有听说过!

“..“支持你退出当前子目录一次到更高的文件夹/目录,并且..输入键入两次后退出2更高的父文件夹。请继续添加”..输入“背对背你很快就会发现自己处于目录的最高层

至于新手为了更好地理解这一点,考虑一下(如果你知道这是什么意思,那么考虑这个问题(根据家庭PC或“C:\驱动器”)而不是网络服务器/主机的“根目录”),当你在网上时,考虑你的网站存在于家用电脑的硬盘驱动器上,埋在C:\驱动器下的某个文件夹中,最后你可以把它看作是“ ..“回到一个目录,”/“转发一个目录/文件夹。

现在! 如果您正在使用命令提示符并位于PC的“myDocuments”文件夹中,则必须退出该文件夹才能通过键入“../”以更靠近较高的目录“C:\” 。 如果您想访问位于widows目录中的文件,但仍然位于myDocuments文件夹中,理论上您应该输入../windows;在DOS命令提示符的实际情况下,您只需键入..,但我为您设置了网络。 /自然重定向到另一个目录。

使用 “我的文档” 让假装你创建2个文件夹内,它被称为 “PHP1” 和 “PHP2”,在这样的,我们现在有文件夹:

  • C:\我的文档\ PHP1
  • C:\我的文档\ PHP2

在PHP1你把一个名为index.php文件。并在PHP2文件夹中放置一个名为Found.php的文件。现在变成了:

  • C:\我的文档\ PHP1 \ 的index.php
  • C:\我的文档\ PHP2 \ found.php

里面的 C:\ myDocuments \ PHP1 \ index.php文件您需要编辑并键入类似内容:

<?php include ('../php2/found.php')?> 

../是位置因此它认为当前的文件位置“C:\我的文档\ PHP1 \的index.php”,是一个指令,告诉它要背出PHP1目录的输入或前进到PHP2目录下查找Found.php文件。但是它读了吗?请参阅我的想法,了解下面的疑难解答

Now!假设有1个文件夹PHP1和子文件夹PHP2:

  • C:\我的文档\ PHP1 \ PHP2

则只需引用/代码

<?php include('/PHP2/found.php') ?> 

如PHP2作为子目录存在,位于PHP1目录的下面或内部。

如果上述不起作用,它可能与访问/ htaccess或目录权限或打字错误有关。为了加强这一点......陷入困境......如果“found.php”文件中包含错误/错字,它将在错误渲染时崩溃,这可能是您((要求/ require_once))的原因体验到它不会改变目录或访问文件的错觉。 在对此事的最后一个念头,你可能需要实例化功能或引用,以使用附带/要求“无所谓”通过创建一个新的变量或对象,如

$newObject = new nameobject("origianlThingy"); 

记住,只是因为你是包括/需要的东西,有时意味着,它包含/需要运行,但可能需要重新创建才能使其处于活动状态或访问它。 肯定会重新创建一个“如果它是可读的”实例,并使其在当前文档中可用,同时保留原始文档。但是,您应该在所有实例中引用新创建的变量$ newObject ....如果其全局。

把这个放在一些网络主机帐户的角度来看;网络主机是一个大小超过硬盘驱动器(就像你的电脑上),你的域只不过是他们分配给你的文件夹。您的文件夹被称为根。在该文件夹内,你可以做任何你可以做的事情。 您的“”之一在目录/文件夹之间移动的方法是使用../多次退出您当前的参考到您想要查找的文件夹位置。

在我醉酒状态我意识到,我知道太多要理智,而不是 足以成为疯狂!”

0

我从坦率和我在我的“settings.php”文件中添加了这样的内容,然后在有链接时包含在所有页面中:

“的settings.php”

$folder_depth = substr_count($_SERVER["PHP_SELF"] , "/"); 

    $slash=""; 

    for ($i=1;$i<=($folder_depth-2);++$i){ 

     $slash= $slash."../"; 

    } 

在我的header.php被包含在所有的网页:

A HREF = .... PHP的echo $ slash.'index.php”。 ...

似乎它适用于本地和托管环境....

(注:我是一个绝对的初学者)

0

曾有同样的问题早解决这样的:

包括( '/../包括/ config.php文件'); //注意 '/' '../includes/config.php'

0

出庭。如果你的服务器是不解析该文件使用

include '../somefilein_parent.php'

试试这个父目录:

include __DIR__ . "/../somefilein_parent.php";

相关问题