Как скопировать картинку на localhost из за PROXY

Sandr

Guest
Чегойто я вас не пойму

я написал модуль для PHP-Nuke
есть в нем импорт информации с другого сайта -
и в т.ч. имиджей
если Нюка на прямом канале - то нет проблем
для html
PHP:
         $handle = fopen ($url, "r");
        if( ! $handle ) {
                Echo "<center>"._SHR_OPENERROR."</center>";
           } else {
                while (!feof ($handle)) {
                    $rf .= fgets($handle, 4096);
                    }
                 fclose ($handle);
                 shr_table($rf);
                 }
для картинок
PHP:
       if (!copy($img_url,$path)){
           echo "failed to copy $img_url \n to folder $path";
           exit;
          }
а вот если за проксей
то для html - легко
PHP:
function proxy_url($proxy_url)
{
   $proxy_name = '192.168.0.101';
   $proxy_port = 3128;
   $proxy_cont = '';

   $url= "GET $proxy_url HTTP/1.0\r\nHost: $proxy_name\r\n\r\n";
   $proxy_fp = fsockopen($proxy_name, $proxy_port);
   if (!$proxy_fp)    {return false;}
   fputs($proxy_fp, $url);
   while(!feof($proxy_fp)) {$proxy_cont .= fread($proxy_fp,4096);}
   fclose($proxy_fp);
   $proxy_cont = substr($proxy_cont, strpos($proxy_cont,"\r\n\r\n")+4);
   return $proxy_cont;
}
а для имиджей не работает
PHP:
function proxy_img($get_url,$img_name) {
  $rc["data"] = amazon_getfile($get_url);
  amazon_savefile($img_name, $rc["data"]);
  return true;
}

function amazon_savefile($file, $body) {
  $fp = fopen($file, "wb");
  if (! $fp) return false;
  fwrite($fp, $body);
  fclose ($fp);
  return true;
}

function amazon_getfile($file) {
  $proxy_name = '192.168.0.101';
  $proxy_port = 3128;
  $proxy_cont = '';

  $url= "GET $file HTTP/1.1\r\nHost: $proxy_name\r\n\r\n";
  $fp = fsockopen($proxy_name, $proxy_port);
  if (!$fp) {return false;}
  fputs($fp, $url);
  if (! $fp) return '';
  $body = '';
  while (!feof($fp)) $body .= fread($fp, 4096);
  fclose ($fp);
  return $body;
}
-~{}~ 23.06.05 14:20:

мне удалось получить jpg контент
PHP:
HTTP/1.1 200 OK
Server: Apache/1.3.27 (Unix)
Last-Modified: Sat, 14 Sep 2002 00:42:08 GMT
ETag: "47053b-f88d-3d8285e0"
Accept-Ranges: bytes
Content-Length: 63629
Content-Type: image/jpeg
Date: Thu, 23 Jun 2005 10:05:30 GMT
Connection: close

яШяа..................................и дальше содержимое файла
- но как теперь отрезать HEAD?????
дабы содержимое сохранить в файл
 

Tor

Новичок
по rfc, заголовки от содержания отделяет пустая строка, т.е. "\n\n"
направление понятно?
 

Sandr

Guest
несовсем !
как реализовать - не отрезав лишнего !
 

Tor

Новичок
да, думать современная молодежь отказывается наотрез
ну, держи подачку, если в мануал чего-то не хватает посмотреть
explode
 

Sandr

Guest
ну это мы и так знали - а не поподется ли случаем чтото похожее внутри бинарника -
и как результат не получится массив не из двух а более ключей?
PHP:
  $body = explode("\r\n",$body);
  $num = count($body);
  return trim($body[$num-1]);
-~{}~ 23.06.05 15:19:

так и есть некоторые разбиваются на несколько частей а некоторые нормально
 

nikit87

Новичок
Sandr
смотри в ман по explode. и поймешь как сделать не более 2 элементов в массиве
 

Фанат

oncle terrible
Команда форума
Sandr, у тебя гораздо лучше получается, если ты не бегаешь за каждым чихом на форум, а самостоятельно работаешь.
Я думаю, тебе следует поменьше писать, и побольше читать.
и всё у тебя получится.
 

Sandr

Guest
Кому будет интересно - вот готовый скрипт :)

PHP:
function proxy_img($get_url,$img_name) {
  $rc["data"] = amazon_getfile($get_url);
  amazon_savefile($img_name, $rc["data"]);
  return true;
}

function amazon_savefile($file, $body) {
  $fp = fopen($file, "wb");
  if (! $fp) return false;
  fwrite($fp, $body);
  fclose ($fp);
  return true;
}

function amazon_getfile($file) {
global  $proxy_name, $proxy_port;

  preg_match("/^(http:\/\/)?([^\/]+)/i", $file, $matches);
  $url = $matches[2];
  $out = "GET $file HTTP/1.1\r\n";
  $out .= "Host: $url\r\n";
//  $out .= "Referer: http://$url\r\n";
  $out .= "Content-Type: \r\n";
  $out .= "Connection: close\r\n";
  // terminate headers
  $out .= "\r\n";
  $fp = fsockopen($proxy_name, $proxy_port);
  if (!$fp) {return false;}
  fputs($fp, $out);
  if (! $fp) return '';
  $body = '';
  while (!feof($fp)) $body .= fread($fp, 8192);
  fclose ($fp);
  $body = explode("Connection: close\r\n",$body,2);
  return trim($body[1]);
}
-~{}~ 23.06.05 17:07:

Вот возникла еще одна задачка (другая)
Если нет прокси то подгружаем-
PHP:
require http://исходный_сайт/export/intnew.inc
а если из за прокси то как ?
 

Tor

Новичок
Sandr
может перестанешь глупостями заниматься?
если нужна синхронизация с другим сайтом, то напиши ОДИН скрипт, который по крону будет тягать файлы
 

Sandr

Guest
Автор оригинала: Tor
Sandr
может перестанешь глупостями заниматься?
если нужна синхронизация с другим сайтом, то напиши ОДИН скрипт, который по крону будет тягать файлы
Все значительно сложней :)
Тред о модуле
 

Tor

Новичок
мне, собственно как и другим, мало интересно читать всякие треды о всяких модулях
улавливаешь?
если у тебя проблема высосана из пальца, то здесь так и говорят, а не героически ее решают
имей это в виду на будущее
 

Sandr

Guest
Ну если ты говоришь о проблеме высосанной из пальца
то не проще ли было сказать о ее решении чем писать аж 16 постов в этот тред?

Не последователен - уважаемый Tor!
 

Tor

Новичок
Sandr
мы решали какую проблему?
(см. название треда)

а сейчас что у тебя выстрелило?
кто из нас не последователен?
то-то
 

skynet80

rundesigner.com
А если нужно авторизоваться на proxy. Это функция работает?
или нужно вводить дополнительно авторизацию, чтобы получить данные с прокси.
 
Сверху