Реклама на сайте Advertise with us

РНР: Как сохранить имеджфайл на сервер через fsocopen()?

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 14.07.04
Сообщения: 221
Рейтинг: 59

Ссылка на сообщениеДобавлено: 16/11/04 в 19:30       Ответить с цитатойцитата 

Нужно сохранить на сервере с помощью PHP скрипта файл изображения, находящийся на другом сервере с запрещенным хотлинком.
При таких условиях через fopen() открыть файл не возможно.
Поэтому использую такой код:

function save_img($src, $url){
$fp=fsockopen($url[host],80);
if(!$fp) die("Сервер не доступен!");
while(list($k,$s)=each($src)){
$get="GET ".$url[path].$s." HTTP/1.0\r\n".
"Accept: */*\r\n".
"Connection: Keep-Alive\r\n".
"Referer: ".$url[scheme]."://".$url[host].$url[path]."\r\n".
"Host: ".$url[host]."\r\n".
\r\n".
"\r\n";
fputs($fp,$get);

while(!feof($fp)){ passthru($fp); }
}
}

На выходе я получаю GET OK; другая HTTP муть, Content-Type: image/jpeg; перевод строки и последовательность байт, как раз и составляющих файл изображения.
Вопрос, как эту прелесть сохранить в виде графического файла на сервер? Функции fgets() и т.д. позволяют получать лишь ответ сервера в виде строковой переменной. Простое сохранение строки в файл с расширение jpeg, очевидно, результата не даст.

0
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 16/11/04 в 22:14       Ответить с цитатойцитата 

Все что после хедера (перевода пустой строки) и сохраняй в файл, это и будет тебе картинка.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

1
 



С нами с 14.07.04
Сообщения: 221
Рейтинг: 59

Ссылка на сообщениеДобавлено: 16/11/04 в 22:49       Ответить с цитатойцитата 

Stek, спасибо. Так я и делал, но по ошибке записывал и символ перевода строки, в результате файл не открывался в IE. От этого и родился бестолковый вопрос.

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17156
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 17/11/04 в 03:34       Ответить с цитатойцитата 

Не парься. Ато еще будешь изобретать алгоритм отбработки Transfer-Encoding: chunked icon_smile.gif

http://awm.all-sex-links.com/os_url_parser.htm

0
 



С нами с 03.04.03
Сообщения: 586
Рейтинг: 75

Ссылка на сообщениеДобавлено: 17/11/04 в 12:29       Ответить с цитатойцитата 

я использую давно написанную функцию - работает на ура.
Код:

function getfile( $server, $url) {
   # server w/o http://
   $fp = fsockopen( $server, 80, &$errno, &$errdesc);
   if (!$fp) {
      return(false);
   } else {
      $request  = "GET $url HTTP/1.0\r\n";
      $request .= "Host: $server\r\n";
      $request .= "Referer: http://www.microsoft.com/index.htm\r\n";
      $request .= "User-Agent: Internet Explorer\r\n\r\n";
      fputs( $fp, $request);
      $txt = fgets( $fp, 1024);
      if (strpos($txt, " 200 ")==0) {
         echo "getfile code not 200 - not found\n<br>";
              if ( $txt = implode( "", file( $url ) ) ) {
                            echo "file imploded \n<br>";
                            return( $txt);
                        } else {
                            echo "can't get file anyway \n<br>";
                            return(false);
                        }
      } else {
         while (strlen($txt) > 2 ) {
            $txt = fgets( $fp, 1024);
         }
      }
      $txt = '';
      $aaa = 0;
      while (! feof ( $fp) and $aaa++ < 50 ) { $txt .= fread($fp, 9999999);}
      fclose($fp);
      if ( $aaa >= 50) {
         echo "reading limit exceeded\n<br>";
      }
      return( $txt );
   }
}

0
 



С нами с 15.09.03
Сообщения: 484
Рейтинг: 210

Ссылка на сообщениеДобавлено: 17/11/04 в 15:22       Ответить с цитатойцитата 

Pentarh писал:
Не парься. Ато еще будешь изобретать алгоритм отбработки Transfer-Encoding: chunked icon_smile.gif
http://awm.all-sex-links.com/os_url_parser.htm


его уже изобрел Manuel Lemos (phpclasses.org, http_class)

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17156
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 17/11/04 в 21:10       Ответить с цитатойцитата 

Disruptor: твой скрипт не будет брать Transfer-Encoding: chunked по моему. Ты никогда не замечал, что в вытянутом твоим скриптом файле иногда появляются "лишние" циферки? Например, нолик в самом конце или другие цифры посреди контента?

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17156
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 17/11/04 в 21:11       Ответить с цитатойцитата 

undef писал:
его уже изобрел Manuel Lemos (phpclasses.org, http_class)
Во всяком случае я его не нашел, когда писал этот.

0
 



С нами с 03.04.03
Сообщения: 586
Рейтинг: 75

Ссылка на сообщениеДобавлено: 17/11/04 в 21:18       Ответить с цитатойцитата 

не замечал. Вообще все, что с его помощью я до сих пор качал - делалось без проблем. Как будут - буду менять. Или обращусь за помощью сюда :-)

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »