Проблема header () в IE - PullRequest
       4

Проблема header () в IE

0 голосов
/ 06 октября 2010

У меня есть функция для вывода документов, изображений и т. Д .:

public function direct($theMimeType, $thePath)
{
    header('Content-type: '.$theMimeType);
    ob_clean(); // clean output buffer
    flush(); // flush output buffer 
    readfile($thePath);
    exit;
}

Отлично работает в Firefox. Файл открывается, будь то PDF, DOCX или любой другой файл. Однако в IE он зависает и ничего не отображается.

Что может вызвать это?

EDIT:

Я добавил несколько других заголовков:

public function direct($theMimeType, $thePath)
{
    $aSize = filesize($thePath);
    $aBegin = 0;
    $aEnd = $aSize;
    $aFilename = end(explode('/', $thePath));   
    $aTime = date('r', filemtime($thePath));
    $aContentDisposition = ('application/pdf' === $theMimeType) ? 'inline' : 'atachment';
    header('HTTP/1.0 200 OK'); 
    header("Content-Type: $theMimeType");
    header('Cache-Control: public, must-revalidate, max-age=0');
    header('Pragma: no-cache'); 
    header('Accept-Ranges: bytes');
    header('Content-Length:'.($aEnd-$aBegin));
    header("Content-Range: bytes $aBegin-$aEnd/$aSize");
    header("Content-Disposition: $aContentDisposition; filename=$aFilename");
    header("Content-Transfer-Encoding: binary\n");
    header("Last-Modified: $aTime");
    header('Connection: close');
    ob_clean(); // clean output buffer
    flush(); // flush output buffer 
    readfile($thePath);
    exit;
}

Ну, теперь он работает в IE, но все же он открывает файл намного медленнее, чем Firefox. Похоже, что до того, как браузер IE откроет файл, должно пройти несколько секунд.

Ответы [ 2 ]

2 голосов
/ 06 октября 2010
  • Сделать этот файл загружаемым напрямую, без использования скриптов
  • убедитесь, что он работает в IE
  • в Firefox, используйте LiveHTTPHeaders, чтобы посмотреть, какие заголовки отправляются веб-сервером
  • в Firefox, используйте LiveHTTPHeaders, чтобы посмотреть, какие заголовки отправляются вашим скриптом
  • сделать заголовки вашего скрипта такими же, как заголовок веб-сервера
1 голос
/ 06 октября 2010

Большинство этих заголовков на самом деле не нужны.Я предпочитаю, чтобы все было просто:

header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public');
header ('Content-Type: '.$theMimeType);
header ('Content-Disposition: '.$aContentDisposition.'; filename="'.$aFilename.'"');
header ('Content-Transfer-Encoding: binary');
header ('Content-Length: '.$aSize);

Не упустите \ n в конце заголовка Content-Transfer-Encoding.

"Pragma: public" - это обходной путь специальнорешить проблему с подключениями IE и https.Другое ключевое отличие - $ aFilename в кавычках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...