從字面上看,判斷一個文件是否存在理應使用 file_exists() 函數,但事實上,使用 is_file() 函數也可以達到同樣的效果,如果文件不存在,那麼 is_file() 肯定返回 false。
但是, 這兩個函數的性能可不一樣, is_file() 比 file_exists() 會快點。
如果要檢查的文件存在,那麼is_file() 比 file_exists() 快很多倍,但如果文件不存在,則兩者差不多。
以下是測試的結果,第一個測試是文件存在的,第二個是文件不存在的:
第一次測試,文件存在
<?php
// 運行 file_exists 10000 次
$time = microtime();
$time = explode(' ', $time);
$begintime = $time[1] + $time[0];
for($i=0;$i<10000;$i++)
file_exists('/Users/Jacky'); // 文件存在
$time = microtime();
$time = explode(" ", $time);
$endtime = $time[1] + $time[0];
$totaltime = ($endtime - $begintime);
echo '運行file_exists 10000 次所花時間: ' .$totaltime. ' 秒'.PHP_EOL;
// 運行 is_file 10000 次
$time = microtime();
$time = explode(" ", $time);
$begintime = $time[1] + $time[0];
for($i=0;$i<10000;$i++)
is_file('/Users/Jacky');
$time = microtime();
$time = explode(" ", $time);
$endtime = $time[1] + $time[0];
$totaltime = ($endtime - $begintime);
echo '運行 is_file 10000 次所花時間: ' .$totaltime. ' 秒.'.PHP_EOL;
結果:
第二次測試,文件不存在
<?php
// 運行 file_exists 10000 次
$time = microtime();
$time = explode(' ', $time);
$begintime = $time[1] + $time[0];
for($i=0;$i<10000;$i++)
file_exists('/Users/Jackys'); // 文件不存在
$time = microtime();
$time = explode(" ", $time);
$endtime = $time[1] + $time[0];
$totaltime = ($endtime - $begintime);
echo '運行file_exists 10000 次所花時間: ' .$totaltime. ' 秒'.PHP_EOL;
// 運行 is_file 10000 次
$time = microtime();
$time = explode(" ", $time);
$begintime = $time[1] + $time[0];
for($i=0;$i<10000;$i++)
is_file('/Users/Jackys');
$time = microtime();
$time = explode(" ", $time);
$endtime = $time[1] + $time[0];
$totaltime = ($endtime - $begintime);
echo '運行 is_file 10000 次所花時間: ' .$totaltime. ' 秒.'.PHP_EOL;
結果: