搜尋
首頁後端開發php教程php中關於使用include(require)嵌套包含檔案時的問題需要注意

php中關於使用include(require)嵌套包含檔案時的問題需要注意

Jun 25, 2017 am 10:31 AM
includephprequire使用關於嵌套

/** 
* Author:RDP 
* My mail:abel1314520@gmail.com 
* My blog:  http://blog.teamhaka.com
 */


附註:以下說明都適用於includeinclude_oncerequire require_once

範例基本上都是a.php包含b.php,b.php包含c.php這樣的巢狀包含形式。主要討論的是a.php和c.php之間的結構關係。其中a.php為入口檔案

 

包含檔案時的路徑其實有三種選擇。

分別是

一絕對路徑                                     例:/aaa/bbb/ccc/c.php

二相對路徑(當前目錄使用./)           例:./ccc /c.php

三相對路徑(目前目錄不使用./)       例:ccc/c.php

關於兩個相對路徑,可以直觀的注意上述(二)和(三)相對路徑的不同點。有沒有./在嵌套包含檔案的時候,會有很大的不同!後文具體說明。

 

一使用絕對路徑的注意點:

#直接寫絕對路徑沒有什麼好注意的,但是在使用dirname(FILE)來取得目前檔案的絕對路徑時,要注意無論寫這條語句的php檔案是否被其他檔案所包含,dirname(FILE)總是指向寫這條語句的php檔案所在的絕對路徑

範例:  

#作為入口檔案的a.php: require './b/b.php';

b.php:require dirname(FILE).'/c.php';

那麼在執行a.php時,b.php中的dirname(FILE)得到的是b.php所在的絕對路徑,而不是a.php所在的絕對路徑。 (在此例中意味著b.php和c.php是同屬於b目錄下的)

 

二使用相對路徑(目前目錄使用./)的注意點:

相對路徑是以某個目錄為基準來決定需要包含的檔案所在的位置。 相對路徑的基準目錄就是程式執行的入口檔案所在的目錄,不管包含嵌套多少層。

範例:  

#作為入口檔案的a.php: require './b/b.php';

b.php: require './c/c.php';  //請注意這裡包含c目錄時使用的是./  

那麼,注意這裡的c.php所在的c目錄和b目錄是同級的,而並非是c目錄在b目錄的下面。因為b.php中的包含使用了相對路徑,而程式入口是a.php,所以b.php包含使用的相對路徑應是以入口檔案a.php所在目錄來作為基準的。

 

三 使用相對路徑(目前目錄不使用./)的注意點:

分兩步驟處理,首先以程式入口文件所在目錄為基準沿著相對路徑來尋找,找到存在的檔案則包含成功退出(和上述的【相對路徑(目前目錄使用./)】一樣)。如果找不到,則走第二步處理。即寫require語句的php檔案所在目錄來和require中包含的路徑進行拼接,還是以入口檔案所在目錄為基準,沿著這個拼接得到的相對路徑來搜尋,檔案存在則包含成功,否則表示被包含文件不存在。看例子理解比較容易。

範例:  

為入口檔案的a.php: require './b/b.php';

b.php: require 'c/c.php';  //請注意這裡包含c目錄時沒有使用./  

那麼,首先會在入口檔案a.php所在的目錄下搜尋c/ c.php,如果有,則包含成功。

如果沒找到,接下來就將b.php的所在路徑(./b/b.php)和b.php中require的路徑(c/c.php)進行拼接,得到拼接後的相對路徑./b/c/c.php。在入口檔案a.php所在的目錄下搜尋./b/c/c.php,存在就包含成功,否則即出錯。

 

/*******************分割線***********************/

稍微總結下相對路徑的巢狀包含。

相對路徑的巢狀包含,都是以程式入口檔案所在目錄為基準來沿著相對路徑來搜尋需要包含的檔案的。

但是如果在相對路徑中使用到了當前目錄這個概念時,就會有差異。即,使不使用./來表示當前目錄,所帶來的處理是不一樣的。

有./就是以入口文件所在目录为基准来直接搜寻,

没有./,则先以入口文件所在目录为基准来搜寻,找不到的情况下做路径的拼接处理,然后按拼接后的相对路径来搜寻,基准依然是入口文件所在目录。

综合下使用./和不使用./的一个例子

文件结构如下:

/WEBROOT

——–test.php

——–/folder2/test2.php

——–/folder2/folder3/test3.php

作为程序入口的test.php包含test2.php,而test2.php中包含了test3.php。

那么在test2.php中的包含路径的写法有如下差异:

