एक स्थानीय कैश फ़ाइल का उपयोग करें, और बस की जाँच फ़ाइल का उपयोग करने से पहले फ़ाइल पर अस्तित्व और संशोधन समय। उदाहरण के लिए, यदि $cache_file
एक स्थानीय कैश फ़ाइल नाम है:
if (file_exists($cache_file) && (filemtime($cache_file) > (time() - 60 * 5))) {
// Cache file is less than five minutes old.
// Don't bother refreshing, just use the file as-is.
$file = file_get_contents($cache_file);
} else {
// Our cache is out-of-date, so load the data from our remote server,
// and also save it over our cache for next time.
$file = file_get_contents($url);
file_put_contents($cache_file, $file, LOCK_EX);
}
(। untested है, लेकिन कोड मैं इस समय का उपयोग के आधार पर)
इस कोड के माध्यम से
किसी भी तरह से, $ फ़ाइल को डेटा के रूप में समाप्त होता है आप आवश्यकता है, और यह या तो ताजा होने पर कैश का उपयोग करेगा, या दूरस्थ सर्वर से डेटा ले जाएगा और यदि नहीं तो कैश रीफ्रेश करें।
संपादित करें: मैं उपरोक्त लिखने के बाद से फ़ाइल लॉकिंग के बारे में थोड़ा और समझता हूं। यदि आप यहां लॉकिंग फ़ाइल के बारे में चिंतित हैं तो this answer के पढ़ने के लायक हो सकता है।
आप ताला और समवर्ती पहुँच के बारे में चिंतित हैं, तो मैं कहेंगे साफ समाधान एक अस्थायी फाइल करने के लिए file_put_contents होगा, तो rename()
यह $cache_file
से अधिक है, जो एक परमाणु आपरेशन होना चाहिए, यानी $cache_file
होगा या तो पुरानी सामग्री या पूर्ण नई सामग्री हो, कभी भी आधा रास्ते लिखा नहीं है।
स्रोत
2011-03-10 16:53:13
कोड मैट के लिए धन्यवाद! यह बहुत साफ है, अच्छी तरह से टिप्पणी की है और बिना किसी संशोधन के काम करता है! – zsero
@ ज़ेसरो कूल। लेकिन वहां कुछ त्रुटि जांचें :) यदि आप वेब सर्वर उपयोगकर्ता द्वारा कैश निर्देशिका लिखने योग्य नहीं हैं, तो आप समस्याओं में भाग सकते हैं, उदाहरण के लिए ... –
हाँ इसे कुछ त्रुटि जांच की आवश्यकता हो सकती है लेकिन इसकी ऐसी छोटी परियोजना है इस कोड का उपयोग या तैनाती कोई और नहीं होगा। और यदि यह टूट गया है तो दूसरा हिस्सा वास्तव में ब्रेक करने की बजाए कैश-कम मोड में जाता है। अच्छा लगा। – zsero