程序開發(fā)人員通常會把可重復使用的函數(shù)寫入到單個文件中,在使用某些函數(shù)時,直接調用此文件,而無需再次編寫,這種調用文件的過程一般被稱為包含。程序開發(fā)人員都希望代碼更加靈活,所以通常會將被包含的文件設置為變量,用來進行動態(tài)調用,但正是由于這種靈活性,從而導致客戶端可以調用一個惡意文件,造成文件包含漏洞。
成都創(chuàng)新互聯(lián)公司長期為上千多家客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網生態(tài)環(huán)境。為舒蘭企業(yè)提供專業(yè)的成都網站設計、網站建設,舒蘭網站改版等技術服務。擁有10年豐富建站經驗和眾多成功案例,為您定制開發(fā)。
PHP中提供了四個文件包含的函數(shù),分別是include()、include_once()、require()和require_once(),它們的區(qū)別如下:
require找不到被包含的文件時會產生致命錯誤,并停止腳本運行。
include找不到被包含的文件時只會產生警告,腳本將繼續(xù)運行。
include_once與include類似,唯一區(qū)別是如果該文件中的代碼已經被包含,則不會再次包含。
require_once與require類似,唯一區(qū)別是如果該文件中的代碼已經被包含,則不會再次包含。
比如我們看下面這個例子,01.txt是一個正常的文本文件,但文件內容卻是符合PHP語法的代碼:
在02.php文件中包含01.txt,代碼如下:
將這兩個文件都放到D:\AppServ\www目錄,然后在瀏覽器中訪問02.php,可以看到01.txt中的代碼被正確執(zhí)行了。接下來將02.txt文件的擴展名分別改為jpg、rar、doc、xxx進行測試,發(fā)現(xiàn)都可以正確顯示phpinfo信息。由此可知,只要文件內容符合PHP語法規(guī)范,那么任何擴展名都可以被PHP解析。
我們再創(chuàng)建一個測試文件03.txt,文件內容是“Hello,world!”,并不符合PHP語法規(guī)范,可以發(fā)現(xiàn)這種文件可以直接顯示其內容。