Профи. помогите с отправкой файлов потоками
1.
Удаленный (01.04.2010 / 18:23)
Вощем чет накуралесил только отправляет не боле одного фала.
<?
$_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) } }
2.
Удаленный (01.04.2010 / 18:25)
Собираю для отправки
<?
$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*=#'.$$
3.
Удаленный (01.04.2010 / 18:29)
Если не вставлять содержимое картинки
<?
$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--
4.
Удаленный (01.04.2010 / 18:30)
Скорее проблема в foreach наверное?
5.
Удаленный (01.04.2010 / 18:35)
В коде N2 куда поделись f2,f3,f4 ?
6.
Azzido (02.04.2010 / 06:44)
я конечно не сильно осведомлен в этом вопросе, но не нужно ли там header('Content-Type: image/gif'); например
7.
ктулху (02.04.2010 / 10:00)
6.
Azzido, Помоему автор отправляет почту... Автор, поясни задачу.
8.
Удаленный (02.04.2010 / 16:23)
Да ладно забыли что для етого скрипта нужен set_time_limit() а он отключен
9.
Удаленный (02.04.2010 / 16:27)
Вот функция должна отправить все файли потоками а бросает только один.
<?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);
?>
URL:
https://visavi.net/topics/7667