2009-07-09 110 views
2

我有几个PHP文件包括()从其他几个目录的其他文件。嵌套的PHP包括使用'./'

在其中包含的文件中:foo/bar.php,我想bar.php包含3个其他文件包含在目录foo中。然而bar.php实际上是由另一个目录中的另一个文件包含的,其他目录中包含另一个文件,依此类推。

如果我这样做:

include('./apple.php'); 
include('./orange.php'); 

foo/bar.php,将它包括从foo目录中正确的文件,无论哪个文件包含在自身bar.php?

回答

2

编号在包含文件名的开头使用./强制从Web服务器设置的“当前目录”(最初可能是初始脚本的目录或DocumentRoot,取决于Web服务器)搜索它。

获取所需行为的方式取决于您的include_path(如果需要,可以使用set_include_path()修改)的值。

从文档include()

文件对于包括每个include_path entry相对于当前的工作目录首先寻找,然后在当前脚本的目录。例如。如果您include_pathlibraries,当前工作目录是/www/,包括你include/a.php并没有包括在该文件中“b.php”,b.php先看着/www/libraries/,然后在/www/include/ 。如果文件名以./../开头,则它只能分别在当前工作目录或当前工作目录的父目录中查找。

因此,如果没有机会在include_path的第一个目录中找到该文件名,则可以使用include('apple.php')

如果有apple.php别处存在,并希望该文件夹中的副本将被首先使用,您既可以使用马修的建议,并

include(dirname(__FILE__).'/apple.php'); 

,或者,如果你有很多的可能性文件从当前目录包括:

old_include_path = set_include_path(dirname(__FILE__)); 
include('apple.php'); 
include('orange.php'); 
include('peach.php'); 
include('pear.php'); 
set_include_path(old_include_path); 
6

请改用以下:

include(dirname(__FILE__).'/apple.php'); 

我不知道,如果你已经发布将可靠或无法正常工作,但这会。

+0

如果您使用PHP 5.3.0或更高版本,则可以使用__DIR__。这与dirname(__ FILE__)相同。 http://us3.php.net/manual/en/language.constants.predefined.php – 2009-07-09 02:55:46

+0

糟糕的是,那些粗体字应该在每边都有两个下划线。如果我不够清楚,链接会解释所有内容。 – 2009-07-09 02:57:06

0

我最后一次遇到这种问题时,我在我的public_http根文件夹中创建了一个include目录,并将其路径添加到include_path ini配置中。包括文件没有更多的麻烦。您甚至可以在该自定义include_folder中添加文件夹以供组织使用。说,你有header.php,footer.php,calendar.php和menu.php作为“模板”包括,一些功能/类包括如encription.php,authentication.php,permissions.php。你可以将其全部保存在您的包含文件夹,例如:

  • 定制包括文件夹
    • 模板
      • 的header.php
      • footer.php
      • calendar.php
      • menu.php
      • encription.php
      • authentication.php
      • permissions.php

你地包括直接使用

include 'template/header.php 
0

include()require()将是相对于当前的工作目录getcwd(),这通常是请求的脚本(至少在Apache)的同一目录下。但是,如果在CLI模式下,它是从$ PWD继承的;

因此,

include(dirname(__file__) . '/include.php'); 

是一个不错的办法。

0

最佳做法是包括使用绝对路径。您可以在引导文件中的变量中定义路径的公共部分。
为什么我觉得这是最好的做法:

  1. 它否定了这样的问题,你 有。
  2. 它更具可读性(当你有一个包含几百个文件的应用程序时,它将使它更容易找到它们)。
  3. 在缓存方面和要求/ include_once功能,这是最快的方法