Tôi cần kiểm tra xem một tệp có trên ổ cứng tại một vị trí được chỉ định không ($ path. $ File_name).
Đó là sự khác biệt giữa is_file()
và các file_exists()
chức năng và cái nào tốt hơn / nhanh hơn để sử dụng trong PHP?
Tôi cần kiểm tra xem một tệp có trên ổ cứng tại một vị trí được chỉ định không ($ path. $ File_name).
Đó là sự khác biệt giữa is_file()
và các file_exists()
chức năng và cái nào tốt hơn / nhanh hơn để sử dụng trong PHP?
Câu trả lời:
is_file()
sẽ trở lại false
nếu đường dẫn đã cho vào một thư mục. file_exists()
sẽ trả về true
nếu đường dẫn đã cho trỏ đến một tệp hoặc thư mục hợp lệ . Vì vậy, nó sẽ phụ thuộc hoàn toàn vào nhu cầu của bạn. Nếu bạn muốn biết cụ thể đó có phải là một tập tin hay không, hãy sử dụng is_file()
. Nếu không, sử dụng file_exists()
.
is_file()
là nhanh nhất, nhưng điểm chuẩn gần đây cho thấy nó file_exists()
nhanh hơn một chút đối với tôi. Vì vậy, tôi đoán nó phụ thuộc vào máy chủ.
Điểm chuẩn kiểm tra của tôi:
benchmark('is_file');
benchmark('file_exists');
benchmark('is_readable');
function benchmark($funcName) {
$numCycles = 10000;
$time_start = microtime(true);
for ($i = 0; $i < $numCycles; $i++) {
clearstatcache();
$funcName('path/to/file.php'); // or 'path/to/file.php' instead of __FILE__
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "$funcName x $numCycles $time seconds <br>\n";
}
Chỉnh sửa: @Tivie cảm ơn vì nhận xét. Thay đổi số chu kỳ từ 1000 đến 10k. Kết quả là:
khi tập tin tồn tại :
is_file x 10000 1.5651218891144 giây
file_exists x 10000 1.5016479492188 giây
is_readable x 10000 3.7882499694824 giây
khi tập tin không tồn tại :
is_file x 10000 0.23920488357544 giây
file_exists x 10000 0.22103786468506 giây
is_readable x 10000 0.21929788589478 giây
Chỉnh sửa: di chuyển Clearstatcache (); bên trong vòng lặp. Cảm ơn CJ Dennis.
is_file()
nhanh hơn file_exists()
. Nếu bạn biết đó là một tập tin (và không phải là một thư mục), chắc chắn sử dụng nó để thay thế.
is_dir()
hóa ra nhanh hơn 20% so với file_exists()
(mà nó không, btw), thì đó có thể là một sự khác biệt quan trọng nếu bạn chỉ kiểm tra các thư mục nào ...
Cũng không.
is_file () có thể trả về true nếu tệp không tồn tại.
file_exists () có thể trả về true nếu tệp là một thư mục.
Vì vậy, nếu nó cần phải là một tập tin và nó cần tồn tại thì bạn cần cả hai.
Tốc độ không thành vấn đề ở đây vì chúng không giống nhau. Chỉ sử dụng một nếu chỉ có một chức năng quan trọng và nó sẽ nhanh hơn.
Tôi biết bài này đã cũ nhưng sự khác biệt giữa các chức năng này không chỉ là hành vi của họ. Nếu bạn sử dụng is_file () để kiểm tra sự tồn tại của tệp lớn, hơn 2 Go. Bạn sẽ bất ngờ. Tập tin không tồn tại. :( Nhưng nếu bạn kiểm tra với file_exists (), thì nó hoạt động.