@vlad1753

Проблема с функцией find в библиотеке simple_html_dom_php. Что делать?

Написал однопоточный парсер...
Использую simple_html_dom_php исключительно ради функции find.
Парсер вроде работает, но часто абсолютно в рандомных местах возникает ошибка:

Fatal error: Uncaught Error: Call to a member function find() on boolean in G:\OSPanel\domains\GDZ2\parser_long.php:177 Stack trace: #0 {main} thrown in G:\OSPanel\domains\GDZ2\parser_long.php on line 177

Вот кусочек кода где я юзаю эту функцию:
foreach ($numbers_page as $key3 => $numbers_data) {
				$num_link = $numbers_data->href;
				$num_text = $numbers_data->innertext;
				$html_num = get_html($num_link);
				$img_hhh = $html_num->find('.in p img');
				//Скачать картинку
				foreach ($img_hhh as $key4 => $img) {
					$file_stream = file_get_contents($img->src);
					$link_img_num_arr = explode('/', $img->src);
				    $img_name_numbers =  $link_img_num_arr[8];
				    echo $img_name_numbers.'<br>';
				    $book_src_for_num = "Images/gdz/form".$data_books['form']."/".$subjekts_arr[$data_books['subject']]."/".$name."/numbers/";
				    echo $book_src_for_num;
				    file_put_contents($book_src_for_num.$img_name_numbers, $file_stream);
				    $img_for_BD = $book_src_for_num.$img_name_numbers;

				    $num = $for_num.'('.$num_text.')';
				    $sql_num = "INSERT INTO `numbers_book` (newid,id,num,img) VALUES('$newid_num','$newid_topick','$num', '$img_for_BD')";
							  if(mysqli_query($connection, $sql_num)){
							  	echo "Отправлено<br>";
							  }else{
							  	echo 'Ошибка! '.mysqli_error($connection)."<br>";
								
							  }
					$newid_num++;
				     }
				    

				}

Подскажите изза чего так случается...
  • Вопрос задан
  • 201 просмотр
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Call to a member function find() on boolean
Значит вы пытаетесь вызывать функцию find() у логического значения. Поскольку вызов есть только в одном месте ($html_num->find(...)), то значит в переменной $html_num у вас либо true, либо, гораздо более вероятно, false. Это значение попадает туда при вызове функции get_html(). Это не стандартная функция PHP, значит смотрите свои исходники и думайте, при каких условиях она возвращает логическое значение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы