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