Dompdf render error

I'm using the most recent version of DomPDF (0.6.0 beta 3). PHP Version is 5.2.17. Unfortunately, I'm on a shared hosting account and upgrading PHP and similar actions are unavailable. I also d...

I’m using the most recent version of DomPDF (0.6.0 beta 3).

PHP Version is 5.2.17.

Unfortunately, I’m on a shared hosting account and upgrading PHP and similar actions are unavailable. I also don’t have access to the apache error logs, which I don’t think would be very helpful anyways.

I’ve set the memory_limit of PHP to 2048M and the max_execution_time to 999. Although I don’t know if they’ve taken effect. I think they actually don’t matter because I feel like DomPDF isn’t timing out or running out of memory. The 500 error seems to occur just 10 seconds after requesting the page, when I attempt to generate a PDF with fewer pages the script takes longer (12-15 seconds) but ends successfully.

I have an HTML file that’s 72.3kb large, with only one small HTML table. (In fact, removing the page with the table does nothing to help the problem.) The PDF should result in about 35 pages.

After lots and lots of digging I found the error occurs on the 30th — 31st page, on the following line of code in page_frame_reflower.cls.php inside the reflow function:

  // Render the page
  $this->_frame->get_renderer()->render($child);

When echoing memory_get_usage on each loop(page) the value stays pretty consistent, under 5% of available memory, it seems.

Using get_class on $this->_frame->get_renderer() I was able to determine that the problem function is Renderer::render().

Unfortunately, there’s no easy way for me to continue debugging with my current methods. The method Renderer::render() won’t let me add the counter variable to the parameters because it needs to be compatible with it’s parents function.

Anybody got any help for me, do you see anything I’m missing — can you point me in the right direction to fixing these 500 errors?

Edit: I’ve removed all uses of inline PHP from the HTML document, and it didn’t seem to change anything.

Edit 2: The document was too large to completely run through Tidy, but up to 50000 bytes had no errors.

Edit 3: PHP Error logging has been turned on. I can generate errors by calling wrong method names and other things. Those errors appear on the screen. In fact, even when I cause an infinite loop before the problem method, I get PHP maximum execution time reached errors printed to the screen. However the problem area shows a 500 Internal Server Error page.

Edit 4: I stripped out all of my CSS and the PDF was generated without styling. Now we’re getting somewhere. I’ll slowly add the CSS back in and I can narrow down what the problem code. Thanks, @Liv.

Edit 5: I narrowed down the CSS to the bud of the problem: the h1 rule. I was using a background image on the h1 tags. So from my original problem, all I had to do was remove the background images from the h1 tag to get the PDF to work properly. Is handling a lot of elements with background images a problem for DomPDF?

Edit 6: Here’s the HTML file: http://www.pickering-mcaloon.com/wp-content/uploads/2013/03/test2.html I had to strip out the content (wasn’t mine). I tested this version of the HTML with DomPDF and got a 500 server error. My header image is 25.1 kb. It should be noted that the footer of every page also uses a background image and it works fine. In this copy of the HTML, removing 1 «Chapter» section permitted DomPDF to finish the generating the PDF.

Edit 7: When I first ran into the problem I had used memory_get_usage and at the top of the loop where Renderer::render() is called, each time it showed a slightly different usage, but under 6% of the max, which was set to 2048M. I don’t believe this problem is a timeout error or a memory error, because I can produce these types of errors before the call to render and get the PHP errors printed to the screen. Also, the 500 error appears after about 10 seconds of runtime — When the PDF works it takes about 15-20 seconds. So a timeout is unlikely. Memory errors, perhaps but if so why not print the error as it does if the memory overflows before the call to render.

Edit 8: I converted the image I was using as a background image for the h1 tags to a JPG from a PNG, which reduced its size from 25.1kb to 2.6kb and the PDF generated properly. This is likely a memory issue. PHP should generate an error and show it to me, but it doesn’t.

Я использую самую последнюю версию DomPDF (0.6.0 beta 3).

Версия PHP — 5.2.17.

К сожалению, я нахожусь на учетной записи общего хостинга, и обновление PHP и подобные действия недоступны. У меня также нет доступа к журналам ошибок apache, которые, я думаю, в любом случае не будут очень полезны.

Я установил memory_limit PHP для 2048M и max_execution_time в 999. Хотя я не знаю, подействовали ли они. Я думаю, что они на самом деле не имеют значения, потому что я чувствую, что DomPDF не истекает по времени или не хватает памяти. Ошибка 500 появляется всего через 10 секунд после запроса страницы, когда я пытаюсь создать PDF-файл с меньшим количеством страниц, сценарий занимает больше времени (12-15 секунд), но завершается успешно.

У меня есть файл HTML размером 72.3 КБ, содержащий только одну небольшую таблицу HTML. (На самом деле удаление страницы с таблицей никак не решает проблему.) В результате в PDF должно получиться около 35 страниц.

После много-много копаний я обнаружил, что ошибка возникает на 30–31-й странице, в следующей строке кода в page_frame_reflower.cls.php внутри reflow функция:

  // Render the page
  $this->_frame->get_renderer()->render($child);

После появления echoИНГ memory_get_usage на каждом цикле (странице) значение остается довольно постоянным, кажется, менее 5% доступной памяти.

. get_class on $this->_frame->get_renderer() Я смог определить, что проблемная функция Renderer::render().

К сожалению, у меня нет простого способа продолжить отладку с помощью моих текущих методов. Метод Renderer::render() не позволит мне добавить переменную счетчика в параметры, потому что она должна быть совместима с родительской функцией.

