ฉันต้องการตรวจสอบว่าไฟล์อยู่ใน HDD ในตำแหน่งที่ระบุหรือไม่ ($ path. $ file_name)
อะไรคือความแตกต่างระหว่างฟังก์ชันis_file()
และfile_exists()
ฟังก์ชันใดที่ดีกว่า / เร็วกว่าในการใช้ PHP?
ฉันต้องการตรวจสอบว่าไฟล์อยู่ใน HDD ในตำแหน่งที่ระบุหรือไม่ ($ path. $ file_name)
อะไรคือความแตกต่างระหว่างฟังก์ชันis_file()
และfile_exists()
ฟังก์ชันใดที่ดีกว่า / เร็วกว่าในการใช้ PHP?
คำตอบ:
is_file()
จะส่งคืนfalse
หากเส้นทางที่กำหนดชี้ไปยังไดเร็กทอรี file_exists()
จะส่งคืนtrue
หากเส้นทางที่กำหนดชี้ไปยังไฟล์หรือไดเร็กทอรีที่ถูกต้อง ดังนั้นมันจะขึ้นอยู่กับความต้องการของคุณทั้งหมด หากคุณต้องการทราบโดยเฉพาะว่าเป็นไฟล์หรือไม่ให้ใช้is_file()
. file_exists()
มิฉะนั้นการใช้งาน
is_file()
เป็นวิธีที่เร็วที่สุด แต่การเปรียบเทียบล่าสุดแสดงให้เห็นว่าfile_exists()
เร็วกว่าเล็กน้อยสำหรับฉัน ดังนั้นฉันเดาว่ามันขึ้นอยู่กับเซิร์ฟเวอร์
เกณฑ์มาตรฐานการทดสอบของฉัน:
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";
}
แก้ไข: @Tivie ขอบคุณสำหรับความคิดเห็น เปลี่ยนจำนวนรอบจาก 1,000 เป็น 10,000 ผลลัพธ์คือ:
เมื่อไฟล์มีอยู่ :
is_file x 10000 1.5651218891144 วินาที
file_exists x 10000 1.5016479492188 วินาที
is_readable x 10000 3.7882499694824 วินาที
เมื่อไม่มีไฟล์:
is_file x 10000 0.23920488357544 วินาที
file_exists x 10000 0.22103786468506 วินาที
is_readable x 10000 0.21929788589478 วินาที
แก้ไข: ย้าย clearstatcache (); ภายในวง ขอบคุณ CJ Dennis
is_file()
file_exists()
หากคุณรู้ว่าเป็นไฟล์ (ไม่ใช่ไดเร็กทอรี) ให้ใช้แทน
is_dir()
ปรากฎว่าเร็วกว่า 20% file_exists()
(ซึ่งมันไม่ได้ btw) นั่นอาจเป็นความแตกต่างที่สำคัญหากคุณกำลังตรวจสอบ dirs อยู่แล้ว ...
ทั้ง
is_file () สามารถคืนค่า true ถ้าไม่มีไฟล์
file_exists () สามารถคืนค่า true หากไฟล์เป็นไดเร็กทอรี
ดังนั้นหากจำเป็นต้องเป็นไฟล์และจำเป็นต้องมีอยู่คุณต้องมีทั้งสองอย่าง
ความเร็วไม่สำคัญที่นี่เพราะพวกเขาไม่เหมือนกัน ใช้เพียงฟังก์ชันเดียวหากมีเพียงฟังก์ชันเดียวเท่านั้นที่สำคัญและจะเร็วขึ้น
ฉันรู้ว่าโพสต์นี้เก่า แต่ความแตกต่างระหว่างฟังก์ชันนี้ไม่ใช่แค่พฤติกรรมของพวกเขาเท่านั้น หากคุณใช้ is_file () เพื่อตรวจสอบการมีอยู่ของไฟล์ขนาดใหญ่มากกว่า 2 Go คุณจะต้องประหลาดใจ ไม่มีไฟล์ :( แต่ถ้าคุณตรวจสอบด้วย file_exists () ก็ใช้ได้
is_file
\is_file
จะเร็วขึ้นถ้าใช้มันด้วยเครื่องหมายทับขวา: ในกรณีนี้ PHP จะให้การเพิ่มประสิทธิภาพ opcache และfile_exists
ไม่ทำเช่นนั้น