Saya perlu memeriksa apakah file ada di HDD di lokasi yang ditentukan ($ path. $ File_name).
Apa perbedaan antara is_file()
and file_exists()
functions dan mana yang lebih baik / lebih cepat digunakan di PHP?
Saya perlu memeriksa apakah file ada di HDD di lokasi yang ditentukan ($ path. $ File_name).
Apa perbedaan antara is_file()
and file_exists()
functions dan mana yang lebih baik / lebih cepat digunakan di PHP?
Jawaban:
is_file()
akan kembali false
jika jalur yang diberikan menunjuk ke direktori. file_exists()
akan kembali true
jika jalur yang diberikan menunjuk ke file atau direktori yang valid . Jadi itu akan tergantung sepenuhnya pada kebutuhan Anda. Jika Anda ingin mengetahui secara spesifik apakah itu file atau bukan, gunakan is_file()
. Jika tidak, gunakan file_exists()
.
is_file()
adalah yang tercepat, tetapi benchmark terbaru menunjukkan yang file_exists()
sedikit lebih cepat bagi saya. Jadi saya rasa itu tergantung pada servernya.
Tolok ukur pengujian saya:
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";
}
Edit: @Tivie terima kasih atas komentarnya. Jumlah siklus diubah dari 1000 menjadi 10k. Hasilnya adalah:
ketika file tersebut ada :
is_file x 10000 1,5651218891144 detik
file_exists x 10000 1,5016479492188 detik
dapat dibaca x 10000 3,7882499694824 detik
ketika file tidak ada :
is_file x 10000 0,23920488357544 detik
file_exists x 10000 0,22103786468506 detik
dapat dibaca x 10000 0,21929788589478 detik
Edit: pindah clearstatcache (); di dalam lingkaran. Terima kasih CJ Dennis.
is_file()
lebih cepat dari file_exists()
. Jika Anda tahu itu adalah file (dan bukan direktori), gunakan saja.
is_dir()
ternyata 20% lebih cepat dari file_exists()
(yang tidak, btw), itu bisa menjadi perbedaan penting jika Anda hanya memeriksa dirs ...
Tidak keduanya.
is_file () dapat mengembalikan nilai true jika file tidak ada.
file_exists () dapat mengembalikan nilai true jika file tersebut adalah direktori.
Jadi jika perlu file dan perlu ada maka Anda memerlukan keduanya.
Kecepatan tidak menjadi masalah di sini karena keduanya tidak sama. Gunakan hanya satu jika hanya satu fungsi yang penting dan itu akan lebih cepat.
Saya tahu posting ini sudah tua tetapi perbedaan antara fungsi ini tidak hanya pada perilakunya. Jika Anda menggunakan is_file () untuk memeriksa keberadaan file besar, lebih dari 2 Go. Anda akan terkejut. File tidak ada. :( Tetapi jika Anda memeriksa dengan file_exists (), itu berhasil.
is_file
akan lebih cepat jika menggunakan dengan backslash: \is_file
. Dalam hal ini PHP akan memberikan optimasi opcache dan tidak file_exists
juga tidak.