2011-07-21 189 views
9

我已經寫:PHP,如何設置包含路徑

include('a.php') 
include('b.php') 

等在我的腳本包括使用功能a()b()。它變得非常乏味。有沒有辦法設置一個目錄的路徑,並有腳本可以訪問多個文件?

  1. 我在劇本試過這樣:

    set_include_path('.;C:\xampp\htdocs\myfunctionfolder'); 
    
  2. 我設置環境變量PATH有在那裏這位前輩。

  3. 我也是在修改php.ini中包括

    include_path = ".;\xampp\php\PEAR;\xampp\htdocs\myfunctionfolder" 
    

如果我在那裏有很多文件,我該如何訪問這些文件,而不必每到設有獨立?設置環境變量絕對可以在命令提示符下工作。

我是否需要爲.php文件做一些其他操作,以便在一個目錄下共同訪問?

回答

11

通常的做法是使用包含include/include_once調用(爲了簡單起見)的「common.php」或「includes.php」文件。例如

  • [LIB]
    • a.php只會
    • b.php
    • includes.php
  • 的index.php

然後包括.PHP包含:

<?php 
    include_once('a.php'); 
    include_once('b.php'); 
?> 

然後在任何腳本它包括includes.php文件的問題。

但是,要回答你原來的問題,你一次只能包含一個文件,每次調用。您可以使用類似opendirreaddir的東西來遍歷特定目錄中的所有文件,並將它們包含爲發現(自動說話)或根據您創建的文件寫出每個文件。

此外,所有設置包含路徑都會設置一個目錄,以便在撥打include時進行查找。這不是一個文件應該自動加載的目錄(這是我從你的文章中得到的印象)。

+0

Hphph !!現在我清楚了。感謝您向我展示常見的方式。我仍然試圖弄清楚PHP中的「傳統」。 – musicliftsme

+1

如果這是您自己的個人項目,「常規」是任何方式適合您的方式。當你不得不開始使用查找功能或寫下文件名和註釋時,你會忽略「常規」。 ;-) –

+0

如果我包含加載一堆.php文件(比如20行到50行的函數)的「include.php」,我可能需要也可能不需要,這會在運行腳本時施加某種不必要的負載包括這些?我想知道是否應該自定義我的include.php,或者只是將1包括我所有的功能。 – musicliftsme

2

PHP的解析器非常高效 - 你會浪費更多的時間來加載大量的單個文件,而不是一個(或幾個)更多的單片文件。然而,如果你堅持把事情隔離開來,你可以創建meta-include文件來加載單個文件集,所以你只需要包含一個meta-include文件,它就可以爲你完成剩下的工作:

meta.php:

include('a.php'); 
include('p.php'); 
... 
include('z.php'); 

然後你只需要做:

<?php 

include('meta.php'); 

在腳本中,你已經得到了所有加載您個人的。

+0

沒有人認爲在某些情況下,包括必須加載在不同的部分......例如,如果包含頁面佈局的頁眉,邊欄和頁腳,則不能連續包含它們。 – andreszs

2

我有這樣的功能在我的大多數項目:

function appendToIncludePath($path) 
{ 
    ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . BASE_DIR . $path . DIRECTORY_SEPARATOR); 
} 
5

設置include_path將不包括在該目錄中的所有文件,它只會增加該目錄的列表,包括文件時,PHP將搜索。

指定require(),include(),fopen(),file(),readfile()和file_get_contents()函數查找文件的目錄列表。

Source

這將簡化包括在深結構或在文件系統中的一個完全不同的部分文件。

include('/var/somewhere/else/foo.php'); 

隨着/var/somewhere/else/加入到php.ini中的include_path可能成爲

include('foo.php'); 

此外,正如其他人所指出的,也有共同的做法,但你可以看看OOPHP和autoloading classes。這對我所知道的功能不起作用。

許多編寫面向對象應用程序的開發人員創建一個PHP源文件的每類定義。最大的煩惱之一是必須在每個腳本的開頭(每個類一個)寫一個需要包含的長列表。

在PHP 5中,這不再需要。您可以定義一個__autoload函數,在您嘗試使用尚未定義的類/接口的情況下自動調用該函數。通過調用這個函數,腳本引擎有最後一次機會在PHP失敗並且出現錯誤之前加載類。

2

看到了這個問題:

How to include() all PHP files from a directory?

此外,在最佳實踐方面,您可以在同一文件的多個功能,如果他們是有聯繫的,而且我也建議有更多的您的函數和文件的描述性名稱。例如,如果您的a()和b()函數都與驗證相關,例如,將您的文件命名爲validation.php,並將兩個函數都放在那裏,並嘗試將它們重命名爲與他們所做的相關的事情。這會讓你記住他們在開始堆積一大堆功能時所做的事情;)