簡體   English   中英

CURL PHP 試圖獲取非對象的屬性

[英]CURL PHP Trying to get property of non-object

我正在嘗試使用簡單的 html dom 解析通過 CURL 獲得的 html 輸出,但出現此錯誤:

試圖獲取非對象的屬性“內部文本”

這是相關代碼:

$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;

輸出變量是我從 CURL 獲得的以文本形式收集的 HTML。

更新答案

$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;
}

或者,訪問索引0 (第一個元素):

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

舊答案

curl_exec()默認返回一個boolean

您需要在 curlopts 中設置CURLOPT_RETURNTRANSFER ,然后返回預期的字符串(成功時)。

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

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

成功時返回true ,失敗時返回false 但是,如果設置了CURLOPT_RETURNTRANSFER選項,它將在成功時返回結果,在失敗時返回false

從文檔:

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

通過 CSS 選擇器查找子項。 如果設置了索引,則返回第 N 個元素對象,否則返回對象數組。

所以在你的情況下,返回的值保存在 $kungtext_class 中,你在這里的錯誤可能是:

1 - find 調用返回一個數組,所以你必須這樣做:

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

2- find 調用找不到任何具有kungtext類的元素,因此它返回 null 並且 innertext 拋出 error 是正常的。

如果 find 方法僅從具有kungtext類的 dom 返回一個元素,則您的代碼將正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM