Заголовок PHP: Content-disposition: attachment, then Location: некоторый url

Моя цель – перенаправить браузер на новую страницу после того, как браузер отправит загрузку вложений.

header("Content-type: text/csv"); header("Cache-Control: no-store, no-cache"); header("Content-disposition: attachment;filename=file.csv"); // csv output logic here // forward to next page header("Location: $url"); 

Является ли это возможным ?

ОБНОВЛЕНИЕ : результат выше

Последняя строка CSV показывает ошибку PHP:

Невозможно изменить информацию заголовка – заголовки, уже отправленные …

Это потому, что логическая часть CSV изменила содержимое перед header("Location: $url"); строки header("Location: $url");

UPDATE : я попробовал альтернативный метод: для эха небольшого HTML состоит из ключевой строки <meta http-equiv="refresh" content="0; url=$url" /> (конечно <html> <head> <body> и даже DOCTYPE также отражены). Но все же, HTML-коды отображаются в содержимом CSV.

Related of "Заголовок PHP: Content-disposition: attachment, then Location: некоторый url"

С текущим кодом нет, вы не можете. Вы вынуждаете браузер загружать дополнительный контент в файл .csv, поэтому новые заголовки игнорируются.

Тем не менее, посмотрите на метаобновление. Вы сможете добавить задержку между загрузкой страницы (так что пользователь действительно видит веб-страницу) и отправить файл для загрузки в обновлении.

Хотел бы я добавить пример, но в настоящее время я в поезде, в окружении младенцев, плачущих, и мне скучно.

Чтобы предотвратить появление метатег (и другого HTML) в содержимом файла CSV, мы можем использовать некоторое значение $ _GET.

 <?php if (isset($_GET['dl']) && $_GET['dl'] == '1') { header("Content-type: text/csv"); header("Cache-Control: no-store, no-cache"); header("Content-disposition: attachment;filename=file.csv"); // csv output logic here } else{ ?> web page here, with html, head, title, body, and whatnot tags. In the head tag, add this: <meta http-equiv="refresh" content="5;url=http://my.web.site.com/download.php?dl=1"> <?php } ?> 

Вы можете сделать это на стороне клиента: открыть загрузку файла в новом окне, а затем перенаправить текущее окно с помощью javascript.