IE (HTTPS): генерация PDF из php-файла не работает

Вот моя проблема. Я пытаюсь вызвать страницу: foo.php? DocID = bar и вернуть PDF на экран, который хранится как BLOB в БД.

Вот часть моего кода, которая фактически возвращает PDF:

$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.'); } 

Это прекрасно работает в Firefox.

Однако в IE он вообще ничего не показывает. Если я нахожусь на другой странице (например, google.com), и я набираю URL-адрес, чтобы перейти на эту страницу, он скажет, что все сделано, но у меня все равно будет google.com на моем экране.

Я проверил заголовки для ответов от Firefox и IE. Они идентичны.

У кого-нибудь есть предложения? нужно больше информации?

EDIT : если это вообще помогает, вот заголовок ответа и первая строка содержимого:

 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 : Кроме того, страница, которая извлекает файл pdf, фактически использует HTTPS вместо HTTP.

Заранее спасибо,

~ Zack

Я понял, в чем проблема. Это ошибка IE, связанная с IE, HTTPS и аддонами. (См. Здесь )

Это проблема кэширования. Когда я установил:

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

(см. здесь ), PDF-файл был в кеше достаточно длинным, чтобы добавить к нему надстройку adobe reader.

У меня тоже была эта проблема, я использовал следующее, которое, кажется, отлично работает

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

Попробуй это:

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

Кроме того, если вы используете сеансы, вы можете попробовать установить

 session_cache_limiter("none"); 

или

 session_cache_limiter("private"); 
 if ( USR_BROWSER_AGENT == 'IE' ) { header( 'Content-Disposition: inline; filename="' . $name . '"'); header( 'Expires: 0' ); header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' ); header( 'Pragma: public' ); } else { header( 'Content-Disposition: attachment; filename="' . $name . '"' ); header( 'Expires: 0' ); header( 'Pragma: no-cache' ); } 

Это был единственный заголовок, который мне нужно было изменить:

 header("Pragma: public"); 

Я думаю, вам нужно добавить больше заголовков.

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