Заголовки отправлены, но загрузка не начинается (принудительная загрузка) - PullRequest
0 голосов
/ 19 июля 2011

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

function start_download( $path, $item ) {
    $file = $path.$item;
    header("Content-type:application/pdf");
    header('"Content-Disposition:attachment;filename="'.$file.'"');
}

Если тот факт, что функция является проблемой, я думаю, она должна работать правильно? ну, это не так. Никаких ошибок.

Глядя на инструменты разработчика Chrome, я вижу, что заголовки фактически установлены application/pdf.

О, также, когда я добавляю readfile($file), он, кажется, читает файл, но возвращает странную строку (цифры и странные символы).

Я искал по этому сайту, но, похоже, ничего не работает. Я действительно не знаю, что еще я могу сделать. Идеи?

Кстати, если я "повторю" $file, он показывает URL правильно, я не думаю, что это проблема.

Ответы [ 3 ]

1 голос
/ 19 июля 2011

У вас есть выигрышные кавычки, за один

header('"Content-Disposition:attachment;filename="'.$file.'"');
       ^^--- why double quoting?

Они прерывают вызов заголовка.

Попробуйте:

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

Обратите внимание, что я 'мы поместили там несколько пробелов.Строго говоря, они не нужны, но они помогают с разборчивостью.

0 голосов
/ 19 июля 2011

Попробуйте следующее:

function start_download( $path, $item ) {

    $file = $path.$item;

    if (file_exists($file)) {
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . $item);
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        ob_clean();
        flush();
        if (readfile($file) !== FALSE) return TRUE;
    } else {
        die('File does not exist');
    }
}
0 голосов
/ 19 июля 2011
function start_download( $path, $item ) {
  $file = $path.$item;
  header("Content-Type: application/pdf");
  header('Content-Disposition: attachment;filename="'.basename($file) . '"');
  readfile($file);
}

Насколько я понимаю, это может работать, если $file является допустимым локальным путем к файлу PDF.Убедитесь, что абсолютно нет другого выхода!

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