亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP include_path 用法詳解

2024-09-04 11:48:21
字體:
來源:轉載
供稿:網友

ini_set('include_path', CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . ROOT . DS . APP_DIR . DS . PATH_SEPARATOR . ini_get('include_path'));

我們看到這個程序動態修改include_path,不過cake在這兒是把 CAKE_CORE_INCLUDE_PATH 和 APP_DIR 加到 include_path里,并且優先在這兩個目錄下找包含程序.

注意到它這里用到了PATH_SEPARATOR這個變量,這樣這段代碼在windows和linux下能通用.

從中受到啟發,我們可以根據自己的需要把一些include目錄動態的加入進來,比如說我們有很多libs:lib1,lib2,lib3等等,我們不必把這些libs都加到include_path里,因為它們之間可能沖突.

可以建立一個inc_dir,并把這個目錄加入到include_path,在inc_dir下,分別建立inc_path1.php inc_path2.php inc_path3.php,分別寫入:

  1. <?php 
  2. ini_set('include_path'ini_get('include_path').PATH_SEPARATOR.$dirToLib1); 
  3. <?php 
  4. ini_set('include_path'ini_get('include_path').PATH_SEPARATOR.$dirToLib2); 
  5. <?php 
  6. ini_set('include_path'ini_get('include_path').PATH_SEPARATOR.$dirToLib3); 

在寫程序的時候,比如要用lib2的functions.php,就可以這么寫:

  1. <?php 
  2. require 'inc_path2.php'
  3. require 'functions.php'
  4. ?> 

當時候函數include(),require(),fopen_with_path()函數來尋找文件時候.在不設置include_path的情況下,這些函數打開文件時候默認的是以web根目錄去尋找.當設置include_path以后,這些php函數就會先在指定的include_path目錄下面去搜索尋找.

其原理和window系統的環境變量相似,在window運行cmd命令的時候,輸入一些cmd的命令之后系統會在其設定的環境變量里面去搜索這些命令是否存在,存在就可以執行.

2.include_path的設置

第一種方法:修改php.ini文件中的include_path項。

include_path = .:/usr/local/lib/php:./include 

第二個方法:使用ini_set方法。 

ini_set("include_path", ".:../:./include:../include");     

3.注意 

zendframework include 設置 index.php,代碼如下:

  1. set_include_path('.' .PATH_SEPARATOR.'../library/'  
  2. .PATH_SEPARATOR.'./application/models/'  
  3. .PATH_SEPARATOR.'./application/lib/'  
  4. .PATH_SEPARATOR.get_include_path()); 

PATH_SEPARATOR是一個常量,在Linux系統中是一個" : "號,Windows上是一個";"號,所以編寫程序時最好用常量 PATH_SEPARATOR 代替,否則如果系統從linux移植到win系統或反過來移植會出錯.

get_include_path取得當前已有的環境變量,加上前面的設置就是新的系統include

include_path是怎么起作用的?

如果有多個include_path順序是怎么樣的?什么情況下include_path不起作用?今天,我就全面的介紹下這個問題,先從一個例子開始吧.如下的目錄結構:

  1. root  
  2.   ├ 1.php  
  3.   ├ 3.php  
  4.   └ subdir  
  5.        ├ 2.php  
  6.         └ 3.php 

在1.php中:

  1. <?php  
  2. ini_set(“include_path”, “.:path_to_subdir”);  
  3. require(“2.php”);  
  4. ?> 

而在2.php中:

  1. <?php  
  2. require(“3.php”);  
  3. ?> 

而在root目錄下的3.php打印出”root”,在subdir目錄下的3.php打印出”subdir”;現在,我的問題來了:

1. 當在root目錄下運行1.php,會得到什么輸出?

2. 在subdir下運行上一級目錄的1.php,有會得到什么輸出?

3. 當取消include_path中的當前目錄path(也就是include_path=”path_to_subdir”),上面倆個問題又會是什么輸出?

PHP中的include_path

PHP在遇到require(_once)/include(_once)的指令的時候,首先會做如下的判斷:

要包含的文件路徑是絕對路徑么? 

如果是, 則直接包含, 并結束. 

