Подтвердить что ты не робот

PHP создать файл для загрузки без сохранения на сервере

Конечная цель:. Я хочу создать веб-страницу, где пользователь может вводить информацию в формы. С этой информацией я хочу создать html файл (под названием test-download.html), вставив информацию, указанную в шаблон, а затем принудительно загрузите. Поскольку я хочу продемонстрировать это на предстоящем семинаре, где люди будут использовать это в то же время, я бы не хотел сохранять файл на сервере и просто принудительно загрузить.

Пока: У меня есть это в моем html файле (test.html):

<form action="test.php" method="post">
To file: <input type="text" name="tofile" />
<input type="submit" />
</form>

и это в моем test.php:

<?php
$filename = 'test-download.html';
$htmlcode1 = "<HTML> \n <BODY>";
$htmlcode2 = "</BODY> \n <HTML>";
$somecontent = $htmlcode1.$_POST["tofile"].$htmlcode2;
!$handle = fopen($filename, 'w');
fwrite($handle, $somecontent);
fclose($handle);


header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Length: ". filesize("$filename").";");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Type: application/octet-stream; "); 
header("Content-Transfer-Encoding: binary");

readfile($filename);

?>

Это перезаписывает файл test-download.html и принудительно загружает.

Вопрос: Как я могу это сделать без использования файла (test-download.html) на сервере?

4b9b3361

Ответ 1

Вместо сохранения его в файл просто echo после отправки заголовков.

Ответ 2

Поймите, что почти каждый раз, когда PHP script отвечает на запрос, он "генерирует файл", который загружается браузером. Все, что вы echo, print, printf или иначе выставляете на стандартный вывод, это содержимое этого "файла".

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