PHP中file exists使用中遇到的問題小結

2022-10-06 09:33:14 字數 1303 閱讀 4721

介紹

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

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

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

錯誤:這裡報出檔案不存在。

思考過程:

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

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

今天又發現這個問題,我第一反應是php版本是不是公升級了,發現沒有。——後來ikwdeg把整個目錄設定成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會受目錄的執行許可權影響。今通過此文告知那些也有這方面問題的開發者。僅以此為戒。

附加資訊

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

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

本文標題: php中file_exists使用中遇到的問題小結

本文位址: /wangluo/php/146436.html

php中heredoc和nowdoc的使用方法

heredoc技術,在正規的php文件中和技術書籍中一般沒有詳細講述,只是提到了這是一種perl風格的字串輸出技術。但是現在的一些論壇程式,和部分文章系統,都巧妙的使用heredoc技術,來部分的實現了介面與 的準分離,phpwind模板就是乙個典型的例子。如下 name 淺水遊 print hel...

redis階段總結 php中redis的使用

今天是五一節了,學了一段時間的redis。由於專案進度原因,一直拖到現在今天做個收尾總結。安裝 wget 4.tar.gz cd phpredis 2.2 7 進入 phpredis 目錄 usr local php bin phpize php安裝後的路徑 configure with php c...

使php支援mbstring庫

mbstring庫 全稱是multi byte string 即各種語言都有自己的編碼,他們的位元組數是不一樣的,目前php內部的編碼只支援iso 8859 euc jp,utf 8 其他的編碼的語言是沒辦法在php程式上正確顯示的。解決的方法就是通過php的mbstring函式庫來解決 其安裝是在...