Моя цель – перенаправить браузер на новую страницу после того, как браузер отправит загрузку вложений.
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.
С текущим кодом нет, вы не можете. Вы вынуждаете браузер загружать дополнительный контент в файл .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.