CURL PHP Попытка получить свойство необъекта - PullRequest
1 голос
/ 22 марта 2019

Я пытаюсь проанализировать вывод html, который я получаю через CURL, используя простой html dom, но я получаю эту ошибку:

Попытка получить свойство 'innertext' для необъекта

Это соответствующий код:

$output = curl_exec($ch);

if($output === FALSE) {
    echo "cURL Error: " . curl_error($ch);
}

curl_close($ch);

$html = str_get_html($output);
$kungtext_class = $html->find('div[class=kungtext]');
$kungtext = $kungtext_class->innertext;

echo $kungtext;

Выходная переменная - это собранный HTML в текстовой форме, который я получаю из CURL.

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Обновленный ответ

$kungtext_class дает вам array, вы не можете получить доступ к свойству, потому что вы получаете кучу элементов, а не только один.

См. Документы http://simplehtmldom.sourceforge.net/manual_api.htm

mixed find ( string $selector [, int $index] )

Поиск элементов с помощью селектора CSS.Возвращает N-й элемент объекта, если установлен индекс, в противном случае возвращает массив объекта.

Таким образом, ваш код должен выглядеть как

foreach ($html->find('div[class=kungtext]') as $kungtext_class) {
    echo $kungtext_class->innertext;
}

Или получить доступindex 0 (первый элемент):

$kungtext_class = $html->find('div[class=kungtext]', 0);
$kungtext = $kungtext_class->innertext;

Старый ответ

curl_exec() по умолчанию возвращает boolean.

Вам необходимо установить CURLOPT_RETURNTRANSFER в curlopts, затем он возвращает ожидаемую строку (в случае успеха).

// Before the curl_exec():
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

http://php.net/manual/en/function.curl-exec.php

Возвращает true вклуспех или false при неудаче.Однако, если установлен параметр CURLOPT_RETURNTRANSFER, он вернет результат при успехе, false при ошибке.

0 голосов
/ 22 марта 2019

Из документации:

mixed find ( string $selector [, int $index] )

Найти детей с помощью селектора CSS. Возвращает N-й элемент объекта, если устанавливается индекс, в противном случае возвращает массив объекта.

поэтому в вашем случае возвращаемое значение сохраняется в $ kungtext_class, здесь может быть ошибка:

1 - вызов find возвращает массив, поэтому вы должны сделать это:

foreach($kungtext_class as $element){
     echo $element->innertext;
}

2 - при вызове find не найдено ни одного элемента, имеющего класс kungtext , поэтому он возвращает ноль, и это нормально, что ошибка выброса внутреннего текста.

Ваш код будет работать правильно только в том случае, если метод find возвращает только один элемент из класса dom, имеющий класс kungtext .

...