Excel Belgesi Caching eleyin

3 Cevap php

Ben sadece, bazı verileri alır sekme ayrılmış biçimde içine ayıran, bir. Xls dosyası olarak kaydeder ve daha sonra kullanıcı indirmek için bir bağlantı verir bir PHP komut dosyası var.

De çoğu zaman çalışır, ancak bazı insanlar ihraç etti. Xls dosyanın sürümlerini önbelleğe alıyorsanız.

. Ne ​​yapmam gerekiyor düşünüyorum yerine kullanıcıya xls belgeye doğrudan bir bağlantı vererek, onlara böyle bir PHP sayfası şey link vermek:

deliver_excel_doc.php?file=some_excel_file.xls&

sonra deliver_excel_doc.php excel doc veri çeker ama excel doc önbelleğe ve sonra indirilen dosya (veya excel içinde oluşturulur) olacak şekilde xls çıkışları değil yani başlıklarıyla şey yok.

Ben bunu nasıl herhangi bir fikir (bu kavram yaşayabilir?)

3 Cevap

Sadece Excel dosyası alma bağlantı, örneğin bir zaman damgası eklemek

printf('<a href="file.xls?%d">Excel File</a>', time());

Damgası her zaman farklı olduğundan, onların tarayıcı dosyayı önbelleğe olmaz.

Eğer yazdığım gibi sürümünün adresler olabilir, ama Bunu yapmak yerine, uygun başlıkları gönderin:

<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>

Istemcilerin PHP çıkışını önbelleklediğiniz, o zaman düşünce çok daha büyük bir sorun var!

erenon aşımına uğramış bir önbelleğini tarihini ile o kadar hizmet varsa, ancak o zaman (onun MSIE üzerinden erişilebilir ise) Excel genellikle belgeyi açmak için başarısız göreceksiniz doğru önbelleğe alma instructions ayarlama hakkında kısmen doğru. Daha iyi bir çözüm gelecekte sadece bir kaç saniye, bir zaman aşımı süresini ayarlamak, ve bunu önbelleğe değil vekiller sormaktır:

if ($_SERVER['SERVER_PROTOCOL']=='HTTP/1.0') {
    header("Expires: " . date('r', time()+3));
} else {
    header("Cache-Control: max-age=3, private, must-revalidate");
}

Beklendiği gibi bu davranmaya için HTTP/1.1, Expires başlığını destek olurken, istemci saat sunucu saati ile senkronize olmalıdır.

(Eğer dilimini yoksa) (bu tarihi not uyarıları atar)

C.