PHP indirmek için dosya daha sonra yönlendirme oluşturmak

6 Cevap php

Ben başlıklarını kullanarak indirmek zorunda olan bir CSV dosyası oluşturur bir PHP uygulaması var. İşte kodun ilgili bölümü:

header('Content-Type: application/csv'); 
header("Content-length: " . filesize($NewFile)); 
header('Content-Disposition: attachment; filename="' . $FileName . '"'); 
echo $content;
exit();

Ne yapmak istiyorum dosya inşa edilmiştir ve indirme istemi gönderildikten sonra yeni bir sayfaya kullanıcıları yönlendirmek olduğunu. Sadece sonuna kadar header("Location: /newpage") ekleyerek beklenebileceği, işe, bu yüzden nasıl teçhizat bu kadar emin değilim ki.

6 Cevap

Ben bu yapılabilir sanmıyorum - Ben% 100 emin değilim ancak.

Ortak bir şey (örneğin popüler indirme siteleri) tersidir: İlk gittiğiniz sayfa "sonra" ve daha sonra yükleme başlar.

Yani (diğer şeyler arasında) diyor "nihai" sayfasında yeniden yönlendirmek:

Sizin indirme otomatik olarak başlayacaktır. Burada [a href = "create_csv.php"] tıklayın değilse [/ a].

Indir (örneğin otomatik create_csv.php çağırarak) başlatma konusunda gibi birçok seçenek var:

Gönderdiğiniz başlığı HTTP başlıklarını vardır. Tarayıcı bir sayfa isteği olarak o alır ve bir sayfa olarak işler. Ve senin durumunda, bir sayfa indirmek gerekiyor.

Yani bir yönlendirme başlık ekleme (başlıklar toplanır beri, tek bir başlık içine oluşturulur ve sonra tarayıcıya gönderilen, birden fazla yönlendirme başlıklarını IIRC ayarlayarak bu deneyebilirsiniz) dosyasını indirme tüm süreci karıştırır

Unutmayın, ancak, IE kullanıcıları için indirilebilir dosyalar otomatik olarak başlatma güvenlik uyarısı sekmesini tetikleyecektir. Daremon tarafından özetlenen, her üç yöntemin bu uyarıyı gösterir. Sadece bu çevrede alınamıyor. Gerçek bağlantılar sağlar eğer iyi servis edilecektir.

Ben javascript dayanır bu için bir geçici çözüm bulundu, bu yüzden tam olarak güvenli değil, ama güvenli olmayan kritik siteler için iş gibi görünüyor.

Yükleme komut işaret ayarlanmış eylem ile 'indirme' başlıklı bir düğme ile bir form var, sonra javascript kullanarak indirme düğmesini şeritler ve ekranda mesajlaşma yerini onsubmit işleyicisi şey koymak. Indir hala gerçekleşmesi gerektiğini ve ekran değişecek. Yükleme komut dosyası ile ilgili bir sorun varsa Açıkçası, o yangın olmasa bile indirme başarılı oldu gibi hala görünüyor, ama ben şu anda var en iyisidir.

Denemek ve URL artı dosya içeriğini temsil eden bir parametre yönlendirebilirsiniz. Ve yönlendirme, sen çıktı indirmek için dosya içeriğini yapabilirsiniz.

gerçekten gerekli durumda yapmak çok kolay.

Ama JavaScript ve çerezler biraz çalışma olması gerekir:

PHP bir çerez kurma eklemek gerekir

header('Set-Cookie: fileLoading=true'); 

sonra arama indirin sayfada böyle geliyor çerez varsa (eklentisi jQuery cookie orada burada kullanılmıştır) JS (örneğin saniyede bir kez) ile izlemek gerekir:

setInterval(function(){
  if ($.cookie("fileLoading")) {
    // clean the cookie for future downoads
    $.removeCookie("fileLoading");

    //redirect
    location.href = "/newpage";
  }
},1000);

Şimdi dosya downoaded edilecek başlarsa JS onu tanır ve çerez silindikten sonra gerekli sayfaya yönlendirir.

Tabii ki, bunu çerez, JavaScript ve kabul etmek tarayıcı gerekir, ama çalışıyor söyleyebilirim.