IE6 Dosya indirme yanlış dosya alır

2 Cevap php

Ben kullanıcıya bir PDF dosyası zorlamaya çalışıyor https:// üzerinde servis ediliyor bir PHP komut dosyası var. Internet Explorer 6 (ne yazık ki hala desteklemek zorunda olan) olarak başlığında ayarlanan dosya itaat olmadığını sorun. FireFox ve IE7 hem de düzgün çalışıyor.

Dosya adı doğru uzantılı rastgele bir isim olarak çıkıyor tutar. Örnek: "CAOTC5K3.pdf", "CAXSIPXV.pdf" ya da "CA1OCVTX.pdf"

Ben "Content-type" satırını un-yorumda, IE6 bana bir hata veriyor, ve PHP geçildi sorgu dizesi adı ile dosya satır içi indirmek için çalışır.

<?php
//header( "Content-type: application/pdf" );
$filename = 'quickquote.pdf';
header( "Content-Disposition: attachment;filename=$filename" );
echo file_get_contents( "/example.pdf" );
die;
?>

Ben, tırnak içinde dosya adını sarma header çizgilerin sonunda \n ekleyerek, header('Content-type: application/octet-stream'); ekleyerek ekleyerek header("Content-Type: application/force-download"); denedi

2 Cevap

I think sen sonra bir boşluk gerekebilir attachment;:

header("Content-Disposition: attachment; filename=$filename");

Bu işe yaramazsa, dahil olmak üzere, this article içinde bazı noktaları göz atın:

  • IE 6.0, işler çoğunlukla işe, ama aynı zamanda kurulum Cache-Control ise: no-cache, senin önerdiğin dosya (! Ve tipi) IGNORED edilecektir. Güvenlik ve convienence arasında seçim yapmak zorunda ise bir serseri. Tabii ki, güvenlik kazanır.
  • 6.0 dahil IE hemen hemen tüm sürümleri, üzerinde, bazen tarayıcı yerine Content-Bırakma başlığının adres çubuğuna dosya adını kullanacak ve IE5.5SP2 ile UseCDFileName kayıt defteri anahtarını değiştirmek için beklenen, Q303750 bakın. Bu Ie6.0sp1 ile tespit edildi.

EDIT: İşte doğrudan benim uygulamanın kaynaktan kopyalanmış, kullandığım kod. Bu daha iyi çalışır varsa bana bildirin ...

function forceDownload($filename,$mime=false,$downloadName=false)
{
    if(file_exists($filename) && is_readable($filename))
    {
        if(!$mime)      $mime = DFStdLib::determineMimeType($filename);

        if(!$expire)    $expire = DFStdLib::HOUR_IN_SECONDS;

        if(!$downloadName) $downloadName = basename($filename);

        header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($filename)).' GMT', true, 200);
        header('Cache-Control: no-cache',true);
        header('Pragma: Public',true);
        header('Expires: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT',true);
        header('Content-Length: '.filesize($filename),true);
        header("Content-Type: {$mime}",true);
        header("Content-disposition: attachment; filename=$downloadName",true);
        readfile($filename);
        exit();
    }
    else
    {
        header('HTTP/1.1 404 Not Found',true,404);
        echo "<html><head><title>Not Found</title></head><body>The file was not found.</body></html>";
        exit();
    }
}

Davanız için kullanım olacaktır:

forceDownload('/example.pdf','application/pdf','quickquote.pdf');

Ayrıca DFStdLib::HOUR_IN_SECONDS 3600 olarak değiştirin ve kendi determineMimeType fonksiyonu yazmak veya silmek o satır ve $mime argüman yapmak gerekir Gerekli ...

Sen Content-Disposition başlığını kullanabilirsiniz IE zorlamak için aşağıdaki Content-Type kullanabilirsiniz.

(Eğer 'açık' bir dosyaya tercih IE7 Çalışma)

Content-Type: application/save

cf. http://blog.mjjames.co.uk/2009/04/content-disposition-in-different.html