У кого-нибудь есть какая-либо помощь для меня, вы видите что-то, что мне не хватает — можете ли вы указать мне правильное направление для исправления этих 500 ошибок?

Редактировать: Я удалил все случаи использования встроенного PHP из HTML-документа, и, похоже, это ничего не изменило.

Редактировать 2: Документ был слишком большим, чтобы его полностью пропустить через Tidy, но до 50000 байт ошибок не было.

Редактировать 3: Регистрация ошибок PHP включена. Я могу генерировать ошибки, вызывая неправильные имена методов и другие вещи. Эти ошибки появляются на экране. На самом деле, даже когда я вызываю бесконечный цикл перед проблемным методом, я получаю ошибки максимального времени выполнения PHP, выведенные на экран. Однако проблемная область показывает страницу 500 Internal Server Error.

Редактировать 4: Я удалил весь мой CSS, и PDF был сгенерирован без стилей. Теперь мы получаем где-то. Я постепенно добавлю CSS обратно и смогу сузить код проблемы. Спасибо, @Liv.

Редактировать 5: Я сузил CSS до корня проблемы: правила h1. Я использовал фоновое изображение для тегов h1. Итак, из моей первоначальной проблемы все, что мне нужно было сделать, это удалить фоновые изображения из тега h1, чтобы PDF-файл работал правильно. Является ли работа с большим количеством элементов с фоновыми изображениями проблемой для DomPDF?

Редактировать 6: Вот HTML-файл: http://www.pickering-mcaloon.com/wp-content/uploads/2013/03/test2.html Мне пришлось удалить содержимое (не мое). Я протестировал эту версию HTML с помощью DomPDF и получил ошибку сервера 500. Мое изображение заголовка составляет 25.1 КБ. Следует отметить, что нижний колонтитул каждой страницы также использует фоновое изображение, и это работает нормально. В этой копии HTML удаление 1 раздела «Глава» позволило DomPDF завершить создание PDF-файла.

Редактировать 7: Когда я впервые столкнулся с проблемой, я использовал memory_get_usage и в верхней части петли, где Renderer::render() называется, каждый раз он показывал немного другое использование, но менее 6% от максимального, которое было установлено на 2048M. Я не думаю, что эта проблема связана с ошибкой тайм-аута или ошибкой памяти, потому что я могу создавать эти типы ошибок до вызова render и вывести ошибки PHP на экран. Кроме того, ошибка 500 появляется примерно через 10 секунд выполнения — Когда PDF работает, это занимает около 15-20 секунд. Так что тайм-аут маловероятен. Ошибки памяти, возможно, но если да, то почему бы не вывести ошибку, как это происходит, если память переполняется до вызова render.

Редактировать 8: Я преобразовал изображение, которое использовал в качестве фонового изображения для тегов h1, в JPG из PNG, что уменьшило его размер с 25.1 КБ до 2.6 КБ, а PDF-файл был сгенерирован правильно. Скорее всего это проблема с памятью. PHP должен сгенерировать ошибку и показать ее мне, но это не так.

dompdf не может создать pdf-файл со страницы моего веб-сайта. Тем не менее, я сохранил страницу и загрузил ее как простой статический html-файл, и он сработал!

Итак, я не знаю, связана ли проблема с URL-адресом или что-то еще. Это ошибка, которую я получаю:

  • Как сделать DOMPDF поддержкой шрифта unicode шаг за шагом?
  • Создание PDF с помощью CodeIgniter
  • Как предоставить справочную информацию в формате pdf от dompdf?
  • Проблема DOMPDF с кириллическими символами
  • dompdf не загружается

Предупреждение: require_once (/home/o110334/public_html/dompdf/include/firephp.cls.php) [function.require-once]: не удалось открыть поток: нет такого файла или каталога в / home / o110334 / public_html / dompdf / dompdf_config .inc.php on line 194

Неустранимая ошибка: require_once () [function.require]: Не удалось выполнить открытие ‘/home/o110334/public_html/dompdf/include/firephp.cls.php’ (include_path = ‘.: / Usr / lib / php: / usr / local / lib / php ‘) в /home/o110334/public_html/dompdf/dompdf_config.inc.php в строке 194

Это код:

$file = "admin/store/orders/45/invoice/print"; // doesn't work //$file = "invoice_sample2.html"; //it works (same web page, but stored in a html file) $dompdf = new DOMPDF(); $dompdf->load_html_file($file); $dompdf->render(); $dompdf->stream("sample.pdf"); 
  • как преобразовать динамический php-файл в pdf?
  • как конвертировать несколько html-файлов с помощью Dompdf?
  • dompdf — текст на одной странице / page_script не работает
  • как исправить Неопределенная переменная: коллабораторы в domPDF в Laravel
  • Отображение pdf-файла из arraybuffer

DOMPDF пытается использовать все виды вещей / eval при работе на локальном компьютере, вам лучше попробовать:

1) (предоставленный, длинный путь) запроса HTML по http:

 $dompdf->load_html_file('http://yourdomain.ext/'.$file); 

2) Не позволяйте DOMPDF eval но использовать собственную буферизацию, и DOMPDF загружает итоговую строку HTML.

 <?php ob_start(); //be sure this file exists, and works outside of web context etc.) require("admin/store/orders/45/invoice/print"); $dompdf = new DOMPDF(); $dompdf->load_html(ob_get_clean()); $dompdf->render(); ?> 

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Dixell xc650c ошибка а14
  • Dism error 112
  • Diskpart проверка диска на ошибки
  • Diskcryptor error code 4
  • Discord error 1105

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии