繁体   English   中英

PHP致命错误:在非对象上调用成员函数hasAttribute()

[英]PHP Fatal error: Call to a member function hasAttribute() on a non-object

尝试获取siteadvisor.com评级时,第18行出现错误。 错误消息显示"PHP Fatal error: Call to a member function hasAttribute() on a non-object" 我已经包含了用于获取siteadvisor.com评级的完整 php代码。

public function getSiteAdvisor($domain)
{
    try
    {
        $callback_url = "http://www.siteadvisor.com/sites/" . $domain;

        $curl_response = $this->curl->get($callback_url);

        if ($curl_response->headers['Status-Code'] == "200") {

            libxml_use_internal_errors(TRUE);
            $this->dom_doc->loadHTML($curl_response);
            libxml_use_internal_errors(FALSE);

            $xpath = new DOMXPath($this->dom_doc);
            $tmp = $xpath->query('/html/body//div[@id="siteVerdict"]//img')->item(0);

            if ($tmp->hasAttribute('src')) {

                $tmp = $tmp->getAttribute('src');

                if (stripos($tmp, "green") !== false) {
                    $siteadvisor_rating = 1;
                } elseif (stripos($tmp, "yellow") !== false) {
                    $siteadvisor_rating = 2;
                } elseif (stripos($tmp, "red") !== false) {
                    $siteadvisor_rating = 3;
                } else {
                    $siteadvisor_rating = 0;
                }

            } else {
                $siteadvisor_rating = 0;
            }

        } else {
            $siteadvisor_rating = 0;
        }

        $response = array(
            'status' => 'success',
            'data' => array(
                'siteadvisor' => (int)$siteadvisor_rating
            )
        );
    }
    catch (Exception $e)
    {
        $response = array(
            'status' => 'error',
            'msg' => $e->getMessage()
        );
    }
    return $response;       
}

我认为您在xpath查询上遇到了问题(就像Gordon所说的那样):,而是将alt=""属性作为目标。

$domain = 'google.com';
$callback_url = "http://www.siteadvisor.com/sites/" . $domain;
// i know you know what do to just you can just adjust this
$curl_response = file_get_contents($callback_url);
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($curl_response);
libxml_use_internal_errors(true);
$xpath = new DOMXpath($dom);

$siteadvisor_rating = null;
$img_rating = $xpath->query('//div[@id="siteVerdict"]/div/img');

    if($img_rating->length > 0) {
    // haystack
    if($img_rating->item(0)->hasAttribute('alt')) {
        $img_rating = $img_rating->item(0)->getAttribute('alt');
    } elseif ($img->item(0)->hasAttribute('src')) {
        $img_rating = $img_rating->item(0)->getAttribute('src');
    }

    if(stripos($img_rating, 'green') !== false) {
        $siteadvisor_rating = 1;
    } elseif(stripos($img_rating, '') !== false) {
        $siteadvisor_rating = 2;
    } elseif(stripos($img_rating, 'red') !== false) {
        $siteadvisor_rating = 3;
    } else {
        $siteadvisor_rating = 0;
    }

    echo $siteadvisor_rating; // should be 1 for google :)
}

else {
    // no node is found
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM