Call to a member function find() on boolean

147
24 января 2021, 08:10

Использую библиотеку simple_html_dom. Считываю csv файл. Далее обращаюсь к колонке этого файла:

while (($info = fgetcsv($a, 0, ";") ) !== false){
    $html = str_get_html(str_replace('\n','', iconv('windows-1251', 'utf-8', $info[5])));
    var_dump($html); exit;

На экран выводится object(simple_html_dom) с контентом.

Убираю строку var_dump($html); exit; и валится:

Notice: Undefined offset: 5 in file.php on line 14

И за ним:

Fatal error: Call to a member function find() on boolean in file.php on line 16

Вот строка 16:

$inline_images = $html->find('img');

Если перед ней ставлю:

var_dump($html->find('img')); exit;

То возвращает пустой массив и никаких ошибок.

Почему так?

Answer 1
  1. Во время ПЕРВОГО прохождения цикла значение которое берётся из массива $info[5], существует, в результате когда Вы вставляете var_dump($html); exit; Вы делаете dump $html переменной и закрываете дальнейшую обработку. Результат: ошибок нет.

    1.1 Что происходит когда данную строку убираете. Начинается цикл заново и после выполнения функции fgetcsv присваивается новый массив в котором нет индекса 5!!! О чём сообщает данная ошибка Notice: Undefined offset: 5 in file.php on line 14

  2. Функция str_get_html после выполнения в качестве результата возвращает false, так как какая-то из функций внутри возвращает данное значение (предположу что iconv не может преобразовать undefined в кодировку!). Результат: $html получает не объект а boolean значение, ну а из данного значения невозможно вызвать метод find() о чём сообщает вторая ошибка.

  3. Причины. Косяк в разбиваемом файле через функцию fgetcsv (предположительно). Решение. Отследить на какой итерации происходит не корректная отработка и поправить файл.
Answer 2
if($html){
  $inline_images = $html->find('a'); 
  echo $inline_images;
}
READ ALSO
Уведомления с сайта в telegramm

Уведомления с сайта в telegramm

Использую onesignal для уведомлений через сайт

235
Отношения Laravel роли и пользователи

Отношения Laravel роли и пользователи

есть таблица ролей - roles

197
Не запускается сервер (Openserver)

Не запускается сервер (Openserver)

При установленном Apache 22 и PHP 5

172
Как вывести список всех таблиц MySQL и количество строк в каждой из них при помощи PHP?

Как вывести список всех таблиц MySQL и количество строк в каждой из них при помощи PHP?

Надо вывести список всех таблиц и чтобы рядом стояло количество строк в этой таблицеВыводится только список таблиц, а количество строк - нет

169