2015-06-09 43 views
0

我想創建「包含所有」文件,然後從每個「真實」文件而不是每次包括一堆文件,包括剛剛創建的「包​​含所有」文件。如何創建一個「包含所有」文件?

看一看的例子 - inc.php:

<?php 
require_once('A/a.php'); 
require_once('A/B/b.php'); 
?> 

A/a.php只會:

<?php 
require_once('../inc.php'); 
?> 

A/B/b.php:

<?php 
require_once("../../inc.php"); 
?> 

然而,它不起作用 - 如果我執行「a.php」,我得到錯誤,「inc.php」沒有被發現包含在「b.php」中,並且在執行「b.php」時每個類比從「a。 PHP的」。

我看不出有什麼錯我的代碼 - 如何解決呢?

回答

1

如果使用OOP,肯定去自動加載,如cjhill建議。

但是,如果你正在做的組織化程度較低東西,需要手動包括文件,我將指定包括路徑時,總會使用__DIR__不斷建議。這種方式包括路徑將相對於它們在其中定義的文件,而不是入口點文件。

include_once __DIR__ . "/../../includes.php". 

你應該想到「包括」作爲複製 - 粘貼,只需從包含文件的代碼落入包括呼叫的位置。因此,包含文件中的文件路徑將相對於最初請求的文件,除非您指定絕對路徑,使用類似__DIR__之類的東西。

Magic Constants手冊中的細節英寸

+0

非常感謝 - 廣告作品:-)打開斜線是必不可少的 - 正如我剛剛所知道的:-)。 – greenoldman

2

你應該看看自動加載在PHP中自動包括尚未納入任何類。這是非常有幫助的:PHP Manual

Also, here is a quick tutorial I wrote on the subject.


或者,你可以創建一個全球性的PHP文件(global.php),只是包含在每一頁上。在global.phpinclude_once您需要的所有文件。但是,就像我說的,上面的方法是優先的。

+0

謝謝。但這完全是另一種方法(我會肯定地閱讀,並且非常感謝你),並且我想知道這種方法有什麼問題以及如何解決這個問題。至於那次更新 - 它不起作用。 – greenoldman

+0

你的方法有什麼問題?它會很快變得複雜,並會遇到像這樣的錯誤。你想要一個集中的地方來管理'include'。至於你的代碼有什麼問題,因爲它不是真正的代碼,所以很難說 - 邏輯似乎沒問題。 – cjhill

+0

我向你保證它是我磁盤上的真實代碼。 – greenoldman

0

你有一個循環。文件A/a.pho被包含到inc.php文件中,爲什麼inc.pho文件的頂部需要A/a.php?

的要求函數Q在括號中的文件到功能,從稱爲文件。

文件A/a.php只會和A/B/B.php將根據他們的appendment

+0

所有文件都是必需的,這是有意的,否則你將擁有與實際文件一樣多的「全部包含」文件(每個文件除了包含的來源都將包含所有文件)。但是沒有循環,因爲'require_once'而不是'require' - 畢竟PHP並沒有崩潰。 – greenoldman

1

的一個好方法繼承inc.php所有範圍的數據爲inc.php是使用絕對路徑是這樣的:

腓< 5.3:

require_once(dirname(__FILE__) . '../inc.php'); 

PHP 5。3:

require_once(__DIR__. '../inc.php'); 
+0

謝謝你,你的代碼中有小錯誤,'__DIR__'後面應該有一個開頭的斜槓。 – greenoldman

相關問題