《PHP學(xué)習(xí):PHP中file_exists使用中遇到的問題小結(jié)》要點(diǎn):
本文介紹了PHP學(xué)習(xí):PHP中file_exists使用中遇到的問題小結(jié),希望對您有用。如果有疑問,可以聯(lián)系我們。
介紹PHP學(xué)習(xí)
我發(fā)現(xiàn)了一個(gè)問題,今天與大家分享.我把整個(gè)過程描述一下.PHP學(xué)習(xí)
問題:公司有個(gè)框架是基于smarty寫的,我負(fù)責(zé)php的升級(jí),維護(hù)人員把新環(huán)境布上來之后,測試人員找我提出經(jīng)常報(bào)錯(cuò)(錯(cuò)誤:提示找不到文件的).PHP學(xué)習(xí)
我追蹤了一下代碼,原來是smarty的這個(gè)地方報(bào)的錯(cuò)誤. PHP學(xué)習(xí)
PHP學(xué)習(xí)
錯(cuò)誤:這里報(bào)出文件不存在.PHP學(xué)習(xí)
思考過程:PHP學(xué)習(xí)
1、我原以為是程序里沒有這個(gè)文件呢,結(jié)果發(fā)現(xiàn),文件是有的,那是怎么回事?PHP學(xué)習(xí)
2、后來我再猜是不是php內(nèi)核有問題,我把php的相關(guān)內(nèi)核文件看了一遍,也沒發(fā)現(xiàn)問題.結(jié)果我就把整個(gè)過程跟項(xiàng)目經(jīng)理說去了.――事情也沒辦理,就這樣先不了了之.升級(jí)的事情先耽誤著.PHP學(xué)習(xí)
今天又發(fā)現(xiàn)這個(gè)問題,我第一反應(yīng)是php版本是不是升級(jí)了,發(fā)現(xiàn)沒有.――后來把整個(gè)目錄設(shè)置成777就沒事了(chmod 777 -R 目錄).我想是不是file_exists()辦法問題.PHP學(xué)習(xí)
所以,我就進(jìn)行了相關(guān)的調(diào)試和實(shí)驗(yàn).PHP學(xué)習(xí)
PHP學(xué)習(xí)
調(diào)試過程調(diào)試代碼:PHP學(xué)習(xí)
PHP學(xué)習(xí)
目錄:PHP學(xué)習(xí)
PHP學(xué)習(xí)
觀察各個(gè)權(quán)限:test對www是沒有任何權(quán)限的,而執(zhí)行文件index.php有讀寫執(zhí)行權(quán)限,包含文件test.txt有讀寫權(quán)限.PHP學(xué)習(xí)
PHP學(xué)習(xí)
PHP學(xué)習(xí)
運(yùn)行結(jié)果:PHP學(xué)習(xí)
PHP學(xué)習(xí)
PHP學(xué)習(xí)
目錄的執(zhí)行權(quán)限影響file_exists()PHP學(xué)習(xí)
1、給test一個(gè)最大的權(quán)限――755PHP學(xué)習(xí)
PHP學(xué)習(xí)
PHP學(xué)習(xí)
PHP學(xué)習(xí)
既然成功了,說明file_exists()函數(shù)是受目錄權(quán)限的限制的.PHP學(xué)習(xí)
那什么樣的目錄權(quán)限影響file_exists()呢?PHP學(xué)習(xí)
我做了幾個(gè)實(shí)驗(yàn):PHP學(xué)習(xí)
1、文件的任何上級(jí)目錄,只有寫權(quán)限時(shí)報(bào)文件不存在;PHP學(xué)習(xí)
2、文件的任何上級(jí)目錄,只有讀權(quán)限時(shí)也報(bào)文件不存在;PHP學(xué)習(xí)
3、而當(dāng)所有上級(jí)目錄都有執(zhí)行權(quán)限的時(shí)候,報(bào)文件是存在的,一切都正常.PHP學(xué)習(xí)
結(jié)果,說明file_exists()在判斷文件是否存在的時(shí)候是遞歸判斷每個(gè)目錄是不是有執(zhí)行權(quán)限.PHP學(xué)習(xí)
修改文件路徑為相對路徑,得出一樣的結(jié)果.PHP學(xué)習(xí)
PHP學(xué)習(xí)
PHP學(xué)習(xí)
總結(jié)PHP學(xué)習(xí)
在php手冊上并沒有提到,file_exists會(huì)受目錄的執(zhí)行權(quán)限影響.今通過此文告知那些也有這方面問題的開發(fā)者.僅以此為戒.PHP學(xué)習(xí)
附加信息PHP學(xué)習(xí)
感謝大家留的言,非常有用.經(jīng)過大家的意見我再查了下手冊,確實(shí),如果目錄沒有執(zhí)行權(quán)限,php-fpm應(yīng)用進(jìn)程就不能到這個(gè)目錄下面去進(jìn)行文件搜索,當(dāng)然就認(rèn)為文件不存在(實(shí)際是認(rèn)為沒有可執(zhí)行的目錄是不存在的).手冊內(nèi)容,大家可以一起斟酌一下,主要是執(zhí)行權(quán)限.在這里就不詳談讀寫權(quán)限了(一般都很好理解).PHP學(xué)習(xí)
PHP學(xué)習(xí)
明顯手冊中,對目錄的執(zhí)行權(quán)限有明確的指示.對目錄的執(zhí)行權(quán)限,就是擁有被搜索的權(quán)利.PHP學(xué)習(xí)
PHP學(xué)習(xí)
如果這篇文章對你有所幫助,或者也讓你辦理了此類問題,請推薦一把,讓哥們有更強(qiáng)的寫作動(dòng)力.PHP學(xué)習(xí)
維易PHP培訓(xùn)學(xué)院每天發(fā)布《PHP學(xué)習(xí):PHP中file_exists使用中遇到的問題小結(jié)》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/6972.html