• Главная
  • » PHP
  • » Нужно передать файл методом пост на другой хост

#1 2009.12.01 00:54

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Нужно передать файл методом пост на другой хост

Управится ли с етим курл если файл может весить до 200 мб. Или лутше использовать fsockopen?
но я В fsoockopen мало шарю если кому не трудно дайте шаблон.

Неактивен

#2 2009.12.01 11:53

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: Нужно передать файл методом пост на другой хост

справится конечно. fsockopen как раз менее надежен.

Неактивен

#3 2009.12.03 16:15

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Нужно передать файл методом пост на другой хост

Вчем проблема написано что загружено но файла нет может проблема з заголовками?
Вот исходник:

Код:

1
span style="color: #0000BB"><?php$f1=file_get_contents('photo.jpg');$header[]='Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5';$header[]='Connection: Keep-Alive';$header[]='Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1';$header[]='Accept-Language: ru-RU,ru;q=0.9,en;q=0.8';$header[]='User-Agent: '.$_SERVER['HTTP_USER_AGENT'];$curl=curl_init(); $post='code=96950347&sid=xxx&id=0&f1='.$f1.'&upload=загрузить';curl_setopt($curl,CURLOPT_POST, true);curl_setopt($curl,CURLOPT_POSTFIELDS,$post);curl_setopt($curl, CURLOPT_URL,'http://xxx.xx/upload/index.php?');curl_setopt($curl,CURLOPT_HTTPHEADER,$header);curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);curl_setopt($curl,CURLOPT_HEADER,true);$get=curl_exec($curl); curl_close($curl);echo $get;

и форма приема:

Код:

1
lt;?<form method="post" action="/upload/index.php" enctype="multipart/form-data"><input type="hidden" name="code" value="96950347"><input type="hidden" name="id" value="0"><input type="hidden" name="sid" value="xxx"><input type="file" name="f1" size="12"><input type="submit" name="upload" value="загрузить"></form>

Отредактировано TLENS (2009.12.03 16:16)

Неактивен

#4 2009.12.03 17:39

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: Нужно передать файл методом пост на другой хост

в данном коде ты даже не пытаешся отправить файл.
http://www.php.net/manual/en/function.curl-setopt.php
пример номер 2.

Неактивен

#5 2009.12.04 13:40

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Нужно передать файл методом пост на другой хост

Спасибо большое разобрался

Неактивен

#6 2010.01.24 01:34

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Нужно передать файл методом пост на другой хост

А можно как нибуть отправить файл сидящий в переменной или например с отрытого соединение fopen('http://site.ru/film.avi','r');
Ато фильм весит 700мб а на сервере Свободно гдето 1,5 гб, только стоит лимит размера лежаших файлов и импортировать>сохранить>отправить не получится.
Надо импортировать>отправить Без сохранение.
Ето скрипт для сибя делаю. Чтобы на обменник файлы выбрасывать.
Оперативной памяти для скрипта открыл 1 гб. Да и время выполнение 1 час.
Но 700 мб портировал в переменную гдето за 1,4 минуты.

Отредактировано TLENS (2010.01.24 01:36)

Неактивен

#7 2010.01.24 02:18

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: Нужно передать файл методом пост на другой хост

потоками.
stream_context_create и file_put_contents

Неактивен

#8 2010.01.24 04:27

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Нужно передать файл методом пост на другой хост

Нашол какогото крокодила может есть вариант попроще?

Код:

1
span style="color: #0000BB"><?phpfunction do_post_request($url, $postdata, $files = null) {     $data = "";     $boundary = "---------------------".substr(md5(rand(0,32000)), 0, 10);            //Collect Postdata     foreach($postdata as $key => $val)     {         $data .= "--$boundary\n";         $data .= "Content-Disposition: form-data; name=\"".$key."\"\n\n".$val."\n";     }          $data .= "--$boundary\n";         //Collect Filedata     foreach($files as $key => $file)     {         $fileContents = file_get_contents($file['tmp_name']);                 $data .= "Content-Disposition: form-data; name=\"{$key}\"; filename=\"{$file['name']}\"\n";         $data .= "Content-Type: image/jpeg\n";         $data .= "Content-Transfer-Encoding: binary\n\n";         $data .= $fileContents."\n";         $data .= "--$boundary--\n";     }       $params = array('http' => array(            'method' => 'POST',            'header' => 'Content-Type: multipart/form-data; boundary='.$boundary,            'content' => $data         ));    $ctx = stream_context_create($params);    $fp = fopen($url, 'rb', false, $ctx);       if (!$fp) {       throw new Exception("Problem with $url, $php_errormsg");    }      $response = @stream_get_contents($fp);    if ($response === false) {       throw new Exception("Problem reading data from $url, $php_errormsg");    }    return $response; } //set data (in this example from post) //sample data$postdata = array(     'name' => $_POST['name'],     'age' => $_POST['age'],     'sex' => $_POST['sex'] ); //sample image$files['image'] = $_FILES['image']; do_post_request("http://example.com", $postdata, $files);?>

Отредактировано TLENS (2010.01.24 06:28)

Неактивен

#9 2010.01.24 06:31

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Нужно передать файл методом пост на другой хост

Gemorroj написал:

потоками.
stream_context_create и file_put_contents

Можеш поподробнее пожалуйста?
Добавлено спустя   4 минуты  1 секунду:
Погоди может щас з етим кодом розберусь

Неактивен

#10 2010.01.24 07:27

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Нужно передать файл методом пост на другой хост

Все вроди бы розобрался щас буду модерировать

Код:

1
lt;?$files['f1']['tmp_name']='http://site.ru/film.avi';$files['f1']['name']='film.avi.';do_post_request("http://обменник", $postdata, $files);

Неактивен

  • Главная
  • » PHP
  • » Нужно передать файл методом пост на другой хост

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.014 s