2011-04-18 62 views
1

我使用了大量的包含文件,包括我與的函數,類ECT集合191個文件。PHP:函的包括

用於我的問題是我真的不喜歡編輯包含文件的獲取一團糟有時我只是忘了包括事。

所以我想知道,有沒有包括文件夾中的所有PHP文件,甚至更好的自己的文件夾+所有子文件夾中包括PHP函數或自己製作庫。

這些東西讓生活更easyer和靈活。

+0

時不包括對類文件:創建一個包含所有包含一個單一的文件,包括該文件。否則使用'__autoload()' – knittl 2011-04-18 16:41:13

回答

2

您可以使用下面的功能我剛剛創建:

function load_folder($folder, $ext = '.php') { 
    foreach (glob("$folder*$ext") as $file) { 
     if (file_exists($file)) { 
      require_once($file); 
     } 
    } 
} 

START EDIT

這是相同的功能的新版本。現在它允許您指定文件夾爲folderfolder/而不會崩潰。現在它也加載所有文件夾和子文件夾中的所有文件。

function load_folder($dir, $ext = '.php') { 
    if (substr($dir, -1) != '/') { $dir = "$dir/"; } 
    if($dh = opendir($dir)) { 
     $files = array(); 
     $inner_files = array(); 
     while($file = readdir($dh)) { 
      if($file != "." and $file != ".." and $file[0] != '.') { 
       if(is_dir($dir . $file)) { 
        $inner_files = load_folder($dir . $file); 
        if(is_array($inner_files)) $files = array_merge($files, $inner_files); 
       } else { 
        array_push($files, $dir . $file); 
       } 
      } 
     } 
     closedir($dh); 
     foreach ($files as $file) { 
      if (is_file($file) and file_exists($file)) { 
       $lenght = strlen($ext); 
       if (substr($file, -$lenght) == $ext) { require_once($file); } 
      } 
     } 
    } 
} 

編輯完

您還可以,如果你願意,你可以執行一個文件夾中加載例如,僅.txt文件指定一個特定的擴展是這樣的:load_folder('folder/', '.txt');。請記住,有人認爲這在某種程度上是不安全的。在商業網站中使用此功能之前,請先查看關於該主題的更多意見。 還要注意的是,如果某些文件是關於類,您可以使用PHP __autoload()本地函數讓PHP調用它真正需要的類(延遲加載)。

參考文獻:

+0

非常感謝! load_folder是否也加載子分類器還是有一個不同的功能? – matthy 2011-04-18 17:59:22

+0

@matthy,如果你喜歡,我會努力工作,但你必須等待10或15分鐘...... – Shoe 2011-04-18 18:00:29

+0

謝謝是的,如果你能幫助我,這將是一個真正的拯救我的文件夾! – matthy 2011-04-18 18:07:42

3

如果你有類名和文件之間的標準,你可以使用__autoload()功能。它會爲你節省很多費用。

http://php.net/manual/en/language.oop5.autoload.php

+0

它實際上並沒有解決加載文件夾中所有文件的問題。 – Shoe 2011-04-18 16:42:20

+0

你是對的。它不能像你的腳本解決問題那樣解決他的問題。無論如何,我認爲一個PHP項目有很多類,並且知道__autoload()函數可以節省很多require/includes。 – raultm 2011-04-18 16:51:30

+0

我曾經提到過它。 – Shoe 2011-04-18 16:51:51

1

你可能只是有一個「元包括」文件,其中有個別包括語句,然後你只在您的腳本一個單一的文件。

當然,自動加載版本在這裏其他的答案會更有效。雖然PHP在加載/解析時速度非常快,但爲每個請求加載的191個單獨文件加起來非常快。

1

我通常需要作爲第一application_top.php本:

... 

function requireAll($folder){ 
    // open the folder 
    $libs = opendir($folder); 
    // loop inside to include each file, excluding windows default 'meta-link' . and .. 
    while ($lib = readdir($libs)) { 
     if ($lib != "." && $lib != "..") 
      // require_once to be sure to require only one time 
      require_once $folder . $lib; 
} 
    // close the dir for cleaning stuff 
closedir($libs); 
} 

//Require all helpers 
requireAll(DIR_HELPERS); 

//Require all model classes 
requireAll(DIR_MODEL); 

//Require all mappers 
requireAll(DIR_MAPPERS); 

...