PHP中is_file不能替代file_exists的理由
更新時間:2014年03月04日 11:20:30 作者:
首先要提出的問題是,is_file真的可以替代file_exists使用嗎?答案是否定的。為什么?原因很簡單,is_file有緩存
我們可以使用下面的代碼測試一下:
在運行測試代碼時,我們確保test.txt文件存在。在上面的代碼中,第一次使用is_file函數(shù)判斷文件是否存在,然后調(diào)用sleep函數(shù)睡眠10秒。在這10秒內(nèi),我們要把test.txt文件刪除。最后看看第二次調(diào)用is_file函數(shù)的結(jié)果。輸出結(jié)果如下:
test.txt exists!
test.txt exists!
嗯,你沒有看錯,兩次都是輸出“test.txt exists!”,這是為什么呢?原因就是is_file有緩存。第一次調(diào)用is_file函數(shù)的時候,PHP會把文件的屬性(file stat)保存下來,當(dāng)再次調(diào)用is_file的時候,如果文件名更第一次的一樣,那么就會直接返回緩存。
那么把is_file改為file_exists呢?我們可以把上面代碼的is_file函數(shù)改為file_exists函數(shù),再次使用上面的測試方法測試。結(jié)果如下:
test.txt exists!
test.txt no exists!
第二次調(diào)用file_exists的時候返回文件不存在,這是因為file_exists函數(shù)沒有緩存,沒次調(diào)用file_exists的時候都會去磁盤搜索文件是否存在,所以第二次才會返回false。
說了那么多,我只想說明is_file不能代替file_exists使用,如果你硬是覺得is_file的性能好,那我也沒辦法
復(fù)制代碼 代碼如下:
<?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";
}
?>
$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函數(shù)判斷文件是否存在,然后調(diào)用sleep函數(shù)睡眠10秒。在這10秒內(nèi),我們要把test.txt文件刪除。最后看看第二次調(diào)用is_file函數(shù)的結(jié)果。輸出結(jié)果如下:
test.txt exists!
test.txt exists!
嗯,你沒有看錯,兩次都是輸出“test.txt exists!”,這是為什么呢?原因就是is_file有緩存。第一次調(diào)用is_file函數(shù)的時候,PHP會把文件的屬性(file stat)保存下來,當(dāng)再次調(diào)用is_file的時候,如果文件名更第一次的一樣,那么就會直接返回緩存。
那么把is_file改為file_exists呢?我們可以把上面代碼的is_file函數(shù)改為file_exists函數(shù),再次使用上面的測試方法測試。結(jié)果如下:
test.txt exists!
test.txt no exists!
第二次調(diào)用file_exists的時候返回文件不存在,這是因為file_exists函數(shù)沒有緩存,沒次調(diào)用file_exists的時候都會去磁盤搜索文件是否存在,所以第二次才會返回false。
說了那么多,我只想說明is_file不能代替file_exists使用,如果你硬是覺得is_file的性能好,那我也沒辦法
相關(guān)文章
PHP使用反向Ajax技術(shù)實現(xiàn)在線客服系統(tǒng)詳解
這篇文章主要介紹了PHP使用反向Ajax技術(shù)實現(xiàn)在線客服系統(tǒng),簡單描述了反向ajax的概念、原理及使用反向ajax實現(xiàn)在線客服的相關(guān)操作技巧,需要的朋友可以參考下2019-07-07
memcached 和 mysql 主從環(huán)境下php開發(fā)代碼詳解
一般的大站通常做法是 拿著內(nèi)存當(dāng)數(shù)據(jù)庫來用(memcached). 和很好的讀 寫分離 備份機制 (mysql 的主從) 在這樣的環(huán)境下我們怎么進行PHP開發(fā)呢。2010-05-05
PHPExcel導(dǎo)出Excel報錯:PHPExcel_IOFactory::load()的解決方案
這篇文章主要介紹了PHPExcel導(dǎo)出Excel報錯:PHPExcel_IOFactory::load()的解決方案,文中有詳細(xì)的問題分析和解決方法供大家參考,具有一定的參考價值,需要的朋友可以參考下2023-11-11
PHP計算數(shù)組中值的和與乘積的方法(array_sum與array_product函數(shù))
這篇文章主要介紹了PHP計算數(shù)組中值的和與乘積的方法,結(jié)合實例形式較為詳細(xì)的分析了array_sum與array_product函數(shù)的功能與使用方法,需要的朋友可以參考下2016-04-04
PHP中shuffle數(shù)組值隨便排序函數(shù)用法
這篇文章主要介紹了PHP中shuffle數(shù)組值隨便排序函數(shù)用法,可以比較簡單的實現(xiàn)對數(shù)組的隨機排序,需要的朋友可以參考下2014-11-11

