Скачать PDF с PHP, не работает в проводнике и сафари

0

У меня есть сценарий для загрузки pdf после отправки формы в db, отлично работает на chrome и firefox, но когда я загружаю свой pdf файл на сафари или проводник, мой pdf файл пуст и не может быть открыт, я пробовал много вещей, прямо сейчас, используя javascript whit window.location, и он работает на Safari и Explorer, но мне бы очень хотелось, чтобы мой PHP-скрипт работал на всех браузерах

<?php
ob_start();


if ($_REQUEST["action"] == "download") {
    $file = base64_decode($_REQUEST["download"]);

//Insert to download table....

    if (isset($_SERVER['HTTP_USER_AGENT'])) {
        $agent = $_SERVER['HTTP_USER_AGENT'];
    }
    if (strlen(strstr($agent, 'Firefox')) > 0) {
        $browser = 'firefox';
    } else if (strlen(strstr($agent, 'Chrome')) > 0) {
        $browser = 'chrome';
    } else  {
        $browser = 'safari';
    }

    if ($browser == 'safari'){
?>
    <script type="text/javascript">
        window.location = '<?php echo $file;?>';
    </script>
<?php 
    } else { ?>
<?php
        if ($file) { 

            header('Pragma: public');  // required
            header('Expires: 0');  // no cache
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');

            header('Cache-Control: private', false);
            header('Content-Type: application/octet-stream');
            header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($file)) . ' GMT');
            header('Content-Disposition: attachment; filename='.basename($file));
            header("Content-Transfer-Encoding: binary");
            header('Content-Length: ' . filesize($file)); // provide file size
            header('Connection: close');
            readfile($file);

            exit(); 
        }
    }
}
  • 0
    пожалуйста, не могли бы вы добавить var_dump ($ file) в ваш скрипт и опубликовать здесь вывод этого var_dump? Я думаю, что это просто проблема с именем файла ...
  • 0
    string (97) "mysite / wp-content / uploads / sites / 2/2014/12 / diplom.pdf"
Показать ещё 2 комментария
Теги:
pdf
header

2 ответа

1
Лучший ответ

Я решил проблему, удалив некоторые из заголовков, теперь я использую только это

<?php
ob_start();


if ($_REQUEST["action"] == "download") {
$file = base64_decode($_REQUEST["download"]);


if ($file) { 
header('Pragma: public');  // required
header('Expires: 0');  // no cache
header("Content-disposition: attachment; filename=".basename($file));
header("Content-type: application/pdf");
readfile($file);
exit();

}
}
0

вы должны использовать функцию ob_flush(); если вы хотите опубликовать этот документ в проводнике

  • 0
    sjmg ive пробовал и с ob_flush (), и с ob_clean (), в результате мой браузер открывает php-файл, например,% PDF-1.7% 67 0 obj <> endobj xref 67 32 0000000016 00000 n 000 ..
  • 0
    Вы должны изменить тип содержимого файла для чтения файла PDF

Ещё вопросы

Сообщество Overcoder
Наверх
Меню