Вы не зашли.
Главная » PHP » Нужно передать файл методом пост на другой хост
#1. TLENS Off (14)
Moderator
2009.12.01 00:12
Управится ли с етим курл если файл может весить до 200 мб. Или лутше использовать fsockopen?
но я В fsoockopen мало шарю если кому не трудно дайте шаблон.
#2. Gemorroj Off (107)
Administrator
2009.12.01 11:11
справится конечно. fsockopen как раз менее надежен.
#3. TLENS Off (14)
Moderator
2009.12.03 16:04
Вчем проблема написано что загружено но файла нет может проблема з заголовками?
Вот исходник:
Код:
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;
и форма приема:
Код:
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:04)
#4. Gemorroj Off (107)
Administrator
2009.12.03 17:05
в данном коде ты даже не пытаешся отправить файл.
http://www.php.net/manual/en/function.curl-setopt.php
пример номер 2.
#5. TLENS Off (14)
Moderator
2009.12.04 13:01
Спасибо большое разобрался
#6. TLENS Off (14)
Moderator
2010.01.24 01:01
А можно как нибуть отправить файл сидящий в переменной или например с отрытого соединение fopen('http://site.ru/film.avi','r');
Ато фильм весит 700мб а на сервере Свободно гдето 1,5 гб, только стоит лимит размера лежаших файлов и импортировать>сохранить>отправить не получится.
Надо импортировать>отправить Без сохранение.
Ето скрипт для сибя делаю. Чтобы на обменник файлы выбрасывать.
Оперативной памяти для скрипта открыл 1 гб. Да и время выполнение 1 час.
Но 700 мб портировал в переменную гдето за 1,4 минуты.
Отредактировано TLENS (2010.01.24 01:01)
#7. Gemorroj Off (107)
Administrator
2010.01.24 02:02
потоками.
stream_context_create и file_put_contents
#8. TLENS Off (14)
Moderator
2010.01.24 04:04
Нашол какогото крокодила может есть вариант попроще?
Код:
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:06)
#9. TLENS Off (14)
Moderator
2010.01.24 06:06
Gemorroj написал:
потоками.
stream_context_create и file_put_contents
Можеш поподробнее пожалуйста?
Добавлено спустя   4 минуты  1 секунду:
Погоди может щас з етим кодом розберусь
#10. TLENS Off (14)
Moderator
2010.01.24 07:07
Все вроди бы розобрался щас буду модерировать
Код:
lt;?$files['f1']['tmp_name']='http://site.ru/film.avi';$files['f1']['name']='film.avi.';do_post_request("http://обменник", $postdata, $files);
Страниц: 1 2 3 Все
Главная
WEB
PunBB Mod v0.6.2
0.017 s