require ('folder2/folder3/test3.php'); //正确! 直接在入口程test.php所在的WEBROOT目录下搜寻folder2/folder3/test3.php  
参考上述的【三 使用相对路径(当前目录不使用./)的注意点】


require ('folder3/test3.php');  //正确! 拼接相对路径然后搜寻  参考上述的【三 使用相对路径(当前目录不使用./)的注意点】


  1. require
     (
    './folder2/folder3/test3.php'
    );  
    //正确!  参考上述的【二 使用相对路径(当前目录使用./)的注意点】


  1. require
     (
    './test3/test3.php'
    );    
    //错误!入口程序test.php所在的WEBROOT目录下并不存在test3这个目录!参考上述的【二 使用相对路径(当前目录使用./)的注意点】

以上是php中關於使用include(require)嵌套包含檔案時的問題需要注意的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
優化PHP代碼:減少內存使用和執行時間優化PHP代碼:減少內存使用和執行時間May 10, 2025 am 12:04 AM

TooptimizePHPcodeforreducedmemoryusageandexecutiontime,followthesesteps:1)Usereferencesinsteadofcopyinglargedatastructurestoreducememoryconsumption.2)LeveragePHP'sbuilt-infunctionslikearray_mapforfasterexecution.3)Implementcachingmechanisms,suchasAPC

PHP電子郵件:分步發送指南PHP電子郵件:分步發送指南May 09, 2025 am 12:14 AM

phpisusedforsendendemailsduetoitsignegrationwithservermailservicesand andexternalsmtpproviders,自動化intifications andMarketingCampaigns.1)設置設置yourphpenvenvironnvironnvironmentwithaweberswithawebserverserververandphp,確保themailfunctionisenabled.2)useabasicscruct

如何通過PHP發送電子郵件:示例和代碼如何通過PHP發送電子郵件:示例和代碼May 09, 2025 am 12:13 AM

發送電子郵件的最佳方法是使用PHPMailer庫。 1)使用mail()函數簡單但不可靠,可能導致郵件進入垃圾郵件或無法送達。 2)PHPMailer提供更好的控制和可靠性,支持HTML郵件、附件和SMTP認證。 3)確保正確配置SMTP設置並使用加密(如STARTTLS或SSL/TLS)以增強安全性。 4)對於大量郵件,考慮使用郵件隊列系統來優化性能。

高級PHP電子郵件:自定義標題和功能高級PHP電子郵件:自定義標題和功能May 09, 2025 am 12:13 AM

CustomHeadersheadersandAdvancedFeaturesInphpeMailenHanceFunctionalityAndreliability.1)CustomHeadersheadersheadersaddmetadatatatatataatafortrackingandCategorization.2)htmlemailsallowformattingandttinganditive.3)attachmentscanmentscanmentscanbesmentscanbestmentscanbesentscanbesentingslibrarieslibrarieslibrariesliblarikelikephpmailer.4)smtppapapairatienticationaltication enterticationallimpr

使用PHP和SMTP發送電子郵件的指南使用PHP和SMTP發送電子郵件的指南May 09, 2025 am 12:06 AM

使用PHP和SMTP發送郵件可以通過PHPMailer庫實現。 1)安裝並配置PHPMailer,2)設置SMTP服務器細節,3)定義郵件內容,4)發送郵件並處理錯誤。使用此方法可以確保郵件的可靠性和安全性。

使用PHP發送電子郵件的最佳方法是什麼?使用PHP發送電子郵件的最佳方法是什麼?May 08, 2025 am 12:21 AM

ThebestapproachforsendingemailsinPHPisusingthePHPMailerlibraryduetoitsreliability,featurerichness,andeaseofuse.PHPMailersupportsSMTP,providesdetailederrorhandling,allowssendingHTMLandplaintextemails,supportsattachments,andenhancessecurity.Foroptimalu

PHP中依賴注入的最佳實踐PHP中依賴注入的最佳實踐May 08, 2025 am 12:21 AM

使用依賴注入(DI)的原因是它促進了代碼的松耦合、可測試性和可維護性。 1)使用構造函數注入依賴,2)避免使用服務定位器,3)利用依賴注入容器管理依賴,4)通過注入依賴提高測試性,5)避免過度注入依賴,6)考慮DI對性能的影響。

PHP性能調整技巧和技巧PHP性能調整技巧和技巧May 08, 2025 am 12:20 AM

phpperformancetuningiscialbecapeitenhancesspeedandeffice,whatevitalforwebapplications.1)cachingwithapcureduccureducesdatabaseloadprovesrovessetimes.2)優化

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具