IE (HTTPS): php dosyadan pdf oluşturma çalışmıyor

5 Cevap php

İşte benim konudur. ? Foo.php DOCID = bar ve DB bir BLOB olarak depolanır ekrana bir PDF dönüş: Ben bir sayfayı çağırmak için çalışıyorum.

Burada aslında PDF döndüren kodumu kısmıdır:

$docID = isset($_REQUEST['docID']) ? $_REQUEST['docID'] : null;

if ($docID == null){
    die("Document ID was not given.");
}

$results = getDocumentResults($docID);

if (verifyUser($user, $results['ProductId'])){
    header('Content-type: application/pdf');
    // this is the BLOB data from the results.
    print $results[1];
}
else{
    die('You are not allowed to view this document.');
}

Bu Firefox'ta mükemmel çalışıyor.

Ancak, IE, hiç bir şey görünmüyor. Ben başka bir sayfada (yani google.com) yaşıyorum ve ben bu sayfaya gitmek için URL yazarsanız, o bitti diyecekler, ama ben hala benim ekranda google.com olacak.

Ben ateş ve IE hem yanıtları için başlıklarını kontrol etti. Bunlar aynıdır.

Herkes herhangi bir öneriniz var mı? Daha fazla bilgiye mi ihtiyacınız var?

EDIT: hepsi de yardımcı olur, İşte yanıt başlığı ve içeriği ilk satırı:

HTTP/1.1 200 OK
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 349930
Content-Type: application/pdf
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: PHP/5.1.2
Set-Cookie: PHPSESSID=cql3n3oc13crv3r46h2q04dvq4; path=/; domain=.example.com
Content-Disposition: inline; filename='downloadedFile.pdf'
X-Powered-By: ASP.NET
Date: Tue, 21 Apr 2009 16:35:59 GMT

%PDF-1.4

EDIT: Ayrıca, pdf dosyası çeker sayfa aslında HTTP yerine HTTPS kullanır.

Teşekkür peşin,

~ Zack

5 Cevap

Ben sorun olduğunu anladım. Bu IE, HTTPS ve addons ile uğraşan bir IE bug bulunuyor. (here bak)

Bu önbelleğe alma sorunu oldu. Ben ayarlandığında:

  header("Cache-Control:  max-age=1");
  header("Pragma: public");

(Bkz: here), PDF adobe reader eklenti onu kapmak için yeterince uzun önbellek oldu.

Ben iyi çalışıyor gibi görünüyor aşağıdaki kullanılan, bu çok sorunu vardı

header("Content-type: application/pdf");
header("Content-Length: $length");
header("Content-Disposition: inline; filename='$filename'");

Bu deneyin:

 header("Content-Type: application/pdf");
 header("Content-Disposition: inline; filename=foo.pdf");
 header("Accept-Ranges: bytes");
 header("Content-Length: $len");
 header("Expires: 0");
 header("Cache-Control: private");

Eğer oturumları kullanıyveyasanız Ayrıca, sen ayarı deneyebilirsiniz

session_cache_limiter("none");

veya

session_cache_limiter("private");

Bu benim değiştirmek için gereken tek başlık oldu:

header("Pragma: public");

Ben daha fazla başlıkları eklemek gerek.

header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=THEFILENAME.pdf;");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . strlen($results[1]));