dompdf работает медленно и выдает ошибку сбоя HTTP-запроса

Я использую dompdf с laravel 5 для создания pdf профиля, но это занимает более 15 минут, а затем показывает ошибку. поток похож на эту страницу открытого профиля в браузере, на странице есть ссылка для загрузки в формате pdf с URL-адресом того же действия (показать профиль) с дополнительным параметром pdf=yes, а затем я использую условие if для проверки вызова pdf

Exception in PDF.php line 219: DOMDocument::loadHTML(): htmlParseEntityRef: no name in Entity, line: 41
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 104
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 110
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 116
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 122
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 128
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 134
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 140
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 145
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 150
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 155
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 160
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 165
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 170
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 177
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 188
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 193
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 211
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 216
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 222
DOMDocument::loadHTML(): ID personal-info-2 already defined in Entity, line: 227
DOMDocument::loadHTML(): Tag footer invalid in Entity, line: 330
DOMDocument::loadHTML(): Unexpected end tag : div in Entity, line: 333
DOMDocument::loadHTML(): Unexpected end tag : div in Entity, line: 334
DOMDocument::loadHTML(): Unexpected end tag : span in Entity, line: 355
DOMDocument::loadHTML(): Unexpected end tag : span in Entity, line: 358
file_get_contents(http://10.0.0.46:2000/front/css/bootstrap.min.css): failed to open stream: HTTP request failed!
Unable to load css file http://10.0.0.46:2000/front/css/bootstrap.min.css
file_get_contents(http://10.0.0.46:2000/front/font-awesome/css/font-awesome.min.css): failed to open stream: HTTP request failed!
Unable to load css file http://10.0.0.46:2000/front/font-awesome/css/font-awesome.min.css
file_get_contents(http://10.0.0.46:2000/front/css/styles.css): failed to open stream: HTTP request failed!
Unable to load css file http://10.0.0.46:2000/front/css/styles.css
file_get_contents(http://10.0.0.46:2000/front/css/custom-style.css): failed to open stream: HTTP request failed!
Unable to load css file http://10.0.0.46:2000/front/css/custom-style.css
file_get_contents(http://10.0.0.46:2000/front/css/custom-mediaqueries.css): failed to open stream: HTTP request failed!
Unable to load css file http://10.0.0.46:2000/front/css/custom-mediaqueries.css
file_get_contents(http://10.0.0.46:2000/front/images/logo.png): failed to open stream: HTTP request failed!
file_get_contents(http://10.0.0.46:2000/front/images/facebook.png): failed to open stream: HTTP request failed!
file_get_contents(http://10.0.0.46:2000/front/images/LinkedIn.png): failed to open stream: HTTP request failed!
file_get_contents(http://10.0.0.46:2000/front/images/Pinterest.png): failed to open stream: HTTP request failed!
file_get_contents(http://10.0.0.46:2000/front/images/Twitter.png): failed to open stream: HTTP request failed!
file_get_contents(http://10.0.0.46:2000/front/images/img-not-found.jpg): failed to open stream: HTTP request failed! 

Эта же страница нормально открывается в браузере


person Mr. Tomar    schedule 28.09.2015    source источник
comment
Можете ли вы вставить представление, используемое для создания PDF-файла, а также метод вашего контроллера.   -  person osleonard    schedule 28.09.2015


Ответы (1)


Похоже, у вас настроены уведомления/предупреждения/ошибки PHP для отображения в браузере. Независимо от того, сможет ли dompdf проанализировать ваш документ, вы не получите ожидаемого результата, потому что:

  1. Если буферизация вывода отключена, dompdf откажется от потоковой передачи документа, поскольку заголовки уже отправлены. Это происходит потому, что веб-сервер уже установил тип контента и отправил его в браузер с ошибками PHP. Если dompdf не может изменить тип содержимого на тип PDF MIME, он откажется от потоковой передачи PDF.
  2. Если буферизация вывода включена, dompdf отправит PDF в браузер, но ваши ошибки PHP будут вызваны в потоке вывода и сделают PDF неразборчивым для просмотра PDF.

Итак, вам следует отключить отправку уведомлений в браузер. Если не по вышеуказанным причинам, то потому что это риск раскрытия информации. Если вы хотите, чтобы они были включены, вы должны по крайней мере отключить их при использовании dompdf (например, ini_set('display_errors', false);).

При этом у вас есть некоторые проблемы со структурой вашего документа: повторяющиеся атрибуты ID в элементах, несовпадающие теги открытия/закрытия, нераспознанные элементы. Вы должны запустить сгенерированный HTML-код через валидатор и исправить как можно больше ошибок.

Наконец, ваш внешний ресурс (CSS, изображения) не загружается. Либо URL-адреса неверны, либо для параметра PHP allow_url_fopen установлено значение false.

person BrianS    schedule 09.10.2015