2012-11-30 20 views
68

के लिए ब्राउज़र कैश को कैसे रोकें मेरे पास क्लाउड सर्वर में एक php साइट चल रही है। जब भी मैं नई फाइलें सीएसएस, जेएस या छवियों को जोड़ता हूं तो ब्राउज़र कैश में संग्रहीत वही पुरानी जेएस, सीएसएस और छवि फ़ाइलों को लोड कर रहा है।php साइट

मेरी साइट एक doctype और नीचे के रूप में

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
    <meta http-equiv="Page-Enter" content="blendTrans(Duration=1.0)"> 
    <meta http-equiv="Page-Exit" content="blendTrans(Duration=1.0)"> 
    <meta http-equiv="Site-Enter" content="blendTrans(Duration=1.0)"> 
    <meta http-equiv="Site-Exit" content="blendTrans(Duration=1.0)"> 
ऊपर doctype और मेटा कोड की वजह से

मैं नया एक

+0

[ 'सभी Browsers' में कोई कैश] (http: // stackoverflow।com/प्रश्न/1341089/का उपयोग कर-मेटा टैगों करने वाली मोड़-कैशिंग में सभी ब्राउज़रों)। आप उन फ़ाइलों पर random.eneratedNumber भी कर सकते हैं जिन्हें आप कैश नहीं करना चाहते हैं। – Kodemon

+0

शायद आप छवियों/जेएस/सीएसएस के लिए पूरी तरह से कैश को अक्षम नहीं करना चाहते हैं: http://stackoverflow.com/questions/4206224/better-way-to-prevent-browser-caching-of-javascript-files – FoolishSeth

उत्तर

169

के बजाय ब्राउज़र में कैश ही फ़ाइलें लोड हो रहा इस

कोशिश मेटा टैग मौजूद
<?php 

header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 
?> 
+2

के लिए धन्यवाद उत्तर – ArrayOutOfBound

+5

"अधिकतम आयु = 0" के अलावा, वे मेरे इंस्टॉलेशन में उपरोक्त निर्दिष्ट किए बिना PHP द्वारा भेजे गए शीर्षलेख हैं .. ऐसा लगता है कि PHP डिफ़ॉल्ट रूप से ब्राउज़र कैशिंग को रोकने की कोशिश करता है ... –

+0

आपने हमारे कई को बचा लिया है मैं, धन्यवाद! –

21

यहाँ, आप HTML के माध्यम से इसे नियंत्रित करना चाहते हैं: कर नीचे की तरह विकल्प 1:

<meta http-equiv="expires" content="Sun, 01 Jan 2014 00:00:00 GMT"/> 
<meta http-equiv="pragma" content="no-cache" /> 

और आप PHP के माध्यम से इसे नियंत्रित करना चाहते हैं: यह विकल्प 2 नीचे की तरह कार्य करें:

header('Expires: Sun, 01 Jan 2014 00:00:00 GMT'); 
header('Cache-Control: no-store, no-cache, must-revalidate'); 
header('Cache-Control: post-check=0, pre-check=0', FALSE); 
header('Pragma: no-cache'); 

और विकल्प 2 आदेश प्रॉक्सी आधारित कैशिंग मुद्दा से बचने के लिए हमेशा बेहतर है।

5

आप इस कोशिश कर सकते हैं:

header("Expires: Tue, 03 Jul 2001 06:00:00 GMT"); 
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
    header("Cache-Control: post-check=0, pre-check=0", false); 
    header("Pragma: no-cache"); 
    header("Connection: close"); 

उम्मीद है कि यह मदद मिलेगी, कैश को रोकने यदि कोई हो!

+0

यह केवल HTML फ़ाइलों के कैशिंग से संबंधित है? और ईटाग के साथ कुछ लेना देना नहीं है? धन्यवाद! –

+1

बस पहली पंक्ति पूरी तरह से पर्याप्त होना चाहिए। 5 वीं रेखा वास्तव में सादा गलत है और सर्वर प्रतिक्रिया में कुछ भी नहीं है (यह एक अनुरोध हेडर है)। छठी रेखा का कोई प्रभाव नहीं होगा। मैं जा सकता था ... –

+0

कृपया करें - रोमांचक – pee2pee

2

मुझे मेरी सीएसएस फ़ाइलों को कैशिंग करने में समस्या थी। PHP में हेडर सेट करने से मेरी मदद नहीं हुई (शायद क्योंकि हेडर्स को पेजिंग के बजाय स्टाइलशीट फ़ाइल में सेट करने की आवश्यकता होगी?)।

मैं इस पृष्ठ पर समाधान नहीं मिला: https://css-tricks.com/can-we-prevent-css-caching/

समाधान: लिंक की गई फ़ाइल का यूआरआई की क्वेरी भाग के रूप में

संलग्न टाइमस्टैम्प।

<link rel="stylesheet" href="style.css?<?php echo date('Y-m-d_H:i:s'); ?>">

उत्पादन के लिए (जहां कैशिंग ज्यादातर एक अच्छी बात है):

<link rel="stylesheet" type="text/css" href="style.css?version=3.2">

विकास के लिए (सीएसएस, जेएस, छवियों आदि के लिए इस्तेमाल किया जा सकता है) (और जब आवश्यक हो तो मैन्युअल रूप से फिर से लिखें)

या इन दोनों का संयोजन:

<?php 
    define("DEBUGGING", true); // or false in production enviroment 
?> 
<!-- ... --> 
<link rel="stylesheet" type="text/css" href="style.css?version=3.2<?php echo (DEBUGGING) ? date('_Y-m-d_H:i:s') : ""; ?>"> 

संपादित करें:

या खूबसूरत उन दोनों का संयोजन:

<?php 
    // Init 
    define("DEBUGGING", true); // or false in production enviroment 
    // Functions 
    function get_cache_prevent_string($always = false) { 
     return (DEBUGGING || $always) ? date('_Y-m-d_H:i:s') : ""; 
    } 
?> 
<!-- ... --> 
<link rel="stylesheet" type="text/css" href="style.css?version=3.2<?php echo get_cache_prevent_string(); ?>">