Вы не зашли.
Главная »
PHP » Нужно передать файл методом пост на другой хост
#1.
TLENS
Off
(14)
Moderator
2009.11.30 21:09
Управится ли с етим курл если файл может весить до 200 мб. Или лутше использовать fsockopen?
но я В fsoockopen мало шарю если кому не трудно дайте шаблон.
справится конечно. fsockopen как раз менее надежен.
#3.
TLENS
Off
(14)
Moderator
2009.12.03 13:01
Вчем проблема написано что загружено но файла нет может проблема з заголовками?
Вот исходник:
Код:
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 13:01)
#5.
TLENS
Off
(14)
Moderator
2009.12.04 10:10
Спасибо большое разобрался
#6.
TLENS
Off
(14)
Moderator
2010.01.23 22:10
А можно как нибуть отправить файл сидящий в переменной или например с отрытого соединение fopen('http://site.ru/film.avi','r');
Ато фильм весит 700мб а на сервере Свободно гдето 1,5 гб, только стоит лимит размера лежаших файлов и импортировать>сохранить>отправить не получится.
Надо импортировать>отправить Без сохранение.
Ето скрипт для сибя делаю. Чтобы на обменник файлы выбрасывать.
Оперативной памяти для скрипта открыл 1 гб. Да и время выполнение 1 час.
Но 700 мб портировал в переменную гдето за 1,4 минуты.
Отредактировано TLENS (2010.01.23 22:10)
потоками.
stream_context_create и file_put_contents
#8.
TLENS
Off
(14)
Moderator
2010.01.24 01:01
Нашол какогото крокодила может есть вариант попроще?
Код:
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 03:03)
#9.
TLENS
Off
(14)
Moderator
2010.01.24 03:03
Gemorroj написал:
потоками.
stream_context_create и file_put_contents
Можеш поподробнее пожалуйста?
Добавлено спустя 4 минуты 1 секунду: Погоди может щас з етим кодом розберусь
#10.
TLENS
Off
(14)
Moderator
2010.01.24 04:04
Все вроди бы розобрался щас буду модерировать
Код:
lt;?$files['f1']['tmp_name']='http://site.ru/film.avi';$files['f1']['name']='film.avi.';do_post_request("http://обменник", $postdata, $files); |