[英]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.