سؤال

أحتاج إلى التحقق مما إذا كان الملف موجودا على محرك الأقراص الصلبة في موقع محدد (مسار $. $ 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 شكرا على التعليق. تغيير عدد الدورات من 1000 إلى 10K. النتيجه هي:

  1. عندما الملف موجود:

    is_file × 10000 1.5651218891144 ثانية

    file_exists x 10000 1.5016479492188 ثانية

    is_readable × 10000 3.7882499694824 ثانية

  2. عندما الملف غير موجود:

    is_file × 10000 0.23920488357544 ثانية

    file_exists × 10000 0.22103786468506 ثانية

    is_readable x 10000 0.21929788589478 ثانية

تحرير: نقل clearstatcache ()؛ داخل الحلقة. شكرا cj دينيس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top