首頁 > 後端開發 > php教程 > PHP中is_file,file_exists的差別,is_file 不能取代file_exits的理由

PHP中is_file,file_exists的差別,is_file 不能取代file_exits的理由

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2016-07-28 08:28:22
原創
1463 人瀏覽過

is_file 判斷檔案是否存在且檢查指定的檔案名稱是否為正常的檔案;

file_exists 判斷檔案是否存在或目錄是否存在;

is_dir 判斷目錄是否存在;

檢視手冊,雖然這兩個函數的結果都會被緩存,但是is_file卻快了N倍。

還有一個值得注意的:

檔案存在的情況下,is_file比file_exists要快N倍;

檔案不存在的情況下,is_file比file_exists要慢;

結論是,file_exits函數並不會因為該檔案是否真的存在而影響速度,但是is_file影響就大了。


首先要提出的問題是,is_file真的可以取代file_exists使用嗎?答案是否定的。為什麼?原因很簡單,is_file有快取

我們可以用下面的程式碼來測試一下:

複製程式碼

複製程式碼

程式碼如下:

      $filename = 'test.txt';
      if (is_file($filename 🠎.     } else {
          echo "$filename no exists!n";
      }
      sleep(10);       echo "$filename exists!n" ;
      } else {
          echo "$filename no exists!n";
    在上面的程式碼中,第一次使用is_file函數判斷檔案是否存在,然後呼叫sleep函數睡眠10秒。在這10秒內,我們要把test.txt檔案刪除。最後看看第二次呼叫is_file函數的結果。輸出結果如下:
test.txt exists!

test.txt exists!
嗯,你沒有看錯,兩次都是輸出“test.txt exists!”,這是為什麼呢?原因就是is_file有快取。第一次呼叫is_file函數的時候,PHP會把檔案的屬性(file stat)保存下來,當再次呼叫is_file的時候,如果檔案名稱更第一次的一樣,那麼就會直接回傳快取。
那麼把is_file改為file_exists呢?我們可以把上面程式碼的is_file函數改為file_exists函數,再用上面的測試方法測試。結果如下:
test.txt exists!
test.txt no exists!
第二次呼叫file_exists的時候回傳檔案不存在,這是因為file_exists函數沒有緩存,沒次呼叫file_exists的時候都會去磁碟搜尋檔案是否存在,所以第二次才會回傳false。
說了那麼多,我只想說明is_file不能代替file_exists使用,如果你硬是覺得is_file的效能好,那我也沒辦法


以上就介紹了 PHP中is_file,file_exists的差別,is_file 不能取代file_exits的理由,包括了方面的內容,希望對PHP教學有興趣的朋友有幫助。

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
javascript - js正規符合特定字串
來自於 1970-01-01 08:00:00
0
0
0
為什麼說非物件呼叫成員函數fetch()
來自於 1970-01-01 08:00:00
0
0
0
資料庫設定檔必須要用二維數組
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板