set_include_path用法詳解

本文轉自新浪博友,感謝分享。轉載請註明出處。

初識set_include_path和get_include_path方法,一頭霧水。新浪這位博友寫的不錯,故轉自,與大家共享。

看到了set_include_path(dirname(__FILE__));這樣一行代碼,甚爲不解。於是我就百度了一下,順便看了一下php.net的手冊,可是還是不太明白它到底有什麼作用。

   偶然見看到一段另外一段代碼,然後突發靈感,測試了一下,果然不出所料!
   現在我總結一下吧:
   首先set_include_path這個函數呢,是在腳本里動態地對PHP.ini中include_path進行修改的。
而這個include_path呢,它可以針對下面的include和require的路徑範圍進行限定,或者說是預定義一下。
  就好像:
       如果我們沒有設置這個值,可能我們需要寫一些完全的路徑:
       <?php
          include("123/test1.php");
          include("123/test2.php");
          include("123/test3.php");
          require("123/test4.php");
          require("123/test5.php");
       ?>
      來引入很多外部文件,但是如果我們設置了set_include_path("123/"),我們就可以用下面這段代碼代替。
       <?php
          set_include_path("123/");
          include("test1.php");
          include("test2.php");
          include("test3.php");
          require("test4.php");
          require("test5.php");
       ?>
      因爲呢,當執行include或者require操作時,就會去include_path指定的路徑去查找要引入的文件,雖然我現在不知道這樣會不會在性能上有所優化,但是可以肯定的是,可以節省一部分代碼。呵呵~
     那麼剛開始的時候,我以爲它加不加都是一樣的沒什麼不同,是因爲我只包含了一個本文件夾下的文件。
    後來,終於發現了其中的玄機!可恨的是,網上居然沒有一篇像我這樣的文章....都是同一篇文章轉來轉去的。
    那麼這個函數它不僅可以定義一個文件夾,我們可以定義很多文件夾。如下所示,我要寫一個初始化函數:
       function initialize()
{
    set_include_path(get_include_path().PATH_SEPARATOR . "core/");
    set_include_path(get_include_path().PATH_SEPARATOR . "app/");
    set_include_path(get_include_path().PATH_SEPARATOR . "admin/");
    set_include_path(get_include_path().PATH_SEPARATOR . "lib/");
    set_include_path(get_include_path().PATH_SEPARATOR . "include/");
    set_include_path(get_include_path().PATH_SEPARATOR."data/");
    set_include_path(get_include_path().PATH_SEPARATOR."cache/");
}
    這樣它的路徑就成了:
    .;C:\php5\pear;core/;app/;admin/;lib/;include/;data/;cache/
    哎,我們發現前面還有個.;C:\php5\pear;這到底是怎麼回事呢,其實我們如果什麼也不寫直接先輸出一下include_path的默認值,就會發現它就是.;C:\php5\pear;它可以允許隨便去一個引入文件。
    如果再加載了許多文件夾的話,我們直接寫文件名就可以了!
   但是正如我最開始那個問題一樣,爲什麼我們公司的代碼和人家的就不一樣呢,原來,如果我就寫一個
          set_include_path(dirname(__FILE__));
   然後去引入其他文件夾的文件,就會報錯,說在我指定的這個文件夾內找不到。
      首先,我們先用另外一種方法輸出一下:
       <?php
           set_include_path(dirname(__FILE__));
           $include_value = ini_get('include_path');
           echo $include_value;
       ?>
      結果是:D:\AppServ\www
      我如果去www下找test4.php這個文件,則沒有報錯
      include("test4.php");
      但是我如果去找
      include("test1.php");
      就會報錯:
      Warning: include() [function.include]: Failed opening 'test1.php' for inclusion (include_path='D:\AppServ\www') in D:\AppServ\www\test.php on line 6
     而且我們還發現
.;C:\php5\pear;已經被替換掉了。所以我們在使用的時候,如果不是僅在一個文件夾下引入文件,我們就需要在前面加上get_include_path().PATH_SEPARATOR .
     解釋一下:
            get_include_path()是獲取當前include_path的默認值
            PATH_SEPARATOR 是個常量,是include的路徑分界符合,在window上是;在unix和Linux上是:
     最後,我還要說一下,其實我們也可以通過另外一種方法:即最原始的:
           ini_set('include_path''目錄名'); 
    另外,需要注意的兩點就是:
           如果在指定的
目錄下找不到所要求包含的文件,而在當前頁面目錄下正好存在這個名稱的文件時,則默認引入當前目錄下的該文件。

           當指定了多個目錄爲 include_path ,而所要求包含的文件在這幾個目錄都有相同名稱的文件存在時,php選擇使用設定 include_path 時排位居前的目錄下的文件。


原文地址:http://blog.sina.com.cn/s/blog_4ce89f200100twbl.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章