скачать картинку через пхп

Тема в разделе "PHP", создана пользователем poikl, 29 май 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. poikl

    poikl

    Регистр.:
    7 ноя 2006
    Сообщения:
    164
    Симпатии:
    31
    вот сайт с картинкой
    http://tfile.ru/forum/viewtopic.php?t=155200
    и сама картинка
    http://img.tfile.ru/img/2008_05/i4837094843776.jpg
    дело в том что по первой ссылке картинка видна а по второй нет как можно скачать такую картинку подскажите ?
     
  2. Kaimi

    Kaimi

    Регистр.:
    28 окт 2007
    Сообщения:
    257
    Симпатии:
    253
    Попробуй сделать запрос через сокеты с подстановкой реферера
     
    poikl нравится это.
  3. sasha181

    sasha181 Постоялец

    Регистр.:
    18 апр 2007
    Сообщения:
    100
    Симпатии:
    25
    через сокеты это для начинающего может и сложновато
    попробуй curl

    я для себя вот такую функцию сделал для удобства
    в ней в принципе должно быть всё понятно

    PHP:
    function get_url($url,$ref='',$header='',$post='',$cookie='',$cookiefile='',$proxy='',$timeout='',$popitok=2) {

    $ch=curl_init();
    curl_setopt($chCURLOPT_URL$url);
    if(
    $ref!=''curl_setopt($chCURLOPT_REFERER$ref);
    if(
    $header!=''curl_setopt($chCURLOPT_HEADER1);
    if(
    $post!='') { curl_setopt($chCURLOPT_POST1);
    curl_setopt($chCURLOPT_POSTFIELDS$post); }
    if(
    $cookie!=''curl_setopt($chCURLOPT_COOKIE$cookie);
    if(
    $cookiefile!='') { curl_setopt($chCURLOPT_COOKIEJAR$cookiefile);
    curl_setopt($chCURLOPT_COOKIEFILE$cookiefile); }
    if(
    $proxy!=''curl_setopt($chCURLOPT_PROXY$proxy);
    curl_setopt($chCURLOPT_USERAGENT'Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)');
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    if(
    $timeout!=''curl_setopt($chCURLOPT_TIMEOUT$timeout);
      
          
    $i=0;
          do {
          
    $i++;
          print 
    '<!---->'flush(); 
          
    $content curl_exec ($ch);
          } while(
    $i<$popitok && $content=='' || curl_errno($ch)!=&& $i<$popitok);

      if(
    curl_errno($ch)!=|| $content=='') {
      
    curl_close ($ch);
      return 
    false
      } else {
      
    curl_close ($ch);
      return 
    $content
      }
    }
     
    poikl нравится это.
  4. poikl

    poikl

    Регистр.:
    7 ноя 2006
    Сообщения:
    164
    Симпатии:
    31
    в твою функцию подставил реффер и все заработало :)
     
  5. edson

    edson Прохожие

    PHP:
    function file_remote_upload($filename_url,$to_dir)
    {
        
    $ini_val = ( @phpversion() >= '4.0.0' ) ? 'ini_get' 'get_cfg_var';
        
        if (
    preg_match('/^(http:\/\/)?([\w\-\.]+)\:?([0-9]*)\/(.*)$/'$filename_url$url_ary) )
        {
            if ( empty(
    $url_ary[4]) )
            {
                return 
    false;
            }

            
    $base_get '/' $url_ary[4];
            
    $port = ( !empty($url_ary[3]) ) ? $url_ary[3] : 80;

            if ( !(
    $fsock = @fsockopen($url_ary[2], $port$errno$errstr)) )
            {
                return 
    false;
            }

            @
    fputs($fsock"GET $base_get HTTP/1.1\r\n");
            @
    fputs($fsock"HOST: " $url_ary[2] . "\r\n");
            @
    fputs($fsock"Connection: close\r\n\r\n");

            unset(
    $file_data);
            while( !@
    feof($fsock) )
            {
                
    $file_data .= @fread($fsock8192);
            }
                    
            @
    fclose($fsock);

            if (!
    preg_match('#Content-Length\: ([0-9]+)[^ /][\s]+#i'$file_data$file_data1) || !preg_match('#Content-Type\: image/[x\-]*([a-z]+)[\s]+#i'$file_data$file_data2))
            {
                return 
    false;
            }

            
    $file_filesize $file_data1[1]; 
            
    $file_filetype $file_data2[1]; 


            if (
    $file_filesize 0)
            {
                
    $file_data substr($file_datastrlen($file_data) - $file_filesize$file_filesize);
                
    $tmp_path = ( !@$ini_val('safe_mode') ) ? '/tmp' './' $to_dir '/tmp';
                
    $tmp_filename tempnam($tmp_pathuniqid(rand()) . '-');

                
    $fptr = @fopen($tmp_filename'wb');
                
    $bytes_written = @fwrite($fptr$file_data$file_filesize);
                @
    fclose($fptr);
     
                if ( 
    $bytes_written != $file_filesize )
                {
                    @
    unlink($tmp_filename);
                    return 
    'Could not write file to local storage. Please contact the board administrator with this message';
                }
            }
          list(
    $width$height) = @getimagesize($tmp_filename);    
        }

        if ( !(
    $imgtype check_image_type($file_filetype)) )
        {
            return 
    false;
        }

        if ( 
    $width && $height 0)
        {
            
    $new_filename uniqid(rand()) . $imgtype;
       
            @
    copy($tmp_filename'./' $to_dir "/$new_filename");
            @
    unlink($tmp_filename);

            return 
    true;
        }
        else
        {
          return 
    false;
        }
           
    }
     
  6. Evgen_XXX

    Evgen_XXX Создатель

    Регистр.:
    8 май 2008
    Сообщения:
    12
    Симпатии:
    1
    Код:
    function get_images($url, $image_dir, $image_name)
    {
    	$image_name++; 
    	$savefile = $image_dir ."/". $image_name  . ".jpg";
    
    	$ch = curl_init ($url);
    	$fp = fopen ( $savefile, "wb");
    	if (!$fp)
    		write_log('Не удалось открыть файл для сохранения изображения ' . $url);
    	curl_setopt ($ch, CURLOPT_FILE, $fp); 
    	curl_setopt ($ch, CURLOPT_HEADER, 0);
    	curl_exec ($ch);
    	curl_close ($ch);
    	fclose ($fp);
    }
     
    Alix нравится это.
  7. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
  8. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    Подскажите как вытащить картинку из странички

    Подскажите как вытащить картинку из странички
    получаю к примеру циклом новость, в новости есть картинка.
    Например есть ссылка в тексте
    <img src="http://images.com/pict/id/1095652_20080906150758.gif" width="158" height="118" style="border: 1px solid black" alt="888"></a>

    Мне нужно скачать картинку по ссылке
    взять от img src= и до .gif
    и положить в папку images
    туплю чето

    :ah:
     
  9. megadude

    megadude

    Регистр.:
    6 сен 2006
    Сообщения:
    184
    Симпатии:
    65
    вот так в тру_урл получишь ссылку на картинку
    PHP:
    $url='адрес твоей картинки';
    $a=explode('.gif',$url);
    $true_url=str_replace('<img src="','',$a[0]).'.gif';
    а далее варианты выше в ветке есть разнообразные как выдергивать с сервера
     
    асс нравится это.
  10. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    Картинку я уже получил с текстом
    задача сохранить ее в папку
    и изменить урл .
    Тоесть тот урл где я взял картинку на папку.
    Ну это я думаю получиться сделать. Но вот как мне ее скачать

    вот смотрите примерный код

    PHP:
     $str file_get_contents('http://news.сайт');
     
    $arr explode('разбиваем по этому тегу',$str);
    //запускаем в цикл  чтоб  брать   несколько новостей
      
    for($i=1;$i<=6;$i++) {
        @
    $tmp $arr[$i];
        
    $tmp substr($tmp,strpos($tmp,' ')+0);
    //теперь из всего  контента страницы берем нужное между тегами <div class="maintext">  и <p style="clear: both">
             
    preg_match('/<div class="maintext">.*?<p style="clear: both">/is'$tmp $tmp );

    //контент получен.  в контенте имеется картинка.
    // как ее сохранить  с последующим показом в этой же
     //новости?
              
    print  $tmp;
     
Статус темы:
Закрыта.