Задать вопрос
@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

...
  • Вопрос задан
  • 1149 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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
Для правильного вопроса надо знать половину ответа
У вас в пятой строке что-то выводится в поток, соответственно при попытке вывести заголовки возникает ошибка. Перед заголовками ничего не должно выводится.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