1. 程式人生 > >php學習之道:php中is_file和file_exist的差別,and推斷文件夾is_dir

php學習之道:php中is_file和file_exist的差別,and推斷文件夾is_dir

文件 -m post 文件的 style 文件夾 原因 -a 文件名

PHP中,is_file和file_isexist是有非常小差別的
1) is_file:
$path ="/path/to/file/text.txt";
if(file_exists($path))
echo "File Exists";
else
echo "File not Exists";
比方在這個樣例中,文件存在會返回true,不存在返回false,但註意的是。假如傳入一個
正確的路徑(比方一個文件文件夾)。也會返回true:
$path ="/path/to/file";

2) file_isexist()
這個就不會了,真的是推斷一個文件是否存在,假如傳入上面的一個盡管看上去

正確的路徑,也是返回false的哦


看了這篇PHP中file_exists與is_file,is_dir的差別的說法基本明確。PHP的 file_exists = is_dir + is_file。

敲代碼驗證一下:

分別運行1000次,記錄所需時間。

文件存在(當前文件夾)
is_file:0.4570ms
file_exists:2.0640ms

文件存在(絕對路徑3層/www/hx/a/)
is_file:0.4909ms
file_exists:3.3500ms

文件存在(絕對路徑5層/www/hx/a/b/c/)
is_file:0.4961ms
file_exists:4.2100ms



文件不存在(當前文件夾)
is_file:2.0170ms
file_exists:1.9848ms

文件不存在(絕對路徑5層/www/hx/a/b/c/)
is_file:4.1909ms
file_exists:4.1502ms

文件夾存在
file_exists:2.9271ms
is_dir:0.4601ms
文件夾不存在
file_exists:2.9719ms
is_dir:2.9359ms

is_file($file)
file_exists($file)
當$file是文件夾時。is_file返回false,file_exists返回true

文件存在的情況下,is_file比file_exists要快得多;

要檢測文件所在的文件夾越深,速度差越多,但至少快4倍。

文件不存在的情況下,is_file比file_exists要慢一點點,但能夠忽略不計。

文件夾存在的情況下,is_dir比file_exists要快得多。
文件夾不存在的情況下。is_dir比file_exists要慢一點點,但能夠忽略不計。

結論:
假設要推斷文件是否存在,用函數 is_file()。
假設要推斷文件夾是否存在,用函數 is_dir(),
好像沒地方須要用file_exists了。不確定傳入的參數是文件還是文件夾的時候用?

我們能夠使用以下的代碼測試一下:

復制代碼代碼例如以下:

$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!

嗯,你沒有看錯,兩次都是輸出“test.txt exists!”。這是為什麽呢?原因就是is_file有緩存。第一次調用is_file函數的時候。PHP會把文件的屬性(file stat)保存下來。當再次調用is_file的時候,假設文件名稱更第一次的一樣,那麽就會直接返回緩存。

那麽把is_file改為file_exists呢?我們能夠把上面代碼的is_file函數改為file_exists函數,再次使用以上測試方法測試。結果例如以下:

test.txt exists!

test.txt no exists!

第二次調用file_exists的時候返回文件不存在,這是由於file_exists函數沒有緩存。沒次調用file_exists的時候都會去磁盤搜索文件是否存在,所以第二次才會返回false。

說了那麽多,我僅僅想說明is_file不能取代file_exists使用,假設你硬是認為is_file的性能好,那我也沒辦法


php學習之道:php中is_file和file_exist的差別,and推斷文件夾is_dir