PHP: опубликуйте ссылку для загрузки файла
Я нашел этот код, который позволяет мне открывать окно и позволяет пользователю загружать файл (download.php)
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
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();
readfile($file);
exit;
Это хорошо работает, позволяя пользователю загружать файл с сервера через всплывающее окно, но у меня есть две проблемы:
Перед выполнением этого блока кода у меня есть немного текста, напечатанного на экране (браузер). Однако, когда файл .php выполняется с этим блоком в самом конце, на экране ничего не печатается, и он переходит непосредственно к загрузке. Как мне убедиться, что все распечатано в браузере, а затем разрешить загрузку файла?
Затем я подумал, что, может быть, вместо этого я вставлю ссылку после того, как все будет напечатано, но у меня возникли проблемы с тем, чтобы это сработало. Когда я нажимаю на ссылку для загрузки (href='download.php '), возвращается пустой экран и больше ничего.
Может ли кто-нибудь вмешаться и помочь? ТИА!
3 answers
Вы не можете вернуть HTML для браузера и файл, загруженный из запроса на одну страницу из браузера. Он ожидает того или другого. Вы можете открыть всплывающее окно с текстом, которое затем перенаправит Javascript на второй PHP-скрипт, отправляющий файл.
Все, что вы повторите, будет частью вашей загрузки. Вам нужны две отдельные страницы... один для отображения вашего текста, а другой только для файла.
Каждая страница может быть проанализирована только одним способом, html/pdf/изображение/файл загрузки и т.Д...
Решение: Делайте то, что вы хотите, чтобы пользователи видели в HTML (ссылка/текст, что угодно), и когда они нажимают ссылку для загрузки, вы открываете ее внутри скрытого iframe.
Теперь не приходите и не жалуйтесь, это не лучший способ решить эту проблему, мы находимся в 2011 году и т. Д.
Это единственный способ (кроме использования Java или Flash) решить эту проблему (возможно, у html5 будет отличное решение, но большинство пользователей браузеры не поддерживают это).