首頁 >後端開發 >php教程 >為什麼is_file()函數不能取代file_exists()函數的理由

為什麼is_file()函數不能取代file_exists()函數的理由

怪我咯
怪我咯原創
2017-07-11 10:52:462304瀏覽

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

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

程式碼如下:

<?php  
      $filename = &#39;test.txt&#39;;
      if (is_file($filename)) {
          echo "$filename exists!\n";
      } else {
          echo "$filename no exists!\n";
      }
      sleep(10);
     if (is_file($filename)) {
          echo "$filename exists!\n";
      } else {
          echo "$filename no exists!\n";
      }
?>

在執行測試程式碼時,我們確保test.txt檔案存在。在上面的程式碼中,第一次使用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()函數不能取代file_exists()函數的理由的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn