Не загружается фото в CURL для API

316
18 апреля 2017, 10:35

Пытаюсь постить картинки на стену с помощью VK API. Нашел такой вот скрипт с CURL, который выполняет необходимую загрузку изображения. Но вот возник вопрос, что CURL не работает. Первый массив приходит успешно, а на 2 этапе сохранения вылазит такая ошибка

One of the parameters specified was missing or invalid: photo is undefined

Хотя я уверен, что картинка по ссылке есть. В проверке полученных переменных перед функцией сохранения ничего не приходит, они все пустые. Не пойму, в чем может быть ошибка.

$tok = '00000000000000000000'; ///Токен
$myidgr = '00000000'; ///ID или домен группы - паблика
$imga = 'https://pp.userapi.com/c638724/v638724055/73fc/pqXzLlH10xU.jpg'; ///Картинка для постинга

///Получаем разрешение на загрузку картинки Вконтакте
$getwall = 'https://api.vk.com/method/photos.getWallUploadServer?group_id='.$myidgr.'&access_token='.$tok;
$dl = file_get_contents($getwall);
$dl = json_decode($dl, true); ///Декодируем json
echo '<pre>'; 
echo(print_r($dl)); ///Проверка, что массив пришел
echo '</pre><br><br><br>';
$dl = $dl->response->upload_url; ///Получаем ссылку загрузки от Вконтакте
$file = new CURLFile(realpath("$imga")); ///Загружаем картинку 
$ch = curl_init($dl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
    'photo' => $file
));
$data = curl_exec($ch);
curl_close($ch);
///Получаем данные для сохранения картинки             
$fot = $data; ///Получаем данные из массива
$fot = json_decode($data); ///Декодируем json
$fot = $fot->photo; ///Получаем данные из массива
$hash = json_decode($data); ///Декодируем json
$hash = $hash->hash; ///Получаем данные из массива
$serv = json_decode($data); ///Декодируем json
$serv = $serv->server; ///Получаем данные из массива

///Сохраняем фото на сервер Вконтакте
echo "Проверка полученных переменных.".$hash."-".$serv."-".$fot;
$savephoto = 'https://api.vk.com/method/photos.saveWallPhoto?group_id='.$myidgr.'&hash='.$hash.'&server='.$serv.'&photo='.$fot.'&access_token='.$tok;
$result = file_get_contents($savephoto);
$fok = json_decode($result, true); ///Декодируем json
echo '<pre>';
echo(print_r($fok));///Проверка, что массив пришел
echo '</pre><br><br><br>';
$fok = $fok->response->id; ///Получаем данные из массива

///Вырезаем данные из информации после сохранения на сервер (Использовать если не работает переменная $result)
$fok = substr($result, strpos($result,'"id":"')+6, strlen($result)); ///Отрезаем начало до photo

///Создаем сообщение на стену
$result11 = 'https://api.vk.com/method/wall.post?owner_id=-'.$myidgr.'&attachments='.$fok.'&access_token='.$tok;
$result1 = file_get_contents($result11); ///Ставим "-" перед перемнной $myidgr если выкладываем на стену сообщества
$fok = json_decode($result1, true);
echo '<pre>';
echo(print_r($fok));///Проверка, что все прошло успешно
echo '</pre><br><br><br>';
Answer 1

Ну так в ошибке написано: Один из указанных параметров отсутствует или неправильный: photo не определено

скорее всего

$file = new CURLFile(realpath("$imga"));

Возвращает не то, что вам нужно, возможно он не находить локальный файл Больше диагностики не помешало-бы, что-бы знать что загружают и их какого файла

READ ALSO
WebSockets - потоковая выдача

WebSockets - потоковая выдача

У меня есть веб-сокет сервер, основанный на Gomoob кодеЯ отсылаю сообщения этому серверу для пересылки клиентам, это файлы которые передаются...

220
Как отправить картинку POST запросом NodeJS

Как отправить картинку POST запросом NodeJS

На одном сервере имеется картинкаКак с помощью NodeJS отправить картинку на другой сервер и принять её там с средствами PHP?

392
Как заменить имя объекта в json-файле

Как заменить имя объекта в json-файле

Есть json-файл сохранённый в строке вида {"Org1":[{"a":1,"b":2},{

224