Intereting Posts
Текстовое поле скрывается после нажатия кнопки отмены Функции WSDL с тем же именем. Как выбрать один? Как проверить, является ли идентификатор часового пояса действительным из кода? Использование HTML-кода для размещения 1 или 0 в таблице MySQL Лучший способ реализовать Single-Sign-On со всеми основными поставщиками? jQuery Загрузка содержимого Div с текущей страницы на другую страницу Как предотвратить перезагрузку файла phpstorm без подсказки при изменении файла на диске? Написание хинди-шрифтов с библиотекой GD не представляется желательным Почему этот код не просто печатает буквы от A до Z? Как избавиться от ошибки MySQL «Подготовленная заявка должна быть переработана» CakePhp 3.x Продолжить сеанс из приложения Doctrine 2: обновить запрос с помощью построителя запросов PHP print () Арабская строка Вызов неопределенного метода DOMDocument :: getElementsByClassName () PHP cURL: HTTP-заголовки показывают 302 и файлы cookie, файлы cookie сохраняются и отправляются, появляются одни и те же заголовки?

Странная ошибка с использованием PHP Simple HTML DOM parser

Я использую эту библиотеку (PHP Simple HTML DOM parser), чтобы разобрать ссылку, вот код:

function getSemanticRelevantKeywords($keyword){ $results = array(); $html = file_get_html("http://www.semager.de/api/keyword.php?q=". urlencode($keyword) ."&lang=de&out=html&count=2&threshold="); foreach($html->find('span') as $e){ $results[] = $e->plaintext; } return $results; } 

но я получаю эту ошибку, когда выводю результаты:

Неустранимая ошибка: вызов функции-члена функции () для не-объекта в /var/www/vhosts/efamous.de/subdomains/sandbox/httpdocs/getNewTrusts.php в строке 25

(строка 25 – это цикл foreach), странно, что он выводит все (по крайней мере, на первый взгляд) правильно, но я все еще получаю эту ошибку и не могу понять, почему.

Эта ошибка обычно означает, что $ html не является объектом.

Странно, что вы говорите, что это работает. Что произойдет, если вы выведете $ html? Я бы предположил, что URL недоступен и что $ html имеет значение null.

Edit: Похоже, это может быть ошибкой в ​​синтаксическом анализаторе. Кто-то отправил ошибку и добавил чек в свой код в качестве обходного пути.

Причиной этой ошибки является то, что простой HTML DOM не возвращает объект, если размер ответа от url превышает 600000.
Вы можете аннулировать его, изменив файл simple_html_dom.php . Удалите strlen($contents) > MAX_FILE_SIZE из условия if функции file_get_html .
Это решит вашу проблему.

Вам просто нужно увеличить CONSTANT MAX_FILE_SIZE в файле simple_html_dom.php .

Например:

 define('MAX_FILE_SIZE', 999999999999999); 

Для тех, кто прибыл сюда через поисковую систему (как и я), после прочтения информации (и связанного отчета об ошибке) выше, я начал подкачку кода и в итоге исправил свои проблемы с помощью двух дополнительных проверок после загрузки dom;

 $html = file_get_html('<your url here>'); // first check if $html->find exists if (method_exists($html,"find")) { // then check if the html element exists to avoid trying to parse non-html if ($html->find('html')) { // and only then start searching (and manipulating) the dom } } 

Перед методом file_get_html/load_file вы должны сначала проверить, существует ли URL-адрес.

Если URL существует, вы проходите один шаг.
(Некоторые серверы, обслуживают 404 страницу действительной HTML-страницей, которая имеет соответствующую структуру HTML-страницы, такую ​​как тело, голова и т. Д. Но у нее есть только текст «Эта страница не может найти». 404 error bla bla ..)

Если URL-адрес 200-OK, вы должны проверить, является ли выбранная вещь объектом и установлены ли узлы.

Это код, который я использовал на своих страницах.

 function url_exists($url){ if ((strpos($url, "http")) === false) $url = "http://" . $url; $headers = @get_headers($url); // print_r($headers); if (is_array($headers)){ if(strpos($headers[0], '404 Not Found')) return false; else return true; } else return false; } $pageAddress='http://www.google.com'; if ( url_exists($pageAddress) ) { $htmlPage->load_file( $pageAddress ); } else { echo 'url doesn t exist, i stop'; return; } if( $htmlPage && is_object($htmlPage) && isset($htmlPage->nodes) ) { // do your work here... } else { echo 'fetched page is not ok, i stop'; return; } 

У меня такая же ошибка возникает в моих журналах, и, кроме упомянутых выше решений, также может быть, что в документе нет «span». Я получаю ту же ошибку при поиске divs с определенным классом, который не существует на странице, но при поиске чего-то, что я знаю, существует на странице, ошибка не появляется.

ваш сценарий в порядке. Я получаю эту ошибку, когда она не находит элемент, который я ищу на этой странице.

В вашем случае проверьте, имеет ли страница, к которой вы обращаетесь, элемент «SPAN»

Простейшее решение этой проблемы

 if ($html = file_get_html("http://www.semager.de/api/keyword.php?q=". urlencode($keyword) ."&lang=de&out=html&count=2&threshold=") { } else { // do something else because couldn't find html } 

Ошибка означает, что функция find () еще не определена или недоступна. Убедитесь, что вы загрузили или включили связанную функцию.