@vyaznikov1991
Набирающийся мудрости нуб-junior

Как с помощью PHP сгенерировать и сохранить HTML файл?

Задача:
Пользователь заполняет форму. На основе введенных данных формируется HTML документ. Документ формируется с помощью простого PHP скрипта.
Как с помощью PHP сохранить и загрузить пользователю данный файл?

Пытался сделать так:
$htmlFile = $_POST['form-html'];

//echo ($htmlFile);

$shortfilename = file_put_contents('test.html', $htmlFile);

$file = 'test.html';
function file_force_download($file) {
    if (file_exists($file)) {
        // сбрасываем буфер вывода PHP, чтобы избежать переполнения памяти выделенной под скрипт
        // если этого не сделать файл будет читаться в память полностью!
        if (ob_get_level()) {
            ob_end_clean();
        }
        // заставляем браузер показать окно сохранения файла
        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');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        // читаем файл и отправляем его пользователю
        readfile($file);
        exit;
    }
}

file_force_download($file);


Работает только, если файл пустой.
В любом другом случае появляются ошибки вида:

Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\editor\save.php:5) in C:\OpenServer\domains\editor\save.php on line 18

Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\editor\save.php:5) in C:\OpenServer\domains\editor\save.php on line 19

Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\editor\save.php:5) in C:\OpenServer\domains\editor\save.php on line 20

...
  • Вопрос задан
  • 1063 просмотра
Пригласить эксперта
Ответы на вопрос 2
AlexXYZ
@AlexXYZ
O Keep Clear O
Может быть проблема именно в этом:

if (ob_get_level()) {
     ob_end_clean();
}


Вы как раз отключаете буфферизацию и тут же просите продолжить отправлять заголовки. Вот обсуждение: https://stackoverflow.com/questions/2168956/php-he...
Может этот код поставить после header перед readfile?
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
У вас в пятой строке что-то выводится в поток, соответственно при попытке вывести заголовки возникает ошибка. Перед заголовками ничего не должно выводится.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
23 апр. 2024, в 11:46
3000 руб./за проект
23 апр. 2024, в 11:38
20000 руб./за проект