PHP中的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!
之所以会出现这种异常,是因为is_file是有缓存的,当第一次调用is_file,会把文件属性保存下来,
当再次调用is_file的时候,如果文件名更第一次的一样,那么就会直接返回缓存。
但是换成file_exists并不会出现这种情况,file_exists没有缓存,每次调用的时候都会去磁盘中搜索文件是否存在,所以调用该函数是安全的,可靠的。