程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP中file_exists使用中遇到的問題小結,file_exists小結

PHP中file_exists使用中遇到的問題小結,file_exists小結

編輯:關於PHP編程

PHP中file_exists使用中遇到的問題小結,file_exists小結


介紹

我發現了一個問題,今天與大家分享。我把整個過程描述一下。

問題:公司有個框架是基於smarty寫的,我負責php的升級,維護人員把新環境布上來之後,測試人員找我提出經常報錯(錯誤:提示找不到文件的)。

我追蹤了一下代碼,原來是smarty的這個地方報的錯誤。  

  錯誤:這裡報出文件不存在。

  思考過程:

  1、我原以為是程序裡沒有這個文件呢,結果發現,文件是有的,那是怎麼回事?

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

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

  所以,我就進行了相關的調試和實驗。

調試過程調試代碼:

目錄:

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

運行結果:

目錄的執行權限影響file_exists()

1、給test一個最大的權限——755

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

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

我做了幾個實驗:

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

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

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

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

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

總結

在php手冊上並沒有提到,file_exists會受目錄的執行權限影響。今通過此文告知那些也有這方面問題的開發者。僅以此為戒。

附加信息

感謝大家留的言,非常有用。經過大家的意見我再查了下手冊,確實,如果目錄沒有執行權限,php-fpm應用進程就不能到這個目錄下面去進行文件搜索,當然就認為文件不存在(實際是認為沒有可執行的目錄是不存在的)。手冊內容,大家可以一起斟酌一下,主要是執行權限。在這裡就不詳談讀寫權限了(一般都很好理解)。

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

如果這篇文章對你有所幫助,或者也讓你解決了此類問題,請推薦一把,讓哥們有更強的寫作動力。

您可能感興趣的文章:

  • php file_exists 檢查文件或目錄是否存在的函數
  • PHP中file_exists與is_file,is_dir的區別介紹
  • 解析php file_exists無效的解決辦法
  • PHP中is_file不能替代file_exists的理由
  • PHP中file_exists函數不支持中文名的解決方法
  • PHP中file_exists()判斷中文文件名無效的解決方法
  • PHP中判斷文件存在使用is_file還是file_exists?
  • php中file_exists函數使用詳解

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved