PHP में is_file या file_exists है


117

मुझे यह जांचने की आवश्यकता है कि क्या एक निर्दिष्ट स्थान ($ पथ। $ file_name) पर HDD पर एक फ़ाइल है।

जो अंतर है is_file()file_exists()PHP में उपयोग करने के लिए और कार्य के बेहतर / तेज है?

जवाबों:


167

is_file()falseयदि दिए गए पथ एक निर्देशिका में इंगित करता है, तो वापस आ जाएगा । यदि दिया गया पथ एक मान्य फ़ाइल या निर्देशिका को इंगित करता है, तो file_exists()वापस आ जाएगा । तो यह पूरी तरह से आपकी जरूरतों पर निर्भर करेगा। यदि आप विशेष रूप से जानना चाहते हैं कि यह फ़ाइल है या नहीं, तो उपयोग करें । अन्यथा, उपयोग करें ।trueis_file()file_exists()


1
जहाँ तक मुझे पता है, if_file केवल प्रतीकात्मक लिंक के लिए ही नहीं, केवल निर्देशिका के लिए भी विफल है।
स्टिफ्स

is_file () सही है अगर फ़ाइल निर्देशिका में मौजूद है या गलत है यदि फ़ाइल मौजूद नहीं है जैसा कि मैं 2020 में
जांचता हूं तो

37

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 x 10000 1.5651218891144 सेकंड

    file_exists x 10000 1.5016479492188 सेकंड

    is_readable x 10000 3.7882499694824 सेकंड

  2. जब फ़ाइल मौजूद नहीं है :

    is_file x 10000 0.23920488357544 सेकंड

    file_exists x 10000 0.22103786468506 सेकंड

    is_readable x 10000 0.21929788589478 सेकंड

संपादित करें: स्थानांतरित किया गया क्लीयरस्टैचे (); लूप के अंदर। धन्यवाद सीजे डेनिस


7
काम करने के लिए इस बेंचमार्क के लिए, आपको क्लीयरस्टैचेश () जोड़ना चाहिए; चूंकि is_file और file_exists के परिणाम पूरे स्क्रिप्ट में कैश्ड हैं। वैसे भी file_exists () थोड़ा धीमा है, लेकिन जब तक आप लगभग 100K फाइल चेक नहीं करते हैं, तब तक कोई फर्क नहीं पड़ता। php.net/manual/en/function.clearstatcache.php
Tivie

1
मैंने भी is_file()तेजी से पाया हैfile_exists() । यदि आप जानते हैं कि यह एक फ़ाइल (और निर्देशिका नहीं) है, तो निश्चित रूप से इसके बजाय इसका उपयोग करें।
जोनाथन

1
अजीब, अब ऐसा लगता है कि 'file_exists' 'is_file' की तुलना में तेज़ है।
वियनाम्ज़

7
जिन लोगों में दिलचस्पी है, वे तेज़ क्यों हैं, क्योंकि इन दोनों कार्यों में अलग-अलग व्यवहार होते हैं (जैसा कि स्वीकृत उत्तर में उल्लेख किया गया है, एक परीक्षण यदि यह एक फ़ाइल या एक सिमिलिंक है जो एक फ़ाइल को इंगित करता है, लेकिन एक निर्देशिका नहीं है और एक सिमलिंक नहीं है जो एक निर्देशिका को इंगित करता है) और अन्य परीक्षण यदि यह एक फ़ाइल है (जो एक निर्देशिका भी हो सकती है)।
ब्रैंडिन

2
@ ब्रैंडिन लोग रुचि रखते हैं क्योंकि कई स्थितियों में आप पहले से ही जानते हैं कि क्या आप किसी फ़ाइल या निर्देशिका के लिए जाँच कर रहे हैं, तो क्या यह मौजूद है केवल महत्वपूर्ण चीज है। तो अगर is_dir()यह 20% से अधिक तेज़ी से निकलता है file_exists()(जो यह नहीं है, btw), कि अगर आप केवल dirs के लिए जाँच कर रहे हैं तो एक महत्वपूर्ण अंतर हो सकता है ...
Byson

2

न तो।

अगर फ़ाइल मौजूद नहीं है तो is_file () सही वापस आ सकता है।

अगर फ़ाइल निर्देशिका है तो file_exists () सही वापस आ सकती है।

तो अगर यह एक फ़ाइल होने की जरूरत है और यह मौजूद है तो आप दोनों की जरूरत है।

गति यहाँ कोई फर्क नहीं पड़ता क्योंकि वे समान नहीं हैं। केवल एक का उपयोग करें यदि केवल एक फ़ंक्शन मायने रखता है और यह तेज होगा।


1

मुझे पता है कि यह पद पुराना है लेकिन इस कार्य के बीच का अंतर केवल उनके व्यवहार का नहीं है। यदि आप बड़ी फ़ाइल के अस्तित्व की जांच करने के लिए is_file () का उपयोग करते हैं, तो 2 से अधिक जाएं। आप हैरान हो जाएंगे। फाइल मौजूद नहीं है। :( लेकिन अगर आप file_exists () के साथ जांचते हैं, तो यह काम करता है।


0

is_fileबैकस्लैश के साथ इसका उपयोग करने पर तेज होगा \is_file:। इस मामले में PHP opcache अनुकूलन प्रदान file_existsकरेगा और न ही।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.