simple_html_dom: вызов функции-члена find() для необъекта в

Этот код работал хорошо в течение нескольких месяцев. Вывод состоял из нескольких строк, содержащих статистику для данного имени пользователя. Веб-сайт, с которого взята html-страница, не отключен, и содержимое страницы в file_get_html не изменилось. Внезапно (я проверял, никто не модифицировал) он перестал работать. Вот соответствующая часть:

[...]if ($FileAge > ($expiretime * 60) || 0 == filesize($cachename))
{
    include_once('simple_html_dom.php');
    $html = file_get_html('http://www.foo.com/search?what=user%3A'.YOUR_USER.'&search=Search');
    var_dump($html); //TEST
    $link = $html->find('.likeh4 lightGrey.', 0)->find('a', 0)->href;   // Get the last activity link
[...]

В журнале ошибок написано:

[02-Feb-2013 17:02:19 Europe/Berlin] PHP Fatal error:  Call to a member function find() on a non-object in /foo.php on line 22 (the line with $link).

var_dump($html) дает bool(false)

У меня есть аналогичный скрипт, который анализирует html-страницу с другого сайта. Тоже перестал работать.

[...]include_once('simple_html_dom.php');
$html = file_get_html('http://my.flightmemory.com/'.FLIGHTMEMORY_USER);
$chilometri_table = $html->find('table', 2);    [...]

Я попытался сохранить на своем веб-сервере одну из этих html-страниц, и я не получаю такой ошибки. Мой хост отключил некоторые функции php из соображений безопасности? (на самом деле, file_get_html исходит из simple_html_dom, а не из собственных функций php)

Любые подсказки? Спасибо


person flapane    schedule 02.02.2013    source источник


Ответы (2)


Возможно, уже слишком поздно, но:
Simple_html_dom имеет константу для проверки заданного размера html - MAX_FILE_SIZE. по умолчанию это 600 КБ. Этого достаточно для большинства случаев, но если ваш данный html больше этого, он завершится ошибкой и вернет false и вызовет эту фатальную ошибку.

person undone    schedule 09.06.2013

Если вы попытаетесь получить [href], у меня была такая же проблема, и я ее исправил. нужно действительно это simple_html_dom_node

if(is_a($html->find('.likeh4 lightGrey. a', 0),'simple_html_dom_node' )
  $link = $html->find('.likeh4 lightGrey. a', 0)->href;

OR

foreach ( $$html->find('.likeh4 lightGrey. a') as $links ) {
 $link =$links->href;
}
person Seeker313    schedule 28.08.2013