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

#11 2010.01.24 13:46

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

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

нет, не пойдет, 19 строка $fileContents = file_get_contents($file['tmp_name']);
т.е. все сгружается в оперативную память.
я что-то не подумал над тем, что заголовок таким образом, без полного считывания файла не сделать.
тогда curl. 2 пример из мануала.

Код:

1
span style="color: #0000BB"><?php/* http://localhost/upload.php:print_r($_POST);print_r($_FILES);*/$ch = curl_init();$data = array('name' => 'Foo', 'file' => '@/home/user/test.png');curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);curl_exec($ch);?>

Неактивен

#12 2010.01.24 17:10

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

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

Геморой помоги пожалуйста упростить код.
Чтобы без цыклов фореарч, чтобы вставить переменную с файлом имя файла нужные заголовки для сайта и переменные пост.
Я мудровал 3 раза все чистил и начинал заново.

Неактивен

#13 2010.01.24 17:26

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

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

Gemorroj написал:

нет, не пойдет, 19 строка $fileContents = file_get_contents($file['tmp_name']);
т.е. все сгружается в оперативную память.
я что-то не подумал над тем, что заголовок таким образом, без полного считывания файла не сделать.
тогда curl. 2 пример из мануала.

Код:

1
span style="color: #0000BB"><?php/* http://localhost/upload.php:print_r($_POST);print_r($_FILES);*/$ch = curl_init();$data = array('name' => 'Foo', 'file' => '@/home/user/test.png');curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);curl_exec($ch);?>

Дак пускай считывает мне наоборот надо хранить в оперативке.
Так как фавайлову систему не запишу

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

Неактивен

#14 2010.01.24 17:56

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

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

кто тебе даст сгрузить 700 мб в оперативную память??? забудь, делай курлом, как описано выше.

Неактивен

#15 2010.01.24 18:31

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

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

ini_set() делает чудеса

Неактивен

#16 2010.01.24 18:41

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

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

Вот что у меня получилось на свой сайт бросает

Код:

1
span style="color: #0000BB"><?phpini_set('memory_limit',"999M");ini_set('max_execution_time',3600);list($generic_msec,$generic_sec)=explode(chr(32),microtime()); $generic_time=$generic_sec+$generic_msec; //-----------------//function do_post_request($url, $postdata, $files = null){$data = "";$boundary = "---------------------".substr(md5(rand(0,32000)), 0, 10);foreach($postdata as $key => $val){$data .= "--$boundary\n";$data .= "Content-Disposition: form-data; name=\"".$key."\"\n\n".$val."\n";}$data .= "--$boundary\n";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;}$postdata = array('sid' =>'XXX','send' =>'загрузить');$files['f1']['tmp_name']='http://site.ru/film.avi';$files['f1']['name']=preg_replace('/.*\/(.*)/','$1',$files['f1']['tmp_name']);do_post_request("http://обменник", $postdata, $files);//-----------------//list($generic_newmsec,$generic_newsec)=explode(chr(32),microtime()); echo round((($generic_newsec+$generic_newmsec)-$generic_time),4).' сек.<br>';?>

Неактивен

#17 2010.01.24 19:13

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

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

Код:

1
span style="color: #0000BB"><?phpini_set('memory_limit',"999M");ini_set('max_execution_time',3600);list($generic_msec,$generic_sec)=explode(chr(32),microtime()); $generic_time=$generic_sec+$generic_msec; //-----------------//$f=file_get_contents('http://www.passov.net/loads/files/b_video/film/0a/m/Nasha_Russia_Jajca_Sudby.mp4');echo substr($f,0,50).'<hr>';//-----------------//list($generic_newmsec,$generic_newsec)=explode(chr(32),microtime()); echo round((($generic_newsec+$generic_newmsec)-$generic_time),4).' сек.<br>';?>

Розмер 150 мб
Результат:
ftypmp42mp42isomDGmdatѶ# o m
<hr>
27.1215 сек.
Добавлено спустя   2 минуты  52 секунды:
Как переменную $f отправить с заголовками дай пожалуйста простенький пример
Добавлено спустя   5 минут  51 секунду:
Но ето все желательно в одной строке чтобы не умножать обем оперативной памяти.

Неактивен

#18 2010.01.24 21:13

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

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

при чем тут ini_set ?
забивать наглухо оперативную память сервера - это страшное зло. я в этом помогать отказываюсь.

Неактивен

#19 2010.01.24 21:26

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

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

Gemorroj написал:

при чем тут ini_set ?
забивать наглухо оперативную память сервера - это страшное зло. я в этом помогать отказываюсь.

Почему ето зло? Чем ето опасно?

Неактивен

#20 2010.01.24 21:50

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

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

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

Неактивен

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

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

forum.wapinet.ru

PunBB Mod v0.6.2
0.012 s