如果不是, 進入另外的邏輯(經過多次調用,宏展開后進入_php_stream_fopen_with_path)尋找此文件 

接下來,在_php_stream_fopen_with_path中,會做如下判斷:

要包含的文件路徑是相對路徑么(形如./file, ../dir/file, 以下用”目錄相對路徑代替”)? 

如果是,則跳過include_path的作用邏輯,直接解析相對路徑(隨后單獨介紹),會根據include_path,和當前執行文件的path組成一個待選的目錄列表,比如對于文章前面的例子來說,會形成一個如下的待選列表.

“.:path_to_subdir:current_script_dir 

然后,依次從待選列表頭部開始,根據DEFAULT_DIR_SEPARATOR(本文的環境是”:”)取出待選列表中的一個路徑,然后把要包含的文件名附加在這個路徑后面,進行嘗試,如果成功包含,則返回,否則繼續下一個待選路徑.

到現在為止,我們已經可以回答我開頭提出的3個問題了:

1. 因為在root目錄下執行, 所以在1.php中包含2.php的時候, include_path的第二個待選路徑起了作用(path_to_subdir), 找到了path_to_subdir/2.php, 而在2.php包含3.php的時候, 當前工作目錄是root下, 所以在包含3.php的時候, include_path的第一個待選路徑”.”(當前工作目錄)下就找到的匹配的文件, 所以得到的輸出是”root”.

2. 同1, 只不過當前的路徑是subdir, 所以得到的輸出是”subdir”.

3. 因為沒有了當前路徑為include_path,所以在root目錄下運行的時候2.php中包含3.php的時候,是path_to_subdir起了作用,所以無論在root還是subdir都將得到”subdir”的輸出.

而如果在2.php中清空include_path:

  1. <?php  
  2. ini_set(“include_path”, ”);  
  3. require(“3.php”);  
  4. ?> 

那么將會是current_script_dir起作用,而這個時候current_script_dir是2.php的路徑,所以還是會得到”subdir”的輸出.

目錄相對路徑

在使用目錄相對路徑的情況下,相對路徑的基點,永遠都是當前工作目錄.為了說明在目錄相對路徑下的情況,我們再看個列子,還是上面的目錄結構,只不過1.php變成了:

  1. <?php  
  2. ini_set(“include_path”, “/”);  
  3. require(“./subdir/2.php”);  
  4. ?> 

2.php變成了:

  1. <?php  
  2. require(“./3.php”);  
  3. ?> 

如果在root目錄下執行,2.php中尋找3.php將會在當前目錄的相對路徑下尋找,所以得到的輸出是”root”,而如果是在subdir下執行上一級目錄的1.php(php -f ../1.php), 將會因為在subdir下找不到”./subdir/2.php”而異常退出.

