Używam biblioteki o nazwie Simple HTML DOM
Jedna z jego metod, ładuje adres URL do obiektu DOM:
function load_file()
{
$args = func_get_args();
$this->load(call_user_func_array('file_get_contents', $args), true);
// Throw an error if we can't properly load the dom.
if (($error=error_get_last())!==null) {
$this->clear();
return false;
}
}
W celu przetestowania obsługi błędów stworzyłem ten kod:
include_once 'simple_html_dom.php';
function getSimpleHtmlDomLoaded($url)
{
$html = false;
$count = 0;
while ($html === false && ($count < 10)) {
$html = new simple_html_dom();
$html->load_file($url);
if ($html === false) {
echo "Error loading url!\n";
sleep(5);
$count++;
}
}
return $html;
}
$url = "inexistent.html";
getSimpleHtmlDomLoaded($url);
Ideą tego kodu jest ponowna próba załadowania adresu URL, jeśli po 10 próbach nadal się nie powiedzie, powinien zwrócić false.
Wydaje się jednak, że przy nieistniejącym adresie URL metoda load_file nigdy nie zwraca wartości false.
Zamiast tego otrzymuję następujący komunikat ostrzegawczy:
Ostrzeżenie PHP: file_get_contents(inexisten.html): nie udało się otworzyć strumienia
Jakiś pomysł jak to naprawić?
Uwaga: Najlepiej byłoby uniknąć włamywania się do biblioteki.
2 odpowiedzi
Zmień następujący kod:
$html->load_file($url);
if ($html === false) {
Dla tego:
$ret = $html->load_file($url);
if ($ret === false) {
Ponieważ sprawdzałeś instancję obiektu zamiast zwracanej wartości z metody load_file()
.
Dodanie znaku @ przed wywołaniem metody powoduje pominięcie wszelkich ostrzeżeń. Jeśli z tego korzystasz, zawsze sprawdzaj samodzielnie błędy, tak jak teraz, i upewnij się, że nie są dostępne żadne inne metody, aby upewnić się, że nie pojawią się żadne ostrzeżenia i/lub błędy.
Powinieneś sprawdzić rzeczywiste dane, które są zapisane gdzieś przez metodę load(), jeśli to równa się FALSE zamiast instancji obiektu $html.
Podobne pytania
Nowe pytania
php
PHP to szeroko stosowany, wysokopoziomowy, dynamiczny, zorientowany obiektowo i interpretowany język skryptowy przeznaczony głównie do tworzenia stron WWW po stronie serwera. Używane w przypadku pytań dotyczących języka PHP.