2013-05-25 3 views
0

Так, ребята, мой код для этого:Получить наибольшее изображение из URL с PHP

<?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); 
      } 
     } 
    } 
} 
?> 

У меня возникли проблемы с: Фатальная ошибка: Использование $ это, когда не в контексте объекта в C: \ xampp \ htdocs \ sandbox \ agregat \ test.php в строке 11

Любая помощь пожалуйста?

ответ

1

Проблема заключается в этой строке

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

Вы используете $ эту ссылку на объект, который не существует. $ это может использоваться только внутри класса и имеет отношение к текущему объекту. Вы можете обернуть код классом, и вам также необходимо предоставить InternetCombineUrl. Другое решение - удалить $ this->, но тогда вам нужно создать функцию InternetCombineUrl, и она тоже будет работать.

+0

Я сделал это, спасибо, отлично работает! –

+0

Добро пожаловать, вы можете прочитать больше на http://php.net/manual/en/language.oop5.basic.php – Robert

1

В этом сообщении об ошибке говорится все.

От the manual:

The pseudo-variable $this is available when a method is called from within an object context. $this is a reference to the calling object (usually the object to which the method belongs, but possibly another object, if the method is called statically from the context of a secondary object).

Вы не можете использовать его вне класса. Похоже, что этот код был вырезан & паста из класса, который просто не будет работать без изменения в первую очередь.

+0

Итак, если я правильно понимаю, foreach может войти в функцию, которая завернута в класс, а затем я могу вызвать эту функцию извне класса? $ это должно работать тогда, потому что оно будет ссылаться в контексте объекта? –

+0

Скопируйте функцию InternetCombineUrl() вне класса, который у вас есть, и используйте его как отдельную функцию, без $ this (так как вы не внутри класса) –

+0

Я сделал это, спасибо, отлично работает! –

Смежные вопросы