2009-10-10 9 views
11

मैं php में एक वेब पेज कैश कैसे करूं ताकि यदि कोई पृष्ठ अपडेट नहीं किया गया है तो दर्शक को कैश की गई प्रति प्राप्त करनी चाहिए?मैं PHP में एक वेब पेज कैश कैसे करूं?

आपकी मदद के लिए धन्यवाद। पीएस: मैं php में शुरुआत कर रहा हूँ।

+0

क्या आप ज़ेंड फ्रेमवर्क जैसे किसी भी ढांचे का उपयोग कर रहे हैं? हमें और विवरण दें! – Thomaschaaf

+1

मैं किसी भी ढांचे का उपयोग नहीं कर रहा हूं। – user187580

+0

आप इसे ढांचे में ले जाने पर विचार करना चाहेंगे। http://code.google.com/p/samstyle-php-framework - पूर्ण रूप से विकसित फ्रेमवर्क जिसमें फ़ाइल कैशिंग शामिल है और memcache – mauris

उत्तर

13

आप स्क्रिप्ट को समाप्त करने से पहले पृष्ठ के आउटपुट को वास्तव में सहेज सकते हैं, फिर स्क्रिप्ट की शुरुआत में कैश लोड करें।

उदाहरण कोड:

cachestart.php में

:

cacheend.php में
<?php 
$cachefile = 'cache/'.basename($_SERVER['PHP_SELF']).'.cache'; // e.g. cache/index.php.cache 
$cachetime = 3600; // time to cache in seconds 

if(file_exists($cachefile) && time()-$cachetime <= filemtime($cachefile)){ 
    $c = @file_get_contents($cf); 
    echo $c; 
    exit; 
}else{ 
    unlink($cachefile); 
} 

ob_start(); 
?> 

:

<?php 

$c = ob_get_contents(); 
file_put_contents($cachefile); 

?> 

<?php 

$cachefile = 'cache/'.basename($_SERVER['PHP_SELF']).'.cache'; // e.g. cache/index.php.cache 
$cachetime = 3600; // time to cache in seconds 

if(file_exists($cachefile) && time()-$cachetime <= filemtime($cachefile)){ 
    $c = @file_get_contents($cf); 
    echo $c; 
    exit; 
}else{ 
    unlink($cachefile); 
} 

ob_start(); 

// all the coding goes here 

$c = ob_get_contents(); 
file_put_contents($cachefile); 

?> 

आप इस कैशिंग आप यह कर सकते हैं की आवश्यकता होगी, पृष्ठों की एक बहुत कुछ है, तो

फिर बस अपनी स्क्रिप्ट की शुरुआत में

include('cachestart.php'); 

जोड़ें। और अपनी स्क्रिप्ट के अंत में

include('cacheend.php'); 

जोड़ें। कैश नामक फ़ोल्डर रखना याद रखें और PHP को इसे एक्सेस करने दें।

यह भी याद रखें कि यदि आप एक पूर्ण पृष्ठ कैश कर रहे हैं, तो आपके पृष्ठ में सत्र विशिष्ट प्रदर्शन नहीं होना चाहिए (उदा। सदस्यों के बार या क्या प्रदर्शित करें) क्योंकि उन्हें भी कैश किया जाएगा। विशिष्ट-कैशिंग (पृष्ठ का चर या भाग) के लिए एक ढांचे को देखें।

+0

का समर्थन करता है, जहां मैं यह कोड कहूं? index.php? – user187580

+0

उस हिस्से को देखा जहां मैंने लिखा था // // सभी कोडिंग यहां जाती है '? आप अपना मुख्य कोड वहां डाल सकते हैं। – mauris

+0

आह मैं देखता हूं। मैं इसका परीक्षण करूंगा और जांच करूंगा। धन्यवाद। – user187580

0

memcached का उपयोग करें। उस साइट पर इसे कैसे करना है इसका एक स्पष्टीकरण है।

0

Squid का उपयोग करें या ब्राउज़र कैशिंग करने के लिए HTTP शीर्षलेख सही ढंग से अद्यतन करें। मुझे प्रश्न के आधार पर कैशिंग के अपने संस्करण को स्पिन करने की आवश्यकता नहीं दिख रही है।

4

इसके अतिरिक्त ट्रैकिंग जवाब देने के लिए मैं इस का कहना चाहते हैं:

जब आप कैशिंग का उपयोग सावधान रहना होगा। जब आपके पास गतिशील डेटा होता है (जो तब होता है जब आप स्थैतिक एचटीएमएल के बजाय php का उपयोग करते हैं) तो संबंधित डेटा में परिवर्तन होने पर आपको कैश को अमान्य करना होगा।

यह आपके गतिशील डेटा के आधार पर, यह बहुत आसान या बेहद मुश्किल हो सकता है।

अद्यतन

कैसे आप कैश को अमान्य कैशिंग के ठोस प्रकार पर निर्भर करता है। आपको पता होना चाहिए कि कौन सी कैश फाइलें किस पृष्ठ से संबंधित हैं (और शायद उपयोगकर्ता इनपुट के साथ)। जब डेटा बदलता है तो आपको कैश की गई फ़ाइल को हटा देना चाहिए या अपने कैश डेटा संरचना से पृष्ठ आउटपुट को हटा देना चाहिए।

मैं आपको इस बारे में और अधिक विस्तृत जानकारी नहीं दे सकता कि आप कैशिंग के लिए किस कार्यान्वयन का उपयोग करते हैं।

अन्य लोगों को उदाहरण के लिए पियर पैकेज या memcached के लिए सुझाव दिया। जब डेटा बदलता है तो इसमें पूरे कैश या इसके कुछ हिस्सों को अमान्य करने के लिए आवश्यक कार्य होते हैं।

+0

कृपया कैश को अमान्य करने पर कुछ और विचार फेंक दें .. धन्यवाद। – user187580

+0

@ पैट्रिक, दरअसल, कैशिंग को हार्ड डिस्क तक पहुंच की आवश्यकता होती है। क्या यह धीमा नहीं होगा? – Pacerier

+0

खैर, आमतौर पर ओएस में इसका स्वयं का फ़ाइल कैश होता है, इसलिए यदि आप फ़ाइलों का उपयोग करते हैं, तो भी इसे स्मृति से परोसा जा सकता है। लेकिन यह भी नहीं है, डिस्क से कैश किए गए परिणाम को पढ़ने और पेज को फिर से समझने से इसे वापस करने के लिए अधिकतर समय लगता है। यदि इसकी गणना करना तेज़ है, तो कैश न करें। –

0

नाशपाती एक कैशिंग पैकेज (वास्तव में दो) है:

http://pear.php.net/package/Cache और
के लिए http://pear.php.net/package/Cache_Lite छोटे क्षुधा

मैं एक बार क्वेरी कैशिंग के लिए और उस समय यह किया पर कैश पैकेज (पहले एक) का इस्तेमाल किया है अपने जहां तक ​​मुझे याद है काम करते हैं।

3
$c = ob_get_contents(); 
file_put_contents($cachefile); 

सही

$c = ob_get_contents(); 
file_put_contents($cachefile,$c); 

अन्यथा स्क्रिप्ट काम नहीं करेगा है।

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