Файл загрузки nginx php после перенаправления не работает

хочет сделать редирект на страницу в файл

function downloadFile($url) {
    ... // save info to database
    $path = ..; // checking if the file is on the local server

    if(empty($path) === false) {
        // download file from local server - it works
        header("Content-Description: File Transfer");
        header("Content-Type: application/octet-stream");
        header("Content-Disposition: attachment; filename=\"". basename($path) ."\"");
        readfile($path);
        exit;
    }

    // downloading a file from another server - it does not work, $url is 100% good
    header("Location: " . $url);
    exit;
}

но файл не выкидывается на экран, я вижу этот файл только во вкладке Сеть

eq:

...file?id=123 // first page run header("Location: " . $url); exit;

и редирект на страницу с другого сервера

...download_file?id=123 // status 302
...file.pdf // status 302
...file.pdf // status 200

заголовок последней страницы

HTTP/1.1 200 OK
Date: Wed, 30 Dec 2020 15:45:21 GMT
Server: Apache
Last-Modified: Wed, 30 Dec 2020 16:38:38 GMT
ETag: "1a8f32-5b7af7b443bf7"
Accept-Ranges: bytes
Content-Length: 1740594
Content-Disposition: attachment
Content-Type: application/force-download
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive

почему он не отображает файл на экране? почему не начинает скачиваться? в инструменте есть только информация (вкладка Сеть)


person dominik    schedule 30.12.2020    source источник
comment
Что произойдет, если вы перейдете к URL-адресу файла напрямую? Он скачивается?   -  person Lawrence Johnson    schedule 30.12.2020
comment
да, файл скачивается   -  person dominik    schedule 30.12.2020


Ответы (2)


Не отображает файл на странице, потому что вам нужно изменить заголовки страницы, чтобы отобразить его, это, вероятно, не что иное, как nginx, но с вашим PHP (поскольку у нас не так много кода для анализа этой ситуации что вы спрашиваете).

Но если вы проверите эту тему здесь, в StackOverflow, вы увидите пример, показывающий PDF.

В любом случае, я призываю вас отредактировать свой вопрос и попытаться дать нам больше объяснений и несколько примеров кода, чтобы мы проанализировали его и дали вам более краткий ответ.

person Fabio William Conceição    schedule 30.12.2020
comment
пост отредактировал, что еще добавить? Никаких дополнительных заголовков перед редиректом я не добавлял, потому что они мне показались ненужными. потому что это перенаправление и мне показалось, что шапка с последней страницы самая важная (я на нее не влияю) - person dominik; 30.12.2020
comment
я пытаюсь скачать этот файл с помощью readfile, но файл обрезан на 1,1 ГБ - person dominik; 30.12.2020
comment
@Доминик Что? Размер файла PDF превышает 1,1 ГБ ??? - person Adam P.; 30.12.2020
comment
пример другого zip-файла, pdf max ~100MB - person dominik; 30.12.2020
comment
Перейдите к своей конфигурации php.ini и проверьте переменную max_allowed_file_size (или что-то в этом роде), потому что, насколько я помню, движок php по умолчанию меньше, чем запросы тела 80 МБ. Но, если я ошибаюсь, хорошо / хорошо пойти и посмотреть на всякий случай :) - person Fabio William Conceição; 30.12.2020
comment
Текущие настройки @FabioWilliamConceição: upload_max_filesize 4G и post_max_size 4G - person dominik; 30.12.2020
comment
@FabioWilliamConceição и в конфигурации виртуального хоста nginx client_max_body_size 0; proxy_max_temp_file_size 0; прокси_буферизация выключена; - person dominik; 30.12.2020
comment
В вашем файле PHP вы настроили заголовки? - person Fabio William Conceição; 30.12.2020
comment
@FabioWilliamConceição Я добавляю заголовок (тип содержимого: приложение/pdf); header(Content-Disposition: встроенный; имя_файла=имя_файла.pdf); header('Content-Transfer-Encoding: binary'); заголовок (Расположение: . $url); выход; но такого же эффекта т.е. не получается - person dominik; 30.12.2020
comment
некоторое время назад это работало. только на месяц или около того прекратилось. и я не знаю, сломалось что-то на сервере или что-то изменилось в шапках с того сервера? - person dominik; 30.12.2020
comment
Что изменилось за последний 1 месяц? Вы можете откатить код в отдельной ветке и снова загрузить его только для тестирования? Похоже у вас с nginx действительно что-то идет не так. - person Fabio William Conceição; 30.12.2020
comment
проблема возникает только на хроме. на фаерфоксе работает нормально. У меня нет блокировщиков в хроме - person dominik; 31.12.2020
comment
Кажется, я нашел ответ stackoverflow.com/ вопросы/8012279/ - person dominik; 31.12.2020
comment
Привет, извините за поздний ответ, но да, это может сработать, теперь это работает? - person Fabio William Conceição; 05.01.2021

решил, как я и писал, проблема только в хроме, дело в конфликте

@PaoloVeronelli - Chrome блокирует загрузку статического контента, если он обслуживается через HTTP, когда сайт загружается через HTTPS. Может показаться, что Firefox этого не делает. — Фредерик Нильсен

$url = str_replace('http://', 'https://', $url);
header("Location: " . $url);
exit;

спасибо всем за вашу помощь

person dominik    schedule 31.12.2020