PHP file_exists与is_file区别
file_exist&&is_file区别
官方文档:
file_exists() 函数检查文件或目录是否存在。
如果指定的文件或目录存在则返回 true,否则返回 false。
is_file() 函数检查指定的文件是否是常规的文件。
如果文件是常规的文件,该函数返回 TRUE。
<?php
var_dump(__DIR__); // 当前路径
// file_exists检测
echo "\r\r".'file_exists'."\r";
var_dump(file_exists(__DIR__)); // 检测绝对目录
var_dump(file_exists('../666')); // 检测相对目录
var_dump(file_exists(__DIR__.'/index.php')); // 检测绝对路径文件
var_dump(file_exists('./index.php')); // 检测相对路径文件
var_dump(file_exists($_SERVER['HTTP_HOST'].'/index.php')); // 检测网络文件
$tmp = microtime(true)*10000;
for($i=0;$i<1000;$i++){ // 验证file_exists效率(文件不存在存在)
clearstatcache(); // 清除文件函数状态缓存
file_exists('./index.php');
}
echo 'file_exists文件不存在';
echo (microtime(true)*10000)-$tmp;
echo "\r";
$tmp = microtime(true)*10000;
for($i=0;$i<1000;$i++){ // 验证file_exists效率(文件不存在存在)
clearstatcache(); // 清除文件函数状态缓存
file_exists('./index1.php');
}
echo 'file_exists文件不存在';
echo (microtime(true)*10000)-$tmp;
// is_file检测
echo "\r\r".'is_file'."\r";
var_dump(is_file(__DIR__)); // 检测绝对目录
var_dump(is_file('../666')); // 检测相对目录
var_dump(is_file(__DIR__.'/index.php')); // 检测绝对路径文件
var_dump(is_file('./index.php')); // 检测相对路径文件
var_dump(is_file($_SERVER['HTTP_HOST'].'/index.php')); // 检测网络文件
$tmp = microtime(true)*10000;
for($i=0;$i<1000;$i++){ // 验证is_file效率(文件存在)
clearstatcache(); // 清除文件函数状态缓存
is_file('./index.php');
}
echo 'is_file文件存在';
echo (microtime(true)*10000)-$tmp;
echo "\r";
$tmp = microtime(true)*10000;
for($i=0;$i<1000;$i++){ // 验证file_exists效率
clearstatcache(); // 清除文件函数状态缓存
is_file('./index1.php');
}
echo 'is_file文件不存在';
echo (microtime(true)*10000)-$tmp;
返回值
由此可见
区别
is_file | file_exists | |
---|---|---|
检测范围 | 文件 | 文件或目录 |
检测效率(文件存在1000次) | 0.0085秒 | 0.0273秒 |
检测效率(文件不存在1000次) | 0.0267秒 | 0.0642秒 |
共同点
只能检测绝对路径和相对路径(检测不到就是路径不对)
无法检测网路路径
都会被缓存状态,如果一个请求会多次查询同一个文件状态,都会被缓存。需要clearstatcache()清除
注意
域名拼接路径都是网路地址,不管是你本地还是网上