0

伙计们,我的代码是:

<?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

请问有什么帮助吗?

4

2 回答 2

1

有错误信息说明了一切。

手册

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

你不能在课堂之外使用它。看起来该代码是从一个类中剪切和粘贴的,如果不先修改就无法工作。

于 2013-05-25T13:32:41.600 回答
1

问题出在这一行

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

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

于 2013-05-25T13:57:51.430 回答