CURL PHP 试图获得 属性 的非对象
CURL PHP Trying to get property of non-object
我正在尝试使用简单的 html dom 解析通过 CURL 获得的 html 输出,但出现此错误:
Trying to get property 'innertext' of non-object
这是相关代码:
$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 文本形式的变量。
来自文档:
mixed find ( string $selector [, int $index] )
Find children by the CSS selector. Returns the Nth element object if
index is set, otherwise, return an array of object.
所以在你的情况下,returned 值保存在 $kungtext_class 中,你在这里遇到的错误可能是:
1 - 查找调用 return 一个数组,所以你必须这样做:
foreach($kungtext_class as $element){
echo $element->innertext;
}
2- 查找调用找不到任何具有 class kungtext 的元素,因此它 return null 并且 innertext 抛出是正常的错误 。
如果查找方法 return 只有 dom 中具有 class kungtext 的一个元素,您的代码将正常工作。
更新答案
$kungtext_class
给了你一个 array
,你无法访问 属性,因为你得到了一堆元素,而不仅仅是一个。
查看文档 http://simplehtmldom.sourceforge.net/manual_api.htm
mixed find ( string $selector [, int $index] )
Find elements by the CSS selector. Returns the Nth element object if index is set, otherwise return an array of object.
所以你的代码应该是这样的
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()
默认returns一个boolean
.
您需要在 curlopts 中设置 CURLOPT_RETURNTRANSFER
,然后 returns 预期的字符串(成功时)。
// Before the curl_exec():
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
http://php.net/manual/en/function.curl-exec.php
Returns true
on success or false
on failure. However, if the CURLOPT_RETURNTRANSFER
option is set, it will return the result on success, false
on failure.
我正在尝试使用简单的 html dom 解析通过 CURL 获得的 html 输出,但出现此错误:
Trying to get property 'innertext' of non-object
这是相关代码:
$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 文本形式的变量。
来自文档:
mixed find ( string $selector [, int $index] )
Find children by the CSS selector. Returns the Nth element object if index is set, otherwise, return an array of object.
所以在你的情况下,returned 值保存在 $kungtext_class 中,你在这里遇到的错误可能是:
1 - 查找调用 return 一个数组,所以你必须这样做:
foreach($kungtext_class as $element){
echo $element->innertext;
}
2- 查找调用找不到任何具有 class kungtext 的元素,因此它 return null 并且 innertext 抛出是正常的错误 。
如果查找方法 return 只有 dom 中具有 class kungtext 的一个元素,您的代码将正常工作。
更新答案
$kungtext_class
给了你一个 array
,你无法访问 属性,因为你得到了一堆元素,而不仅仅是一个。
查看文档 http://simplehtmldom.sourceforge.net/manual_api.htm
mixed find ( string $selector [, int $index] )
Find elements by the CSS selector. Returns the Nth element object if index is set, otherwise return an array of object.
所以你的代码应该是这样的
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()
默认returns一个boolean
.
您需要在 curlopts 中设置 CURLOPT_RETURNTRANSFER
,然后 returns 预期的字符串(成功时)。
// Before the curl_exec():
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
http://php.net/manual/en/function.curl-exec.php
Returns
true
on success orfalse
on failure. However, if theCURLOPT_RETURNTRANSFER
option is set, it will return the result on success,false
on failure.