后記:1.因為使用include_path和相對路徑的情況下,性能會和尋找的次數有關,最壞的情況下,如果你有10個include_path,那么最多可能會重試11次才能找到要包含的文件,所以,在能使用絕對路徑的情況下最好使用絕對路徑.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情精品在线| 成人激情在线观看| 国产精品欧美日韩久久| 国产精品久久视频| 久久国产精品影视| 亚洲福利在线看| 成人国产精品免费视频| 美女撒尿一区二区三区| 亚洲精品aⅴ中文字幕乱码| 国产精品中文字幕在线| 欧美最猛性xxxxx亚洲精品| 国产精品扒开腿做爽爽爽的视频| 国产成人福利视频| 日韩中文字幕网站| 欧美日韩国产一中文字不卡| 亚洲精品视频免费| 久久成人av网站| 久久久久久久一区二区| 日韩**中文字幕毛片| 欧美激情精品久久久久久免费印度| 亚洲视频自拍偷拍| 日韩在线观看视频免费| 国产成人一区二| 欧洲亚洲妇女av| 日韩成人xxxx| 亚洲欧美成人在线| 国产成人精品日本亚洲| 欧美精品成人在线| 欧美激情一区二区三区久久久| xx视频.9999.com| 91丝袜美腿美女视频网站| 日韩欧美在线视频观看| 91综合免费在线| 中文字幕欧美专区| 国产成人精品午夜| 成人乱人伦精品视频在线观看| 一本色道久久综合狠狠躁篇怎么玩| 国产欧美 在线欧美| 深夜福利日韩在线看| 清纯唯美亚洲激情| 大胆人体色综合| 自拍偷拍亚洲区| 国产精品视频久久久| 亚洲精品中文字幕av| 日av在线播放中文不卡| 亚洲成人精品av| 国产亚洲精品久久久久久| 久99九色视频在线观看| 日本精品性网站在线观看| 精品无码久久久久久国产| 91精品国产成人www| 欧美精品制服第一页| 国产精品永久免费在线| 综合网中文字幕| 国产精品久久久久一区二区| 91精品久久久久久久久久另类| 午夜精品一区二区三区视频免费看| 国产91精品视频在线观看| 欧美一级免费看| 日本三级韩国三级久久| 久久男人的天堂| 亚洲欧美一区二区精品久久久| 国产不卡视频在线| 久久久精品久久| 亚洲国产日韩欧美综合久久| 成人黄色在线观看| 欧美精品电影在线| 成人黄色大片在线免费观看| 欧美性极品少妇精品网站| 国产成人精品av在线| 国产成人福利视频| 亚洲久久久久久久久久| 青青草一区二区| 日本91av在线播放| 日韩精品福利网站| 亚洲在线第一页| 亚洲乱码av中文一区二区| 菠萝蜜影院一区二区免费| 日韩av综合网站| 久久精品国产精品| 福利一区视频在线观看| 精品久久久久国产| 亚洲美女黄色片| 国产精品欧美亚洲777777| 国产精品久久网| 91久久精品美女| 久久免费视频观看| 欧美亚洲日本黄色| 亚洲免费视频一区二区| 91av网站在线播放| 92国产精品视频| 欧美日韩美女在线观看| 国产一区玩具在线观看| 亚州欧美日韩中文视频| 亚洲精品中文字幕av| 国产精品偷伦免费视频观看的| 国产亚洲一区二区在线| 欧美xxxx做受欧美.88| 国产亚洲精品久久久久久777| 成人黄色大片在线免费观看| 欧美精品免费看| 亚洲精品一区中文字幕乱码| 91精品国产沙发| 色在人av网站天堂精品| 亚洲欧美制服另类日韩| 亚洲成人1234| 欧美成人sm免费视频| 精品久久久久久久久久| 久久精品国产精品亚洲| 色噜噜国产精品视频一区二区| 日韩中文字幕精品| 成人网在线观看| 久久精品国产亚洲7777| 国产精品一二三在线| 国产自产女人91一区在线观看| 国产亚洲欧洲高清一区| 国产免费成人av| 国产精品久久av| 国产一区视频在线| 欧美激情手机在线视频| 插插插亚洲综合网| 亚洲成人精品久久| 亚洲小视频在线观看| 26uuu另类亚洲欧美日本老年| 亚洲a∨日韩av高清在线观看| 91国内免费在线视频| 欧美视频在线免费看| 亲子乱一区二区三区电影| 日韩av快播网址| 亚洲免费视频网站| 国产一区二区三区免费视频| 欧美日韩精品中文字幕| 亚洲欧美中文字幕| 亚洲成人免费在线视频| 色噜噜亚洲精品中文字幕| 久热精品视频在线观看一区| 丝袜一区二区三区| 国产在线视频2019最新视频| 精品久久久国产精品999| 日韩午夜在线视频| 日韩欧美亚洲一二三区| 午夜精品一区二区三区视频免费看| 国产在线不卡精品| 欧美精品在线第一页| 久久在线精品视频| 国产精品视频yy9099| 国产日韩欧美中文在线播放| 欧美精品18videosex性欧美| 国产精品第一区| 欧美精品中文字幕一区| 成人疯狂猛交xxx| 欧美黑人性视频| 中文字幕欧美日韩精品| 欧美成人自拍视频| 91免费视频国产| 中日韩美女免费视频网站在线观看| 欧美日韩中国免费专区在线看| 日韩在线观看高清| 亚洲黄色在线看| 国产99久久精品一区二区| 亚洲男人天堂九九视频| 国产精品免费电影| 亚洲免费伊人电影在线观看av| 国产盗摄xxxx视频xxx69|