Soru Php sitesi için tarayıcı önbelleği nasıl önlenir


Bulut sunucusunda çalışan bir php sitem var. Ne zaman yeni dosyalar eklediğimde css, js veya görüntü tarayıcıları aynı eski js, css ve önbellekte saklanan imaj dosyaları yüklüyor.

Sitemde aşağıdaki gibi bir doctype ve meta etiketi var

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

Yukarıdaki doctype ve meta kodu nedeniyle aynı dosyaları yeni bir tarayıcı yerine önbelleğe yüklüyor


76
2017-11-30 06:26


Menşei


No Cache in all Browsers. Önbelleğe alınmak istemediğiniz dosyalarda “randomGeneratedNumber” da yapabilirsiniz. - Kodemon
Muhtemelen resimler / js / css için önbelleği tamamen devre dışı bırakmak istemezsiniz: stackoverflow.com/questions/4206224/... - FoolishSeth


Cevaplar:


bunu dene

<?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



Cevap için teşekkürler - ArrayOutOfBound
"Max-age = 0" hariç, bunlar benim kurulumumda yukarıdakileri belirtmeden PHP tarafından gönderilen başlıklardır. PHP varsayılan olarak tarayıcı önbelleğe almayı engellemeye çalışır. - fast-reflexes
Benden birçok kişiyi kurtardın, teşekkürler! - Wallysson Nunes
Internet Explorer'ın eski sürümlerine alternatif bir tema gönderen bir WordPress eklentim var ve bazı önbelleğe alma sistemlerinde kötü bir şekilde tetikleniyordu. Bu yayın ilk Google aramamda geldi. Güzel oynadı. - Imperative
Not: kullanırsanız session_start() daha sonra, başlığınızın üzerine yazılır. Cache-Control: private, max-age=10800, pre-check=10800 çünkü 180 dakika varsayılan değerdir session.cache_expire. Oturumu başlatmaktan kaçınamazsanız, ancak önbellek kullanımını devre dışı bırakmanız gerekir. session_cache_limiter('private');session_cache_expire(0);. - mgutt


Burada, HTML aracılığıyla kontrol etmek istiyorsanız: aşağıdaki gibi Seçenek 1:

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

Ve eğer PHP ile kontrol etmek istiyorsanız: aşağıdaki gibi yapın Seçenek 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');

VE seçenek 2 Proxy tabanlı önbelleğe alma sorununu önlemek için HER ZAMAN DAHA İYİ IS.


22
2018-02-06 17:17





Bunu deneyebilirsiniz:

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

Umarım eğer varsa Önbelleği önlemeye yardımcı olur!


6
2018-01-27 10:56



Bu sadece HTML dosyalarının önbelleğe alınmasıyla ilgilidir. Ve eTag ile ilgisi yok mu? Teşekkürler! - Sam Levin
sadece ilk satır mükemmel bir şekilde yeterli olmalıdır. 5. satır aslında düz yanlıştır ve sunucu yanıtında yapılacak bir şey yoktur (istek başlığıdır). altıncı sıra, ne olursa olsun hiçbir etkisi olmayacaktır. devam edebilirdim ... - The Surrican
Lütfen - heyecan verici - pee2pee


Css dosyalarımı önbelleğe alma ile ilgili sorun yaşadım. PHP'deki üstbilgileri ayarlama bana yardımcı olmadı (belki de üstbilgileri sayfaya bağlanan sayfa yerine stil sayfası dosyasında ayarlanması gerekir).

Bu sayfada çözümü buldum: https://css-tricks.com/can-we-prevent-css-caching/

Çözüm:

Bağlı dosya için URI'nin sorgu kısmı olarak zaman damgasını ekleyin.
(Css, js, resimler vb. İçin kullanılabilir)

Geliştirme için:

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

Üretim için (önbelleğe alma çoğunlukla iyi bir şeydir):

<link rel="stylesheet" type="text/css" href="style.css?version=3.2">
(ve gerektiğinde elle yeniden yazmak)

Ya da bu ikisinin kombinasyonu:

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

DÜZENLE:

Ya da bu ikisinin güzel kombinasyonu:

<?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





Tarayıcı önbelleğinin, duruma bağlı olarak iyi bir fikir olmadığını önleyin. Bir çözüm aradığımda bunun gibi çözümler buldum:

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

Sorun şu ki, sunucudaki bir güncelleme sırasında dosyanın üzerine yazılırsa, bu benim senaryodadır, önbellek göz ardı edilir çünkü zaman damgası dosyanın içeriği aynı olsa bile değiştirilir.

Tarayıcıyı yalnızca içeriği değiştirilirse indirmeye zorlamak için bu çözümü kullanırım:

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

0
2018-06-21 19:01