2009-07-09 112 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功能,這是最快的方法