ошибка функции-члена при извлечении данных

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

Примечание. Попытка получить свойство необъекта в E: \ xampp \ htdocs \ test \ merit-list.php в строке 38
Неустранимая ошибка: вызов функции-члена find () для null в E: \ xampp \ htdocs \ test \ merit-list.php в строке 39

Вот мой код

<?php
require('resources/inc/simple_html_dom.php');
$linksrc = 'http://58.65.172.36/Portal/WebSiteUpdates/Achievements.aspx';
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $linksrc,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 3000,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',
));
$file = curl_exec($curl);
$error = curl_error($curl);
curl_close($curl);
$dom = new simple_html_dom();
$dom->load($file);
$doctorDivs = $dom->find("table#Farooq", 0)->children();
$doctors = array();
foreach($doctorDivs as $div){
$doctor = array();

// line 38
$image = $doctor["image"] = $div->find('img', 0)->src;
$details = $div->find('tr', 0)->find("td");
$name = $doctor["name"] = trim($details[1]->plaintext);
$spec = $doctor["desc"] = trim($details[2]->plaintext);

$doctors[] = $doctor;
echo $image;
echo $name;
echo $spec;
}

?>

0

Решение

Проблема в том, что в первой строке таблицы нет <img>потому что это ряд заголовков, так $div->find("img", 0) возвращается null, Вы получаете первую ошибку при попытке доступа null->src,

Вторая ошибка заключается в том, что $div это <tr> элемент. $div->find("tr") ищет детей $divэто не включает $div сам, так что всегда возвращается null, Кроме того, этот код не будет работать в строке заголовка, потому что он содержит <th> скорее, чем <tr> элементы.

Вы можете просто пропустить строку заголовка, введя:

array_shift($doctorDivs);

перед foreach петля. Это удалит первый элемент массива.

И изменить $details к:

$details = $div->find("td");
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector