Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Загрука картинки с помощью сокетов
 
 автор: __Юра__   (20.01.2008 в 12:24)   письмо автору
 
 

Вот ни как не могу понять в чём причина, может что-то пропустил.
Вот функция

<?php
header
('Content-type: image/jpeg');
function 
get($host,$path)
{
$fp = @fsockopen($host80$errno$errstr3);
if(!
$fp)  exit("$errstr ( $errno )");
else
 {
 
$headers "GET ".$path." HTTP/1.1\r\n";
 
$headers.= "Host: ".$host."\r\n";
 
$headers.= "User-Agent: Opera 8.0\r\n";
 
$headers.= "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n";
 
$headers.= "Connection: Close\r\n\r\n";
 
fwrite($fp$headers);
 
$out=array();
 
$headr=FALSE;
 
$line='';
 
//Получаем заголовки с сервера
 
while(!$headr)
  {
     
$line=fgets($fp1024);
     if(
trim($line)=='')    $headr=TRUE;
     else                    
$out[]=trim($line);
  }
 
//Узнаём размер файла
 
foreach($out AS $value)
  {
   
//Узнаём размер полученого документа  Content-Length:
   
$error=preg_match_all('|^Content-Length: ([0-9]+)$|i',$value,$out2);
   if(
$error)
   
$ContentLength=$out2[1][0];
  }
 if(
$ContentLength==FALSE)
  {
   
$line=fgets($fp124);
   
$line=trim($line);
   
$error=preg_match('|^([0-9abcdef]+)$|i',$line);
   if(!
$error) exit(error(6));
   
$ContentLength=hexdec($line);
  }

  
$line='';
   while(!
FEOF($fp))
  {
   
$line.=fgets($fp,1024*3);
  }
  
fclose($fp);
  echo 
$line;
 }
}

?>

При загрузки этой http://mobil-ru.org.ru/downloads/pictures/pred/171/40/foto.jpg
картинки через функцию, загружаеться нормально,
а при загрузки этой
http://mobil-ru.org.ru/downloads/pictures/pred/171/120/foto.jpg
картинки через функцию, она портиться.
Может я что-то упустил?

   
 
 автор: Unkind   (20.01.2008 в 12:30)   письмо автору
 
   для: __Юра__   (20.01.2008 в 12:24)
 

В строке "GET ".$path." HTTP/1.1\r\n" исправьте версию протокола на HTTP/1.0

   
 
 автор: __Юра__   (20.01.2008 в 12:47)   письмо автору
 
   для: Unkind   (20.01.2008 в 12:30)
 

Это не помогло.

   
 
 автор: Unkind   (20.01.2008 в 12:55)   письмо автору
 
   для: __Юра__   (20.01.2008 в 12:47)
 

Уберите нафиг вот это:

> //Узнаём размер файла
> foreach($out AS $value)
> {
> //Узнаём размер полученого документа Content-Length:
> $error=preg_match_all('|^Content-Length: ([0-9]+)$|i',$value,$out2);
> if($error)
> $ContentLength=$out2[1][0];
> }
> if($ContentLength==FALSE)
> {
> $line=fgets($fp, 124);
> $line=trim($line);
> $error=preg_match('|^([0-9abcdef]+)$|i',$line);
> if(!$error) exit(error(6));
> $ContentLength=hexdec($line);
> }

   
 
 автор: __Юра__   (20.01.2008 в 13:01)   письмо автору
 
   для: Unkind   (20.01.2008 в 12:55)
 

Это нельзя убирать, так как если в заголовках небыло передано размера файла, то размер файла указываеться в первой страке в 16-ти ричном виде.

Если это убрать, 100% испортиться рисунок(фаил).

   
 
 автор: Unkind   (20.01.2008 в 13:03)   письмо автору
 
   для: __Юра__   (20.01.2008 в 13:01)
 

Если Вы поставите HTTP/1.0, то не будет никаких размеров в HEX. И, между прочим, там не всё так просто. Там указывается не размер всего документа, а следующего блока.

   
 
 автор: __Юра__   (20.01.2008 в 13:20)   письмо автору
 
   для: Unkind   (20.01.2008 в 13:03)
 

HTTP/1.0
работает, только всётаки размер файла не передаёться в заголовках.

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

   
 
 автор: Region   (25.01.2008 в 12:44)
 
   для: __Юра__   (20.01.2008 в 12:24)
 

Тебе что с картинкой то нужно делать? Если просто сохранять её на сервер то можно обойтись 5 строчками кода! зачем тебе нужен размер и заголовки?

[поправлено модератором]

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования