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

首頁 > 開發 > PHP > 正文

PHP require/include順序詳解

2024-05-04 21:47:18
字體:
來源:轉載
供稿:網友

在大型的web項目中, include_path是一個模塊化設計的根本中的根本(當然,現在也有很多基于autoload的設計, 這個不影響本文的探討), 但是正是因為include_path, 經常會讓我們遇到一些因為沒有找到正確的文件而導致的看似”詭異”的問題.也就有了如下的疑問:include_path是怎么起作用的?如果有多個include_path順序是怎么樣的?什么情況下include_path不起作用?

今天, 我就全面的介紹下這個問題, 先從一個例子開始吧.如下的目錄結構:

1.php  2.php 3.php

3.php在1.php中:

  1. ini_set("include_path"".:path_to_subdir");  
  2. require("2.php");  
  3. ?> 

而在2.php中:

  1. require("3.php");  
  2. ?> 

而在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. ini_set("include_path"'');  
  2. require("3.php");  
  3. ?> 

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

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

  1. ini_set("include_path""/");  
  2. require("./subdir/2.php");  
  3. ?> 

2.php變成了: 

  1. require("./3.php");  
  2. ?> 

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

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

2. 因為目錄相對路徑的basedir, 永遠都是當前工作路徑, 如果要使用, 需要和實際部署路徑相關, 所以實際使用的很少(當然, 也有借助chdir來完成的模塊). 

3. 在模塊化的系統設計中, 一般應該在模塊內, 通過獲取模塊的部署路徑(dirname(__file__), php5.3以后更是提供了__dir__常量)從而使用絕對路徑.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97国产精品久久| 国模精品视频一区二区三区| 久久久久久久一| 一二美女精品欧洲| 美女精品视频一区| 日本久久亚洲电影| 国产欧美一区二区白浆黑人| 亚洲最大的成人网| 亚洲人成毛片在线播放| 色综合久久88| 欧美在线性爱视频| 日韩av网站电影| 国产在线999| 欧美一级大片在线观看| 亚洲视频专区在线| 国语自产精品视频在线看一大j8| 久久99精品久久久久久青青91| 午夜精品免费视频| 亚洲成色777777女色窝| 最近2019好看的中文字幕免费| 欧美美最猛性xxxxxx| 中文字幕欧美日韩在线| 欧美福利视频网站| 黑人巨大精品欧美一区免费视频| 国产精品88a∨| 久久av.com| 国产精品视频一区国模私拍| 一区二区三区国产视频| 亚洲欧美三级在线| 日韩中文字幕在线| 亚洲男人的天堂在线| 国产ts一区二区| 色婷婷av一区二区三区在线观看| 色噜噜国产精品视频一区二区| 国产日本欧美一区二区三区在线| 伦理中文字幕亚洲| 欧美精品一区在线播放| 91色视频在线观看| 亚洲一区二区中文字幕| 日韩av毛片网| 奇米4444一区二区三区| 国产精品com| 亚洲天堂av在线免费| 亚洲春色另类小说| 色阁综合伊人av| 91国产视频在线| 日本精品免费一区二区三区| 国产精品美乳一区二区免费| 日韩精品中文字幕在线播放| 亚洲色图50p| 久久精品电影一区二区| 亚洲色无码播放| 色av吧综合网| 国产精品久久久久久av下载红粉| 亚洲国产精品久久精品怡红院| 国产97免费视| 精品日韩中文字幕| 日韩精品视频在线观看网址| 91九色蝌蚪国产| 国产精品精品久久久| 热久久99这里有精品| 精品国产成人在线| 精品二区三区线观看| 中文字幕视频在线免费欧美日韩综合在线看| 国产日韩欧美另类| 欧洲亚洲妇女av| 欧美精品在线第一页| 欧美日韩国产一区二区三区| 日韩激情av在线免费观看| 亚洲精品丝袜日韩| 欧美日韩久久久久| 久久国产精品99国产精| 亚洲精品视频在线播放| 97在线视频精品| 久久精品国产91精品亚洲| 欧美在线观看一区二区三区| 国产视频自拍一区| 丝袜亚洲欧美日韩综合| 国产成人精品av| 黑人精品xxx一区| 国产丝袜一区二区三区免费视频| 一区二区在线免费视频| 亚洲无亚洲人成网站77777| 国产精品对白刺激| 久久久久久久久久久免费精品| 91精品国产91久久久久久久久| 亚洲电影免费观看高清| 久久69精品久久久久久久电影好| 成人免费网视频| 91日本在线视频| 在线色欧美三级视频| 亚洲国产99精品国自产| 国产精品视频成人| 在线观看不卡av| 亚洲福利精品在线| 中文字幕精品av| 国产精品69精品一区二区三区| 久久久久久成人| 国产视频在线一区二区| 国产成人欧美在线观看| 精品一区二区电影| 久久亚洲电影天堂| 亚洲综合中文字幕68页| 成人性生交大片免费观看嘿嘿视频| 午夜精品久久久99热福利| 亚洲成色777777在线观看影院| 青青青国产精品一区二区| 亚洲a一级视频| 亚洲成人网久久久| 欧美成人午夜剧场免费观看| 欧美亚洲激情在线| 69国产精品成人在线播放| 北条麻妃一区二区三区中文字幕| 国语自产精品视频在免费| 久久精品视频在线播放| 国产精品专区h在线观看| 91精品视频播放| 91精品国产色综合久久不卡98| 国产日韩一区在线| 久久精品国产2020观看福利| 日韩美女在线观看| 亚洲第五色综合网| 欧美日韩激情美女| 日韩69视频在线观看| 日韩美女免费线视频| 91精品国产精品| 亚洲aa中文字幕| 国产精品999| 久久精品亚洲一区| 91在线观看欧美日韩| 国产精品稀缺呦系列在线| 国内精品国产三级国产在线专| 国产美女久久精品| 国产精品免费久久久久影院| 岛国av午夜精品| 亚洲bt欧美bt日本bt| 欧美大人香蕉在线| 精品小视频在线| 亚洲性夜色噜噜噜7777| 日本电影亚洲天堂| 91丨九色丨国产在线| 国产成人精品av在线| 欧美超级免费视 在线| 在线亚洲欧美视频| 日韩精品在线免费| 日韩欧美成人免费视频| 国产精品老女人视频| 日韩在线精品一区| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲男人第一av网站| 法国裸体一区二区| 国产玖玖精品视频| 国产精品亚洲美女av网站| 亚洲国产欧美一区二区三区同亚洲| 亚洲全黄一级网站| 少妇av一区二区三区| 国产噜噜噜噜久久久久久久久| 国产精品r级在线| 日韩av电影在线播放| 中文字幕日韩有码| 亚洲18私人小影院| 欧美一级黑人aaaaaaa做受| 亚洲福利视频专区| 精品亚洲男同gayvideo网站|