使用php从url获取最大的图像

时间:2013-05-25 13:31:28

标签: php image url dom fatal-error

所以伙计们,我的代码是:

<?php
include('simple_html_dom.php');
$url = "http://www.google.si";
$html = file_get_html($url);
$largest_file_size=0;
$largest_file_url='';

// Go through all images of that page
foreach($html->find('img') as $element){
    // Helper function to make absolute URLs from relative
    $img_url=$this->InternetCombineUrl($url,$element->src);
    // Try to get image file size info from header:
    $header=array_change_key_case(get_headers($img_url, 1));
    // Only continue if "200 OK" directly or after first redirect:
    if($header[0]=='HTTP/1.1 200 OK' || @$header[1]=='HTTP/1.1 200 OK'){
        if(!empty($header['content-length'])){
            // If we were redirected, the second entry is the one.
            // See http://us3.php.net/manual/en/function.filesize.php#84130
            if(!empty($header['content-length'][1])){
                $header['content-length']=$header['content-length'][1];
            }
            if($header['content-length']>$largest_file_size){
            $largest_file_size=$header['content-length'];
            $largest_file_url=$img_url;
            }
        }else{ 
            // If no content-length-header is sent, we need to download the image to check the size
            $tmp_filename=sha1($img_url);
            $content = file_get_contents($img_url);
            $handle = fopen(TMP.$tmp_filename, "w");
            fwrite($handle, $content);
            fclose($handle);
            $filesize=filesize(TMP.$tmp_filename);
            if($filesize>$largest_file_size){
            $largest_file_size=$filesize;
            $largest_file_url=$img_url;
            unlink(TMP.$tmp_filename);
            }
        }
    }
}
?>

我遇到问题: 致命错误:在第11行的C:\ xampp \ htdocs \ sandbox \ agregat \ test.php中不在对象上下文中时使用$ this

请帮忙吗?

2 个答案:

答案 0 :(得分:1)

有错误消息说明了一切。

来自the manual

  

当从对象上下文中调用方法时,伪变量$ this可用。 $ this是对调用对象的引用(通常是方法所属的对象,但如果从辅助对象的上下文中静态调用该方法,则可能是另一个对象)。

你不能在课外使用它。看起来代码被切断&amp;从类中粘贴,如果没有先修改就无法工作。

答案 1 :(得分:1)

问题出在这一行

 $img_url=$this->InternetCombineUrl($url,$element->src);

您使用$ this this引用不存在的对象。 $ this只能在类中使用,并且可以对当前对象进行引用。您可以使用类包装代码,还需要提供 InternetCombineUrl 方法。另一个解决方案是删除 $ this-&gt; ,但是您需要创建函数 InternetCombineUrl ,它也可以正常工作。