सवाल Php साइट के लिए ब्राउज़र कैश को कैसे रोकें


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

मेरी साइट के नीचे एक डॉक्टरेट और मेटा टैग है

<!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)">

उपरोक्त डॉक्टरेट और मेटा कोड की वजह से मैं एक ही फाइल को नए ब्राउज़र की बजाय ब्राउज़र में कैश कर रहा हूं


76
2017-11-30 06:26


मूल


No Cache in all Browsers। आप उन फ़ाइलों पर random.eneratedNumber भी कर सकते हैं जिन्हें आप कैश नहीं करना चाहते हैं। - Kodemon
आप छवियों / जेएस / सीएसएस के लिए पूरी तरह से कैश को अक्षम नहीं करना चाहते हैं: stackoverflow.com/questions/4206224/... - FoolishSeth


जवाब:


इसे इस्तेमाल करे

<?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");
?>

185
2017-11-30 06:33



उत्तर के लिए धन्यवाद - ArrayOutOfBound
"अधिकतम आयु = 0" के अलावा, वे मेरे इंस्टॉलेशन में उपरोक्त निर्दिष्ट किए बिना PHP द्वारा भेजे गए शीर्षलेख हैं .. ऐसा लगता है कि PHP डिफ़ॉल्ट रूप से ब्राउज़र कैशिंग को रोकने की कोशिश करता है ... - fast-reflexes
आपने हमारे कई लोगों को बचा लिया है, धन्यवाद! - Wallysson Nunes
मेरे पास एक वर्डप्रेस प्लगइन है जो इंटरनेट एक्सप्लोरर के पुराने संस्करणों के लिए एक वैकल्पिक विषय भेजता है और यह कुछ कैशिंग सिस्टम पर बुरी तरह से फिसल रहा था। यह पोस्ट मेरी पहली Google खोज पर आया था। बहुत बढ़िया। - Imperative
नोट: यदि आप उपयोग करते हैं session_start() इसके बाद, यह आपके हेडर को ओवरराइट कर देगा Cache-Control: private, max-age=10800, pre-check=10800 क्योंकि 180 मिनट का डिफ़ॉल्ट मान है session.cache_expire। यदि आप सत्र शुरू करने से नहीं बच सकते हैं, लेकिन आपको कैश उपयोग को अक्षम करने की आवश्यकता है session_cache_limiter('private');session_cache_expire(0);। - mgutt


यहां, यदि आप इसे 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 प्रॉक्सी आधारित कैशिंग समस्या से बचने के लिए हमेशा बेहतर है।


22
2018-02-06 17:17





आप इसे आजमा सकते हैं:

    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");

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


6
2018-01-27 10:56



यह केवल HTML फ़ाइलों के कैशिंग से संबंधित है? और ईटाग के साथ कुछ लेना देना नहीं है? धन्यवाद! - Sam Levin
बस पहली पंक्ति पूरी तरह से पर्याप्त होना चाहिए। 5 वीं रेखा वास्तव में सादा गलत है और सर्वर प्रतिक्रिया में कुछ भी नहीं है (यह एक अनुरोध हेडर है)। छठी रेखा का कोई प्रभाव नहीं होगा। मैं जा सकता था ... - The Surrican
कृपया करें - रोमांचक - pee2pee


मुझे मेरी सीएसएस फाइलों को कैशिंग करने में समस्या थी। 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(); ?>">

3
2017-10-12 13:11





केस कैश को रोकें मामले के आधार पर एक अच्छा विचार नहीं है। एक समाधान की तलाश में मुझे इस तरह के समाधान मिले:

<link rel="stylesheet" type="text/css" href="meu.css?v=<?=filemtime($file);?>">

यहां समस्या यह है कि यदि सर्वर पर अद्यतन के दौरान फ़ाइल ओवरराइट की जाती है, जो मेरा परिदृश्य है, तो कैश को अनदेखा कर दिया जाता है क्योंकि टाइमस्टैम्प को संशोधित किया जाता है, यहां तक ​​कि फ़ाइल की सामग्री भी वही होती है।

मैं इस समाधान का उपयोग केवल ब्राउज़र को संपत्तियों को डाउनलोड करने के लिए मजबूर करने के लिए करता हूं यदि इसकी सामग्री संशोधित होती है:

<link rel="stylesheet" type="text/css" href="meu.css?v=<?=hash_file('md5', $file);?>">

0
2018-06-21 19:01