Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   С сокетов на курл (https://forum.antichat.xyz/showthread.php?t=83789)

Malunga 06.09.2008 05:00

С сокетов на курл
 
Приветствую всех форумчан и очень надеюсь на помощь!!! :)
Сделал загрузчик файла на удалённый хост. На сокетах всё работает прекрасно. Решил переделать на курл и тут не получается.
Вот примерный код:
PHP код:

<?php  
$head 
"POST /upload.php HTTP/1.1\r\n";
$head .= "Content-type: multipart/form-data; boundary=--UPLOAD\r\n";
$head2 .= "-------UPLOAD-------\r\nContent-Disposition: form-data;\r\n\r\n";
$head2 .= "-------UPLOAD-------\r\nContent-Type: image/gif\r\n\r\n";
$head2 .= file_get_contents($filename);
$head2 .= 'Content-Disposition: form-data; name="uploadfile"'."\r\n";
$head2 .= "Submit Query\r\n-------UPLOAD-------\r\n";
$head .= 'Content-length: '.strlen($head2)."\r\n\r\n".$head2;

$fp fsockopen('host.ru'30);
while(!
feof($fp))
{
   echo 
fputs($fp$head);
}
fclose($fp);
?>

(часть заголовков опустил)
Как видно, заголовки довольно мудрёные. Напрягают двойные переносы (\r\n\r\n) и длина запроса, которая берётся из первой части.
Вот что пытался сделать, конечно же ничего не работает.
PHP код:

<?php    
$head
[] = 'Content-type: multipart/form-data; boundary=--UPLOAD';
$head2[] = '-------UPLOAD-------';
$head2[] = 'Content-Disposition: form-data;';
$head2[] = '-------UPLOAD-------';
$head2[] = 'Content-Type: image/gif';
$head2[] = 'Content-Disposition: form-data; name="uploadfile"';
$head2[] = 'Submit Query';
$head2[] = '-------UPLOAD-------';
$head[] = 'Content-length: '.count($head2);
$head[] = $head2;        

$init curl_init();
curl_setopt($initCURLOPT_URL,'http://host.ru/upload.php');
curl_setopt($initCURLOPT_RETURNTRANSFER,true);
curl_setopt($initCURLOPT_HEADER,true);
curl_setopt($initCURLOPT_POST,true);
curl_setopt($initCURLOPT_UPLOAD,true);
curl_setopt($initCURLOPT_POSTFIELDS,$head);
curl_setopt($initCURLOPT_INFILESIZE,$_FILES["name"]["size"]);
curl_setopt($initCURLOPT_INFILEfile_get_contents($_FILES["name"]["tmp_name"]));
$string curl_exec($init);
curl_close($init);
echo 
"<pre>$string</pre>";
?>

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

NuR 06.09.2008 06:24

PHP код:

curl_setopt($cCURLOPT_INFILE$fp); 

файловый дескриптор отправь

NuR 06.09.2008 06:27

ой ёпт, чет ты ваще не то фигачишь=))
вот держи пример
PHP код:

$file "testfile.txt";  
 
$c curl_init();  
curl_setopt($cCURLOPT_URL"http://example.com/putscript");  
curl_setopt($cCURLOPT_USERPWD"username:password");  
curl_setopt($cCURLOPT_RETURNTRANSFERtrue);  curl_setopt($cCURLOPT_PUTtrue);  curl_setopt($cCURLOPT_INFILESIZEfilesize($file));
$fp fopen($file"r");  
curl_setopt($cCURLOPT_INFILE$fp);     
curl_exec($c);     
curl_close($c);  
fclose($fp); 


Malunga 10.09.2008 16:04

Спасибо. с этим более менее разобрался, а как в заголовками быть? Не пойму как быть с двойными переносами. И ещё вопрос: как быть с Curlopt_infile если я передаю файл через форму (т.е. я не сохраняю его на серве, всё делается через $_files).
сорри за ламерство, с курлом впервые столкнулся =))


Время: 14:31