Masz dwie możliwości. Użyj operatora kontroli błędu @
w rozmowie load()
, np. @$dom->load()
, który jest nieco powolny, ponieważ globalnie zmienia wartość display_errors na off, wykonuje funkcję i ustawia ją z powrotem na.
Innym rozwiązaniem, które ja osobiście wolę (nienawidzę operatora @
, nie mogę znieść, aby zobaczyć go w moim kodu) znajduje się uratować starą wartość libxml_use_internal_errors, włącz ją za pomocą libxml_use_internal_errors(TRUE)
wywołać funkcję, jasny bufor błędów i przywrócić starą wartość. Oto fragment z mojego kodu, który robi:
<?php
$previous_value = libxml_use_internal_errors(TRUE);
$doc->loadHTML((string)$e->response->getBody());
libxml_clear_errors();
libxml_use_internal_errors($previous_value);
nie mogę wypowiedzieć się na temat odpowiedzi, więc będę pisać tutaj:
- rozwiązanie Michael sprawia, że mniej surowe, ale to ll nadal wydawać ostrzeżenia dla niektórych błędów:
[email protected]:~$ 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
- Nie rób co Fran Verona zasugerował - globalnie wyłączyć błędzie repor Ting to coś, czego nigdy nie powinieneś robić. W trakcie produkcji ustaw własną procedurę obsługi błędów i wyświetl użytkownikowi ładniejszą wiadomość, a następnie upewnij się, że błąd jest gdzieś zalogowany - ale nigdy nie wyłączaj go całkowicie. Ustawienie parametru error_reporting na 0 spowoduje, że PHP będzie również wyłączać rejestrowanie błędów.
- Rozwiązanie Xeon06 jest problematyczne, ponieważ cały proces obsługi błędów skryptu jest wykonywany dla określonego fragmentu kodu. Używanie własnego programu obsługi błędów, który po prostu ignoruje błąd, powoduje takie same problemy, jak rozwiązanie Fran.
prawdopodobny duplikat [spróbuj i złap ostrzeżenie] (http://stackoverflow.com/questions/1241728/try-and-catch-a-warning) (Aby uzyskać szerszą odpowiedź) –