Вы не зашли.
Главная » PHP » Нужно передать файл методом пост на другой хост
#11. Gemorroj Off (107)
Administrator
2010.01.24 13:01
нет, не пойдет, 19 строка $fileContents = file_get_contents($file['tmp_name']);
т.е. все сгружается в оперативную память.
я что-то не подумал над тем, что заголовок таким образом, без полного считывания файла не сделать.
тогда curl. 2 пример из мануала.
Код:
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. TLENS Off (14)
Moderator
2010.01.24 17:05
Геморой помоги пожалуйста упростить код.
Чтобы без цыклов фореарч, чтобы вставить переменную с файлом имя файла нужные заголовки для сайта и переменные пост.
Я мудровал 3 раза все чистил и начинал заново.
#13. TLENS Off (14)
Moderator
2010.01.24 17:05
Gemorroj написал:
нет, не пойдет, 19 строка $fileContents = file_get_contents($file['tmp_name']);
т.е. все сгружается в оперативную память.
я что-то не подумал над тем, что заголовок таким образом, без полного считывания файла не сделать.
тогда curl. 2 пример из мануала.
Код:
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:05)
#14. Gemorroj Off (107)
Administrator
2010.01.24 17:05
кто тебе даст сгрузить 700 мб в оперативную память??? забудь, делай курлом, как описано выше.
#15. TLENS Off (14)
Moderator
2010.01.24 18:06
ini_set() делает чудеса
#16. TLENS Off (14)
Moderator
2010.01.24 18:06
Вот что у меня получилось на свой сайт бросает
Код:
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. TLENS Off (14)
Moderator
2010.01.24 19:07
Код:
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. Gemorroj Off (107)
Administrator
2010.01.24 21:09
при чем тут ini_set ?
забивать наглухо оперативную память сервера - это страшное зло. я в этом помогать отказываюсь.
#19. TLENS Off (14)
Moderator
2010.01.24 21:09
Gemorroj написал:
при чем тут ini_set ?
забивать наглухо оперативную память сервера - это страшное зло. я в этом помогать отказываюсь.
Почему ето зло? Чем ето опасно?
#20. Gemorroj Off (107)
Administrator
2010.01.24 21:09
тем, что ты сжираешь все оперативную память. а она нужна не только тебе. если админы посмотрят в логи как пить дать хост забанят.
Страниц: 1 2 3 Все
Главная
WEB
PunBB Mod v0.6.2
0.019 s