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;

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

  1. Перед выполнением этого блока кода у меня есть немного текста, напечатанного на экране (браузер). Однако, когда файл .php выполняется с этим блоком в самом конце, на экране ничего не печатается, и он переходит непосредственно к загрузке. Как мне убедиться, что все распечатано в браузере, а затем разрешить загрузку файла?

  2. Затем я подумал, что, может быть, вместо этого я вставлю ссылку после того, как все будет напечатано, но у меня возникли проблемы с тем, чтобы это сработало. Когда я нажимаю на ссылку для загрузки (href='download.php '), возвращается пустой экран и больше ничего.

Может ли кто-нибудь вмешаться и помочь? ТИА!

Author: musicliftsme, 2011-07-06

3 answers

Вы не можете вернуть HTML для браузера и файл, загруженный из запроса на одну страницу из браузера. Он ожидает того или другого. Вы можете открыть всплывающее окно с текстом, которое затем перенаправит Javascript на второй PHP-скрипт, отправляющий файл.

 1
Author: Tak, 2011-07-06 00:27:59

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

 1
Author: Brad, 2011-07-06 00:26:58

Каждая страница может быть проанализирована только одним способом, html/pdf/изображение/файл загрузки и т.Д...
Решение: Делайте то, что вы хотите, чтобы пользователи видели в HTML (ссылка/текст, что угодно), и когда они нажимают ссылку для загрузки, вы открываете ее внутри скрытого iframe.

Теперь не приходите и не жалуйтесь, это не лучший способ решить эту проблему, мы находимся в 2011 году и т. Д.
Это единственный способ (кроме использования Java или Flash) решить эту проблему (возможно, у html5 будет отличное решение, но большинство пользователей браузеры не поддерживают это).

 1
Author: Itay Moav -Malimovka, 2011-07-06 00:29:33