fsockopen, multipart/form-data странное

xVoLAnD

Новичок
fsockopen, multipart/form-data странное

Совсем замучал этот вопрос...

Есть задача: передача файлов средствами fsockopen() multipart/form-data....

происходит передача, примерно так:

for() {

header = "GET ...."
header .="... multipart/form-data...."
....
fsockopen()
fwrite()
fclose()
}

собственно вопрос...

Когда так происходит передача файла (один за другим) различного размера, скорость снижается... почему?
с чем это может быть связано?


p.s.: нет возможности использовать cURL и т.д. ТОЛЬКО сырые сокеты


PHP:
        $boundary = "HTTP-DATA-BOUNDARY-0-" . substr( md5( rand(0,32000) ), 0, 10 );

        // Build the header
        $header  = "POST " . $arr_url["path"] . ( !empty( $arr_url["query"] ) ? "?".$arr_url["query"] : ""  ) ." HTTP/1.0\r\n";
        $header .= "Host: " . $arr_url["host"] . "\r\n";
        $header .= "Content-Type: multipart/form-data; boundary=$boundary\r\n";
        $header .= "Connection: Close\r\n";

  // and attach the file
	  if( !empty( $arr_files ) ) {
		  for ($i=0; $i < count( $arr_files['userfile']['name']); $i++ ) {
			$data .= "--$boundary\r\n";
			if ($arr_files['userfile']['name'][$i] != '')
			{
				 $content_file = file_get_contents( $arr_files['userfile']['tmp_name'][$i] );
				 $data.="Content-Disposition: file; name=\"filename\"; filename=\"".$arr_files['userfile']['name'][$i]."\"\r\n";
				 $data .= "Content-Type: ".$arr_files['userfile']['type'][$i]."\r\n\r\n";
				 $data .= "".$content_file."\r\n";
				 $data .="--$boundary\r\n";
			}
		  }
	  }

	  $data .="--$boundary--\r\n";
        $header .= "Content-length: " . strlen( $data ) . "\r\n\r\n";

        unset( $res );
        $fp = fsockopen( $arr_url["host"], 80, $errno, $errstr, 30 );
 

ys

отодвинутый новичок
Терзают меня смутные сомнения, что этот код не должен работать.
 

xVoLAnD

Новичок
Код великолепно работает...
Проблема в том, что скорость при передаче очередного файла падает... 50кб/c, 30, 12, 3, 10, 0.5, 12...

Не понятно, почему так происходит?! Канал - свободен, сервер - тоже....

Пробовал не блокируемые сокеты, так скорость в итоге так же себя ведёт... Если использовать cURL - скорость в разы выше...!

Но почему-то, при обращении к определённому URI, выдаётся ошибка 403... И это именно через cURL


Есть идей? Может у кого-то есть свой класс по передаче multipart/form-data
 

ys

отодвинутый новичок
О другое дело. А то:
> header = "GET ...."

А ftp (file transfer protocol) использовать неа?

А то апач обычно _POST дату хочет в мемори кинуть, а ее может и не быть, итог - велком в swap space.
 

xVoLAnD

Новичок
Понимаете, FTP нельзя использовать (особенности хостинга), скрипт использует свой открытый и закрытый ключ для проверки доступа...

Как это кидает в мемори? Где можно прочитать про это?
Ещё, по мимо падения скорости, происходит жуткое увеличение трафика на локальном компьютере...

Скрипт работает по принципу ЛОКАЛЬНЫ=>СЕРВЕР, так вот на стороне локального возникает огромное кол-во передаваемого трафика и падение скорости..
 
Сверху