DOMPDF: невозможно выполнить поток pdf: заголовки уже отправлены

Этот вопрос поднят сто раз на разных форумах; некоторые были решены, некоторые – нет. Я проверил множество ресурсов, но моя проблема не была решена. Я создаю php-страницу, используя шаблон smarty на основе ввода и выгрузки файлов html. Используя dompdf, я хочу сохранить созданную страницу как файл PDF. Когда пользователь отправляет данные multipart / form, данные отправляются самому себе. Затем он проходит процесс проверки. Когда все в порядке, создается новая страница с использованием файла шаблона. Нет вывода, вместо этого dompdf использует файл шаблона для потока файла pdf. После решения нескольких этапов проблем, таких как «DOMPDF not found», недостаточной памяти и т. Д., Я теперь застрял с ошибкой «Невозможно передать поток pdf: заголовки уже отправлены». Одной из наиболее распространенных проблем является наличие разрыва строки, пробела или любого выхода, который вызывается перед вызовом stream (). Я проверил пробел до и после? Также нет ни print_f, ни эхо-заявлений. Как устранить эту проблему? Где проблема лежит … в файле шаблона smarty или самом файле php? Вот код:

require_once("dompdf/dompdf_config.inc.php"); spl_autoload_register('DOMPDF_autoload'); $html = $smarty->fetch('index.tpl'); $dompdf = new DOMPDF(); $dompdf->load_html($html); $dompdf->set_paper('a4', 'portrait'); $dompdf->render(); $dompdf->stream("newfile.pdf"); 

Solutions Collecting From Web of "DOMPDF: невозможно выполнить поток pdf: заголовки уже отправлены"

простое решение:

напишите ниже строки перед потоком, он покажет, где именно начинается новая линия или пространство

 $f; $l; if(headers_sent($f,$l)) { echo $f,'<br/>',$l,'<br/>'; die('now detect line'); } 

Скорее всего, в вашем коде есть пробел или новая строка, вызывающая это. Вот простой способ его отладки:

  1. echo что-то в самом конце вашего скрипта (над вызовом stream ()), например echo "end!";exit;
  2. Нажмите «Просмотр источника» на своей странице, что упрощает просмотр пробелов
  3. Если ваш «конец!» строка не появляется в самом начале вашего скрипта, а затем где-то напечатан символ
  4. Переместите «эхо-конец!» линии до вашего кода, пока не найдете место, где было вставлено пространство

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

Я попытался откликнуться, но никаких пробелов или разрывов строк не найдено. В конце я перенаправил php на другую страницу вместо PHP_SELF, и проблема исчезла. Я не изменял никакого кода. Похоже, присутствие html-тегов после того, как php закончился, было оскорбительным фактором.

Убедитесь, что ваш редактор не добавляет описание Unicode Bom – сохраните код в файл с помощью Notepad или (если вы работаете в Dreamweaver) удалите проверку подписями Asign Unicode (BOM) или что-то в этом роде. 😉

Замените строку 3105 этого файла: dompdf/lib/class.pdf.php

 if ( headers_sent()) { die("Unable to stream pdf: headers already sent"); } 

С

 $output = ob_get_clean(); if ( headers_sent()) { echo $output; } 

Затем в файл, который генерирует вывод в формате pdf, например, если вы выводили из компонентов компонента Joomla / com_joomlacomponent / views / yourpdfdir / tmpl / default.php, введите сразу после открытия php-тега

 <?php ob_start(); 

Я столкнулся с этой проблемой. Вы хотите проверить все переменные, которые используете. Одна или даже более чем одна переменная, которую вы передаете, пустая и беспорядочна.

Начните постепенно, избавившись от всего php и попытайтесь сгенерировать PDF-файл, а затем, если он работает для вас, добавьте блок по блоку .

Это поможет вам определить, где проблема.

В моем случае проблема была решена путем установки $ _dompdf_show_warnings в false в dompdf_config_inc.php

У меня была эта проблема, без видимых результатов при просмотре источника. Проблема для меня заключалась в том, что я удалил вывод, хотя не было ни одного, кроме заголовков, и блокировал поток, выдавая сообщение «отправленные уже заголовки». Это было правдой. Мое исправление заключалось в том, чтобы удалить операторы flush () и ob_flush (), после чего работал потоковый вывод.

для меня – решение заключалось в том, чтобы кодировать мой файл в UTF-8 вместо спецификации UTF-8