2011-01-31 20 views
25

मैं अपने टेम्पलेट में कस्टम.css फ़ाइल भी शामिल कर रहा हूं ताकि साइट मालिकों को अपना स्वयं का सीएसएस नियम जोड़ सकें। हालांकि, जब मैं फ़ाइल भेजता हूं, तो यह खाली होता है और इसमें कोई अर्थ नहीं होता है अगर उन्होंने इसमें कोई नियम नहीं जोड़ा है।यह निर्धारित करने का सबसे अच्छा तरीका है कि कोई फ़ाइल खाली है (PHP)?

यह निर्धारित करने का सबसे अच्छा तरीका क्या है कि यह खाली है या नहीं?

if (0 == filesize($file_path)) 
{ 
    // file is empty 
} 

// OR: 

if ('' == file_get_contents($file_path)) 
{ 
    // file is empty 
} 

उत्तर

41

file_get_contents() जबकि filesize()stat() का उपयोग करता है फ़ाइल आकार detirmine को पूरी फ़ाइल पढ़ा जाएगा। filesize() का उपयोग करें, इसे कम डिस्क I/O का उपभोग करना चाहिए।

+6

... और बहुत कम स्मृति – symcbean

+1

बस चाहता हूँ की खपत का कहना है कि फ़ाइल कॉल clearstatcache बदल रहा है, तो() से पहले फाइलसाइजिंग() को कॉल करना या आपको कैश किए गए परिणाम मिलेंगे। यह मेरे साथ हुआ। – Firze

+0

यह मेरे लिए काम किया। फ़ाइल खाली होने पर यह 0 लौटाती है। –

8

filesize() का उपयोग स्पष्ट रूप से बेहतर है। यह stat() का उपयोग करता है जिसे फ़ाइल को खोलने की ज़रूरत नहीं है।

file_get_contents() पूरी फ़ाइल पढ़ता है .. कल्पना करें कि क्या होता है यदि आपके पास 10 जीबी फ़ाइल है।

+4

कल्पना करें कि आपकी वेबसाइट 10 जीबी सीएसएस फ़ाइल के साथ कितनी देर तक लोड करेगी: पी – alex

+1

मुझे लगता है कि, आगे विचार करने के बाद, परीक्षण की परेशानी पर जाने से शायद खाली सीएसएस लोड करने में शायद कम नुकसान होता है अगर इसे लोड करने से बचने के लिए खाली होता है। –

+0

छोटी फ़ाइलों के लिए (सीएसएस भाग नहीं पढ़ा है) यह वास्तव में कोई फर्क नहीं पड़ता। फाइलसाइज() अभी भी तेज़ और बेहतर है हालांकि - अगर आप इनोड (या यहां तक ​​कि फाइल सिस्टम के कैश या PHP की आंतरिक स्टेट-कैश) की आवश्यकता वाले सभी सूचनाओं में हार्डडिस्क से फ़ाइल की सामग्री को वास्तव में क्यों पढ़ना चाहते हैं। – ThiefMaster

4

filesize() अधिक कुशल होगा, हालांकि, यह भ्रामक हो सकता है। अगर किसी को वहां सिर्फ टिप्पणियां होंगी या यहां तक ​​कि सिर्फ सफेद जगह भी होगी ... यह फाइलसाइज को बड़ा कर देगा। आईएमओ आपको फ़ाइल में कुछ विशिष्ट दिखने चाहिए, जैसे कि पहली पंक्ति पर /* enabled=true */ और फिर पहली पंक्ति को पढ़ने के लिए फॉपेन/फ्रेड का उपयोग करें। यदि यह वहां नहीं है, तो इसे लोड न करें।

+0

कुछ भी बुरा नहीं, हालांकि, झूठे परिणाम में।यह चेक –

+1

सच नहीं है ... लेकिन यह खाली होने पर फ़ाइल को लोड करने का एक बड़ा सौदा नहीं है। बस कहना है ... अगर आप रिक्त फाइल लोड करने की तरह निकल और डाइम कर रहे हैं, तो आप इसे "महत्वपूर्ण" के रूप में भी गिन सकते हैं –

1

जैसा कि अन्य उत्तरों में बताया गया है, filesize स्थानीय फ़ाइलों के लिए पर जाने का तरीका है। दूसरी तरफ कई स्ट्रीम रैपर, HTTP सहित, में stat() समर्थन है, इस प्रकार filesize विफल हो जाएगा, जबकि file_get_contents काम करेगा।

4

filesize का उपयोग करते समय सभी सावधान रहें, क्योंकि इसके परिणाम बेहतर प्रदर्शन के लिए कैश किए जाते हैं। तो अगर आप बेहतर परिशुद्धता की जरूरत है, यह की तरह कुछ का उपयोग करने के लिए सिफारिश की है:

<? 
clearstatcache(); 
if(filesize($path_to_your_file)) { 
    // your file is not empty 
} 

More info here

+1

यह काम नहीं करेगा क्योंकि मैनुअल स्पष्ट रूप से बताता है कि 'फाइलसाइज' पैरामीटर होना चाहिए एक स्ट्रिंग। 'फॉपेन' एक संसाधन देता है। – Nicero

+0

@Nicero, धन्यवाद, आप सही हैं। मैंने कोड संपादित किया है। – userlond

संबंधित मुद्दे

 संबंधित मुद्दे