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

Статус
В этой теме нельзя размещать новые ответы.

poikl

Профессор
Регистрация
7 Ноя 2006
Сообщения
164
Реакции
38
вот сайт с картинкой

дело в том что по первой ссылке картинка видна а по второй нет как можно скачать такую картинку подскажите ?
 
Попробуй сделать запрос через сокеты с подстановкой реферера
 
через сокеты это для начинающего может и сложновато
попробуй curl

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

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

$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
if($ref!='') curl_setopt($ch, CURLOPT_REFERER, $ref);
if($header!='') curl_setopt($ch, CURLOPT_HEADER, 1);
if($post!='') { curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); }
if($cookie!='') curl_setopt($ch, CURLOPT_COOKIE, $cookie);
if($cookiefile!='') { curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile); }
if($proxy!='') curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if($timeout!='') curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  
      $i=0;
      do {
      $i++;
      print '<!---->'; flush(); 
      $content = curl_exec ($ch);
      } while($i<$popitok && $content=='' || curl_errno($ch)!=0 && $i<$popitok);

  if(curl_errno($ch)!=0 || $content=='') {
  curl_close ($ch);
  return false; 
  } else {
  curl_close ($ch);
  return $content; 
  }
}
 
в твою функцию подставил реффер и все заработало :)
 
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($fsock, 8192);
		}
				
		@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_data, strlen($file_data) - $file_filesize, $file_filesize);
			$tmp_path = ( !@$ini_val('safe_mode') ) ? '/tmp' : './' . $to_dir . '/tmp';
			$tmp_filename = tempnam($tmp_path, uniqid(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 > 0 && $height > 0)
	{
		$new_filename = uniqid(rand()) . $imgtype;
   
	    @copy($tmp_filename, './' . $to_dir . "/$new_filename");
	    @unlink($tmp_filename);

	    return true;
	}
	else
	{
	  return false;
	}
	   
}
 
Код:
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
Подскажите как вытащить картинку из странички

Подскажите как вытащить картинку из странички
получаю к примеру циклом новость, в новости есть картинка.
Например есть ссылка в тексте


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

:ah:
 
Подскажите как вытащить картинку из странички
получаю к примеру циклом новость, в новости есть картинка.
Например есть ссылка в тексте
*** скрытое содержание ***

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

:ah:
вот так в тру_урл получишь ссылку на картинку
PHP:
$url='адрес твоей картинки';
$a=explode('.gif',$url);
$true_url=str_replace('<img src="','',$a[0]).'.gif';

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

а далее варианты выше в ветке есть разнообразные как выдергивать с сервера

Картинку я уже получил с текстом
задача сохранить ее в папку
и изменить урл .
Тоесть тот урл где я взял картинку на папку.
Ну это я думаю получиться сделать. Но вот как мне ее скачать

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

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;
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху