善用__FILE__讓inlucde的libs更靈活..

一般來說,我們在架構一個網站的時候都會希望把 lib 固定在一個目錄之下,而通常為了分類,會規劃更多的目錄在這個目錄中。

通常來說結構會類似這樣...

  1. /libs
  2.     /adodb
  3.         /adodb.inc.php
  4.     /smarty
  5.         /libs
  6.     /member
  7.     /mail
  8.     /init.php
  9.     /template.php
  10. /modules
  11.     /members
  12.     /post
複製代碼

這時候問題來了,若是我們在 libs 裡面的 檔案需要 require or include 另外的 libs 檔案的話,通常會需要直接給他絕對位置。
但是給絕對位置的話會由於網站可能在不同主機上得目錄不同需要修改。

這時候我會建議兩種作法。

第一種:建立一個 config.inc.php ,內含一個 Document_root 的常數設定,而設定的位置就是 網站的跟目錄的絕對位置。
這時候你只要在各個 include 的時候,使用

  1. include_once(Document_root."libs/init.php");
  2. require_once(Document_root."libs/smarty/ilbs/smarty.inc.php");
複製代碼

缺點就是每次若是 config.inc.php 中的設定跟實際環境不同的時候會有問題.

第二種的方式就是用系統常數 __FILE__
__FILE__的常數會自動產生,內容是目前檔案的絕對路徑。若是被 Include 的檔案會產生的是位置,而不是 include 檔案的位置。

這樣我就可以這樣用,例如在 init.php 一律都是放在 libs 目錄下,而由其他任何一個檔案去 require ...

  1. include_onre(dirname(__FILE__)."smarty/libs/class.smarty.php");
  2. include_onre(dirname(__FILE__)."adodb/adodb.inc.php");
複製代碼

當然,你也可以直接把 __FILE__ 用在 config.inc.php 中.

  1. define('Document_root',dirname(__FILE__));
複製代碼

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 avrilnote 的頭像
    avrilnote

    Avril Note

    avrilnote 發表在 痞客邦 留言(1) 人氣()