使用is_file替换file_exists遇上的坑
[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/142/ ]
之前写过一片文章记录了php的一些使用技巧,并对is_file、is_dir、file_exists三个函数做了比较,得出的结论是file_exists性能没前两个函数高,所以之后一直用is_file、is_dir代替了file_exists,可是最近在做测试的时候发现了is_file的弊端.
之前写过一片文章记录了php的一些使用技巧,并对is_file、is_dir、file_exists三个函数做了比较,得出的结论是file_exists性能没前两个函数高,所以之后一直用is_file、is_dir代替了file_exists,可是最近在做测试的时候发现了is_file的弊端。
先看看如下代码:
<?php $file = 'file.txt'; file_put_contents($file, ''); $createTime = is_file($file) ? filemtime($file) : 0; echo $createTime,'<br>'; unlink($file); $createTime = is_file($file) ? filemtime($file) : 0; echo $createTime,'<br>';
1)我们先创建一个file.txt文件
2)用is_file判断文件是否存在,存在就获取文件修改时间
3)删除file.txt文件
4)重复2)
上边的代码看上去确实没什么问题,如果,我们把代码改一下:
<?php $file = 'file.txt'; file_put_contents($file, ''); $createTime = is_file($file) ? filemtime($file) : 0; echo $createTime,'<br>'; sleep(5); $createTime = file_exists($file) ? filemtime($file) : 0; echo $createTime,'<br>'; $createTime = is_file($file) ? filemtime($file) : 0; echo $createTime,'<br>';
这里我只是调整了删除方式,把unlink,改成了sleep,让程序延缓执行,在程序sleep期间,手动删除生成的file.txt。
运行结果类似如下:
1430358220 0 1430358220
发现问题了吗,在类似这种情况下,is_file没办法判定文件已经被删除了。因为is_file会缓存执行结果返回的信息以提供更快的性能。
所以,在选择使用is_file、is_dir、file_exists之前,还得根据场景来判断。
上一篇:网站接入易宝支付遇上的问题
下一篇:并发编程,简单理解就GO了
我来说两句: