[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: загрузка файла на сервер Вконтакте
Aeooe
Всем добрый день. Собственно реализую функцию загрузки изображений на сервер вконтакте и столкнулся с проблемой на стадии формирования POST запроса - получаю ответ от сервера Вконтакте:
{"server":618729,"photo":"[]","hash":"*******"}

Вот собственно код:

function crossposting_post_news_vk()
{
$access_token=mysql_query("select value from settings where name='access_token'");
$access_token=mysql_result($access_token,0,"value");
$id_wall=mysql_query("select value from settings where name='id_wall'");
$id_wall=mysql_result($id_wall,0,"value");
$obj=json_decode($this->vk_query_api("photos.getWallUploadServer","id_group=$id_wall&access_token=$access_token"));
$server_uploads=$obj->response->upload_url; //Получили сервер для загрузки

$image=$this->return_img ($_SERVER['DOCUMENT_ROOT']."/image.jpg");


echo $this->send_post_query_vk_server($image,$server_uploads);
}


function vk_query_api($method,$parametres)
{
//echo file_get_contents("https://api.vk.com/method/$method?$parametres&v=5.21").&qu ot;<br>";
return file_get_contents("https://api.vk.com/method/$method?$parametres&v=5.21");
}

function return_img ($link){
$f_image=fopen( $link,"rb"); // имя файла или картинки -- открыли файл на чтение
$image=fread($f_image,filesize($link)); // считали файл в переменную
fclose($f_image); // закрыли файл, можно опустить
//$image=addslashes($image);

return $image;
}

function send_post_query_vk_server ($image,$server_uploads){
preg_match('|http://(.*?)/|si', $server_uploads, $serv_addr);
$serv_addr = $serv_addr[1];
preg_match("|http://$serv_addr/(.*)|si", $server_uploads, $serv_page);
$serv_page = $serv_page[1];
$serv_port = 80;
$timelimit = 30; // Время ожидания ответа в сек. По умолчанию - 30 сек.
$boundary = substr(md5(rand(0,32000)),0,16);

$post_data="--$boundary\r\nContent-Disposition: form-data; name=\"photo\"; filename=\"image.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n".$image."\r\n--$boundary--\r\n";

$headers = "POST /$serv_page HTTP/1.1\r\n";
$headers .= "Host: $serv_addr\r\n ";
$headers .= "Content-type: multipart/form-data; boundary=\"$boundary\"\r\n";
$headers .= "Content-length: ".strlen($post_data)."\r\n";
$headers .= "Connection: keep-alive\r\nKeep-Alive: 300\r\n\r\n";

$request_body = $headers.$post_data."\r\n\r\n";

// Открытие сокета
$sp = fsockopen($serv_addr, $serv_port, $errno, $errstr, $timelimit);

if (!$sp)
exit('Error: '.$errstr.' #'.$errno);

// Передача заголовков и POST запросов за один раз
fwrite($sp, $request_body);

$server_answer = '';

// Если соединение, открытое fsockopen() не было закрыто сервером
// код while(!feof($sp)) { ... } приведет к зависанию скрипта
// В коде ниже - эта проблема решена

$start = microtime(true);
$header_flag = 1;
while(!feof($sp) && (microtime(true) - $start) < $timelimit)
{
if ($header_flag == 1)
{
$content = fgets($sp, 4096);
if ($content === chr(13).chr(10))
$header_flag = 0;
else
$server_header .= $content;
}
else
{
$server_answer .= fread($sp, 4096);
}
}


fclose($sp);

return $server_answer;

//return preg_replace('|\r\n|si',"<br>",$server_header);
}


Формируется вот такой вот POST запросик:

Цитата

POST /upload.php?act=do_add&mid=252357541&aid=-14&gid=0&hash=******&rhash=********&swfupload=1&api=1&wallphoto=1 HTTP/1.1\r\n
Host: cs618729.vk.com\r\n
Content-type: multipart/form-data; boundary="0a7cdeee9c8bba4d"\r\n
Content-length: 209105\r\n
Connection: Close\r\n\r\n

--0a7cdeee9c8bba4d\r\n
Content-Disposition: form-data; name="photo"; filename="image.jpg"\r\n
Content-Type: image/jpeg\r\n\r\n

[бинарный код]\r\n
--0a7cdeee9c8bba4d--\r\n


PS Пардон за длинную портянку, но мне кажется для полного понимаю работы кода она необходима. Может у кого глаз наметанный на отправку POST запросов - тыкнет носом где ошибка( а мне кажется что ошибка именно в POST запросе)
PSPS Про существование CURL узнал позже чем написал данный код, curl пока не предлагайте, хочу добить этот код до рабочего состояния =)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.