Отдать файл на скачивание не создавая его на сервере

djdiplomat
На сайте с 05.08.2009
Offline
136
6323

Собственно суть в чем.

в переменной $text лежит текст, который я хочу ввиде txt файла передавать в браузер пользователя, для скачивания. (не сохраняя файл на сервере);

Слышал, что это делается через заголовки как-то.

Но мой код

if($do_it == "export_position") {
$text = "<h1>Текст, который должен быть в файле</h1>";
header('Content-Length: ' . strlen($text));
header('Content-type: application/txt'); //тут тип
header('Content-Disposition: attachment; filename="r36.txt"');//имя
echo 'file................................................file';//файл*/
}

Выдает ошибку Warning: Cannot modify header information - headers already sent by

PS Сайт на WordPress

S
На сайте с 13.10.2014
Offline
171
#1

Нельзя посылать заголовок после контента.

Заголовок всегда должен быть самым первым. перед <html>

в случае вывода файла


<?php
header('Content-Length: ' . strlen($text));
header('Content-type: application/txt'); //тут тип
header('Content-Disposition: attachment; filename="r36.txt"');

print $Your_document_content;

?>

и все. и никаких html, header, body etc

djdiplomat
На сайте с 05.08.2009
Offline
136
#2
silicoid:
Нельзя посылать заголовок после контента.
Заголовок всегда должен быть самым первым. перед <html>

Да знаю я, но как мне быть?

Заголовки же вордпрес отправляет. Я под него этот экспорт пишу.

Может альтернатива есть какая.

Т.е. мне нужно как-то передать юзеру на сохранение файлик содержимое которого - задано переменной.

Может как то через curl_setopt подступиться, но как?

S
На сайте с 13.10.2014
Offline
171
#3

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

LEOnidUKG
На сайте с 25.11.2006
Offline
1773
#4
Нельзя посылать заголовок после контента.

Хватит эти сказки.

ТС, сразу после в самом начале файла или где там у вас пишите:

<?php

ob_start();

?>

И заголовки потом хоть в конце прописывайте. Всё будет работать.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
djdiplomat
На сайте с 05.08.2009
Offline
136
#5
silicoid:
djdiplomat, можно написать отдельный скрипт, который будет доставать ваши данные и выводить их. скрипт вы можете положить в папку и настроить .htaccess так, что при обращении к любому файлу в этой папке запрос перенаправлялся на ваш скрипт, который и будет генерить контент на вывод

Я по ходу что-то недопонял в Вашей идеи.

Ну вот смотрите. У меня сейчас в админке WP человек выбрал нужные параметры (чекбоксами), нажал кнопку скачать.

Потом идет передча по методу POST.

Прошел потом запрос к базе. Я собрал нужные параметры в переменную $текст

Потом стартует это условие

if($do_it == "export_position") {

насколько я понимаю вы предлагает сделать в нем что-то типа

if($do_it == "export_position") {
require_once F_DIR.'export.php';
}

а в файле export.php разместить заголовки? Но разве не тоже самое получится, не таже трабла вылезет?

Просто мне нужно, чтобы эта штука через админку работала. Чтобы клиент нажал кнопочку и скачал, что нужно ему.

S
На сайте с 13.10.2014
Offline
171
#6

LEOnidUKG, ну прально, таким образом вы гоните данные в буфер.

а если ob_start не написать первым, что получится? как думаете?

djdiplomat
На сайте с 05.08.2009
Offline
136
#7
LEOnidUKG:
Хватит эти сказки.

ТС, сразу после в самом начале файла или где там у вас пишите:
<?php
ob_start();
?>

И заголовки потом хоть в конце прописывайте. Всё будет работать.

Ура! Помогло! ОГРОМНОЕ СПАСИБО! :)

seosniks
На сайте с 13.08.2007
Offline
389
#8

А почему не отдавать файл на новой странице?

Это же проще простого.

передали через post данные, и скачали.

Примеров на скачивание в сети масса.

И не будет ли нагрузки, если качать будут много.

S
На сайте с 13.10.2014
Offline
171
#9

Ну работает, значит хорошо

djdiplomat
На сайте с 05.08.2009
Offline
136
#10
seosniks:
А почему не отдавать файл на новой странице?
Это же проще простого.
передали через post данные, и скачали.
Примеров на скачивание в сети масса.

И не будет ли нагрузки, если качать будут много.

Просто это задача в рамках большого плагина с кучей функций. Мне показалось, что так удобнее будет.

Нагрузки не будет, тк. эта функция для админов сайта и ей пользоваться будут раза 2 в неделю.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий