2013-08-07 8 views
5

मेरे पास एक ऐसा फ़ंक्शन है जो डीबी से सामग्री के साथ एक तालिका उत्पन्न करता है। कुछ कक्षों में कस्टम HTML है जो मैं templating सिस्टम के माध्यम से file_get_contents के साथ पढ़ रहा हूं।क्या file_get_contents कैश का उपयोग करते हैं?

छोटी सामग्री समान है लेकिन यह क्रिया 15 बार हो सकती है (मेरे पास प्रति पृष्ठ 15 तालिका पंक्तियों की सीमा है)। तो फ़ाइल_get_contents कैश करता है अगर यह देखता है कि सामग्री एक जैसी है?

+7

संक्षिप्त उत्तर: संख्या – deceze

+0

file_get_contents मूल रूप से केवल फॉपेन, फ़्रेड, फ्लेक्ज़ इत्यादि के लिए एक शॉर्टकट है - इसलिए मुझे लगता है कि एक फ़ाइल पॉइंटर खोलना और इसे फ्रेड करना कैश नहीं है। – Jimbo

+0

क्या PHP में एक फ़ाइल रीडिंग फ़ंक्शन है जहां मैं '$ cache = true' चुन सकता हूं? – silkfire

उत्तर

4

file_get_contents() में कैशिंग तंत्र नहीं है। हालांकि, आप अपने स्वयं के कैशिंग तंत्र लिख सकते हैं।

$cache_file = 'content.cache'; 
if(file_exists($cache_file)) { 
    if(time() - filemtime($cache_file) > 86400) { 
    // too old , re-fetch 
    $cache = file_get_contents('YOUR FILE SOURCE'); 
    file_put_contents($cache_file, $cache); 
    } else { 
    // cache is still fresh 
    } 
} else { 
    // no cache, create one 
    $cache = file_get_contents('YOUR FILE SOURCE'); 
    file_put_contents($cache_file, $cache); 
} 

अद्यतन पिछले if मामले गलत, अब वर्तमान समय में तुलना करके सुधारा जाता है:

यहाँ एक मसौदा है। धन्यवाद @ अराकेन।

+2

PHP में एपीसी नामक कैशिंग का मूल समर्थन है - http://php.net/manual/en/book.apc.php –

+7

तो ... आप फ़ाइल में किसी फ़ाइल की सामग्री को कैश कर रहे हैं ...? ?! – deceze

+1

यह वास्तव में इसे धीमा कर देगा। – Gerry

2

@deceze की तरह कहते हैं, आम तौर पर उत्तर नहीं है। हालांकि ऑपरेटिंग सिस्टम लेवल कैश हाल ही में उपयोग की जाने वाली फ़ाइलों को त्वरित पहुंच के लिए कैश कर सकते हैं, लेकिन मैं उन लोगों पर भरोसा नहीं करता हूं जो उपलब्ध हैं। यदि आप प्रति फ़ाइल कई बार पढ़ने वाली फ़ाइल को कैश करना चाहते हैं, तो एक रैपर फ़ंक्शन के अंदर कैश के रूप में कार्य करने के लिए स्थिर चर का उपयोग करने पर विचार करें।

function my_file_read($filename) { 
    static $file_contents = array(); 
    if (!isset($file_contents[$filename])) { 
    $file_contents[$filename] = file_get_contents($filename); 
    } 
    return $file_contents[$filename]; 
} 

कॉलिंग my_file_read ($ फ़ाइल का नाम) कई बार केवल एक ही समय डिस्क से फ़ाइल पढ़ा जाएगा, बाद में कॉल समारोह के भीतर स्थिर चर से मूल्य पढ़ा जाएगा। ध्यान दें कि आपको इस पृष्ठ पर बड़ी फ़ाइलों या प्रति पृष्ठ केवल एक बार उपयोग करने के लिए इस दृष्टिकोण पर भरोसा नहीं करना चाहिए, क्योंकि स्थैतिक चर द्वारा उपयोग की गई स्मृति अनुरोध के अंत तक जारी रहेगी। स्थैतिक चर में अनावश्यक रूप से फ़ाइलों की सामग्री को रखना आपकी स्क्रिप्ट को मेमोरी हॉग बनाने का एक अच्छा तरीका है।

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