У вас есть два варианта.В вашем вызове load()
используйте оператор контроля ошибок @
, например, @$dom->load()
, который несколько медленный, потому что глобально изменяет значение display_errors на off, выполняет функцию и снова устанавливает ее на.
Другой вариант, который я лично предпочитаю (я ненавижу оператор @
, я не могу видеть его в своем коде), это сохранить старое значение libxml_use_internal_errors , включить его с помощью libxml_use_internal_errors(TRUE)
, вызвать функцию, очистить буфер ошибок и восстановить старое значение.Вот фрагмент из моего кода, который делает это:
<?php
$previous_value = libxml_use_internal_errors(TRUE);
$doc->loadHTML((string)$e->response->getBody());
libxml_clear_errors();
libxml_use_internal_errors($previous_value);
Я пока не могу комментировать ответы, поэтому напишу здесь:
- Решение от Michael делает его меньшестрогий, но он все равно выдаст предупреждения для некоторых ошибок:
nadav@shesek:~$ php -r '$dom=new DOMDocument; $dom->strictErrorChecking = FALSE ; $dom->loadHTML("<xy></zx>");'
PHP Warning: DOMDocument::loadHTML(): Tag xy invalid in Entity, line: 1 in Command line code on line 1
- НЕ ДЕЛАЙТЕ того, что предложил Фрэн Верона - глобальное отключение отчетов об ошибках - это то, что вы никогда не должны делать.На производстве установите свой собственный обработчик ошибок и отобразите более красивое сообщение для пользователя, а также убедитесь, что ошибка где-то зарегистрирована, но никогда не отключайте ее полностью.Установка для error_reporting значения 0 также приведет к тому, что PHP также отключит ведение журнала ошибок.
- Решение Xeon06 проблематично, поскольку вы выполняете весь обработчик ошибок сценария для определенного фрагмента кода.Использование собственного обработчика ошибок, который просто игнорирует ошибку, вызывает те же проблемы, что и решение Фрэн.