這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)在PHP中使用file_exists時會遇到哪些問題,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊、虛擬主機、營銷軟件、網(wǎng)站建設(shè)、昌江網(wǎng)站維護、網(wǎng)站推廣。問題:公司有個框架是基于smarty寫的,我負責php的升級,維護人員把新環(huán)境布上來之后,測試人員找我提出經(jīng)常報錯(錯誤:提示找不到文件的)。
我追蹤了一下代碼,原來是smarty的這個地方報的錯誤?! ?/p>
錯誤:這里報出文件不存在。
思考過程:
1、我原以為是程序里沒有這個文件呢,結(jié)果發(fā)現(xiàn),文件是有的,那是怎么回事?
2、后來我再猜是不是php內(nèi)核有問題,我把php的相關(guān)內(nèi)核文件看了一遍,也沒發(fā)現(xiàn)問題。結(jié)果我就把整個過程跟項目經(jīng)理說去了?!虑橐矝]解決,就這樣先不了了之。升級的事情先耽誤著。
今天又發(fā)現(xiàn)這個問題,我第一反應是php版本是不是升級了,發(fā)現(xiàn)沒有。——后來把整個目錄設(shè)置成777就沒事了(chmod 777 -R 目錄)。我想是不是file_exists()方法問題。
調(diào)試過程調(diào)試代碼:
目錄:
觀察各個權(quán)限:test對www是沒有任何權(quán)限的,而執(zhí)行文件index.php有讀寫執(zhí)行權(quán)限,包含文件test.txt有讀寫權(quán)限。
運行結(jié)果:
目錄的執(zhí)行權(quán)限影響file_exists()
1、給test一個較大的權(quán)限——755
既然成功了,說明file_exists()函數(shù)是受目錄權(quán)限的限制的。
那什么樣的目錄權(quán)限影響file_exists()呢?
我做了幾個實驗:
1、文件的任何上級目錄,只有寫權(quán)限時報文件不存在;
2、文件的任何上級目錄,只有讀權(quán)限時也報文件不存在;
3、而當所有上級目錄都有執(zhí)行權(quán)限的時候,報文件是存在的,一切都正常。
結(jié)果,說明file_exists()在判斷文件是否存在的時候是遞歸判斷每個目錄是不是有執(zhí)行權(quán)限。
修改文件路徑為相對路徑,得出一樣的結(jié)果。
總結(jié)
在php手冊上并沒有提到,file_exists會受目錄的執(zhí)行權(quán)限影響。今通過此文告知那些也有這方面問題的開發(fā)者。僅以此為戒。
附加信息
感謝大家留的言,非常有用。經(jīng)過大家的意見我再查了下手冊,確實,如果目錄沒有執(zhí)行權(quán)限,php-fpm應用進程就不能到這個目錄下面去進行文件搜索,當然就認為文件不存在(實際是認為沒有可執(zhí)行的目錄是不存在的)。手冊內(nèi)容,大家可以一起斟酌一下,主要是執(zhí)行權(quán)限。在這里就不詳談讀寫權(quán)限了(一般都很好理解)。
上述就是小編為大家分享的在PHP中使用file_exists時會遇到哪些問題了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。