【轉】PHP 雜談 坑爹的file_exists

轉自:http://www.cnblogs.com/baochuan/archive/2012/05/06/2445822.htmlphp

 

介紹html

 
我發現了一個問題,今天與你們分享。我把整個過程描述一下。
 
問題
 
  公司有個框架是基於smarty寫的,我負責php的升級,維護人員把新環境布上來以後,測試人員找我提出常常報錯(錯誤:提示找不到文件的)。
  我追蹤了一下代碼,原來是smarty的這個地方報的錯誤。
  

  錯誤:這裏報出文件不存在。框架

  思考過程:函數

  一、我原覺得是程序裏沒有這個文件呢,結果發現,文件是有的,那是怎麼回事?php-fpm

  二、後來我再猜是否是php內核有問題,我把php的相關內核文件看了一遍,也沒發現問題。結果我就把整個過程跟項目經理說去了。——事情也沒解決,就這樣先不了了之。升級的事情先耽誤着。測試

  今天又發現這個問題,我第一反應是php版本是否是升級了,發現沒有。——後來把整個目錄設置成777就沒事了(chmod 777 -R 目錄)。我想是否是file_exists()方法問題。spa

  因此,我就進行了相關的調試和實驗。 3d

 調試過程
 
調試代碼:

目錄:調試

 

觀察各個權限:test對www是沒有任何權限的,而執行文件index.php有讀寫執行權限,包含文件test.txt有讀寫權限。htm

運行結果:

 

 目錄的執行權限影響file_exists()
 
一、給test一個最大的權限——755

 

既然成功了,說明file_exists()函數是受目錄權限的限制的。

那什麼樣的目錄權限影響file_exists()呢?

我作了幾個實驗:

一、文件的任何上級目錄,只有寫權限時報文件不存在;

二、文件的任何上級目錄,只有讀權限時也報文件不存在;

三、而當全部上級目錄都有執行權限的時候,報文件是存在的,一切都正常。

結果,說明file_exists()在判斷文件是否存在的時候是遞歸判斷每一個目錄是否是有執行權限。

 

修改文件路徑爲相對路徑,得出同樣的結果。

 

 

總結
 
在php手冊上並無提到,file_exists會受目錄的執行權限影響。今經過此文告知那些也有這方面問題的開發者。僅以此爲戒。
 
附加信息
 
感謝你們留的言,很是有用。通過你們的意見我再查了下手冊,確實,若是目錄沒有執行權限,php-fpm應用進程就不能到這個目錄下面去進行文件搜索,固然就認爲文件不存在(實際是認爲沒有可執行的目錄是不存在的)。
手冊內容,你們能夠一塊兒斟酌一下,主要是執行權限。在這裏就不詳談讀寫權限了(通常都很好理解)。

明顯手冊中,對目錄的執行權限有明確的指示。對目錄的執行權限,就是擁有被搜索的權利。
 

 
推薦
 
若是這篇文章對你有所幫助,或者也讓你解決了此類問題,請推薦一把,讓哥們有更強的寫做動力。
相關文章
相關標籤/搜索