Профи. помогите с отправкой файлов потоками

Печать RSS
68

Автор
Дух
0
Вощем чет накуралесил только отправляет не боле одного фала.
<?
$_FILES = array(4) { ["f1"]=> array(5) { ["name"]=> string(8) 
"foto.gif" ["type"]=> string(9) "image/gif" 
["tmp_name"]=> string(14) "/tmp/phpRsNxmP" 
["error"]=> int(0) ["size"]=> int(394) } ["f2"]=> array(5) { 
["name"]=> string(7) "man.gif" ["type"]=> string(9) 
"image/gif" ["tmp_name"]=> string(14) "/tmp/phpcT0
Cyo" ["error"]=> int(0) ["size"]=> int(159) } ["f3"]=> 
array(5) { ["name"]=> string(9) "woman.gif" ["type"]=> 
string(9) "image/gif" ["tmp_name"]=> string(14) 
"/tmp/phphKDIKX" ["error"]=> int(0) ["size"]=> int(158) } 
["f4"]=> array(5) { ["name"]=> string(8) "love.gif" 
["type"]=> string(9) "image/gif" ["tmp_name"]=> 
string(14) "/tmp/phpOkEOWw" ["error"]=> int(0) 
["size"]=> 
int(144) } } 
Автор
Дух
0
Собираю для отправки
<?
     $boundary = "---------------------".substr(md5(rand(0,32000)), 0, 10);
     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";
     }
Результат
Content-Disposition: form-data; name="f1"; filename="foto.gif" Content-Type: image/jpeg Content-Transfer-Encoding: binary GIF89a?PSYtuvhkr#J4h +V]kkk 999,,-qݝc ퟀ�#$&^bh <Ů v filퟄ�X[a ?z௱}BEIi ̎ z|Ǐccc6bejK䌱V ! ?,pH,ID9Ea3;Nd; 2 a&W(I-̔!$( k4<&'+ uc):8* 47*=#'.$$
Автор
Дух
0
Если не вставлять содержимое картинки
<?
     $boundary = "---------------------".substr(md5(rand(0,32000)), 0, 10);
     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";
     }
echo $data;
результат все как надо
Content-Disposition: form-data; name="f1";
filename="foto.gif" Content-Type: image/jpeg Content-
Transfer-Encoding: binary fileContents ----------------------
-214f9424bd-- Content-Disposition: form-data;
name="f2"; filename="man.gif" Content-Type:
image/jpeg Content-Transfer-Encoding: binary
fileContents -----------------------214f9424bd-- Content-
Disposition: form-data; name="f3";
filename="woman.gif" Content-Type: image/jpeg
Content-Transfer-Encoding: binary fileContents -----------
------------214f9424bd-- Content-Disposition: form-data;
name="f4"; filename="love.gif" Content-Type:
image/jpeg Content-Transfer-Encoding: binary
fileContents -----------------------214f9424bd--
Автор
Дух
0
Скорее проблема в foreach наверное?
Автор
Дух
0
В коде N2 куда поделись f2,f3,f4 ?
A

Оранжевые штаны
0
я конечно не сильно осведомлен в этом вопросе, но не нужно ли там header('Content-Type: image/gif'); например

Ктулху
0
6. Azzido, Помоему автор отправляет почту... Автор, поясни задачу.
Автор
Дух
0
Да ладно забыли что для етого скрипта нужен set_time_limit() а он отключен
Автор
Дух
0
Вот функция должна отправить все файли потоками а бросает только один.
<?php
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;
 }
echo do_post_request("http://....", $_POST, $_FILES);
?>
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск