is_file真的可以取代file_exists使用嗎?答案是否定的。為什麼?原因很簡單,is_file有快取
我們可以用下面的程式碼測試一下:
程式碼如下:
<?php $filename = 'test.txt'; 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中文網其他相關文章!