Как реализовать скачивание файла по url из API яндекс диска?

Я делаю скачивание файлов через API Яндекс диска, посредством CURL в php.

Пример моего кода:

$token = '....';
$link = 'название файла';
$ch = curl_init('https://cloud-api.yandex.net/v1/disk/resources/download?path=/load/'.$link);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth ' . $token));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
$res = json_decode($res, true);

В ответ я получаю ссылку на скачивание файла в формате:

{
  "href": "https://downloader.disk.yandex.ru/disk/b97d4e4f3b...&limit=0&content=im...",
  "method": "GET",
  "templated": false
}

Если скопировать ссылку и ввести в браузер, файл начнет скачивание. Надо иметь ввиду, что ссылка не имеет расширения в конце.

Как мне сделать тоже самое скачивание на php? Т.е. я своего пользователя отправлю на страницу php в которой обработаю curl и у него должна начаться скачка файла.

Я пробовал вариант в котором создаю файл на своем сервере и через fopen и curl пытаюсь записать в него результат. Но это не привело к успеху. Файл создается, но остается пустым.


$file = fopen('/uploads/testname.jpeg', 'w');
$token = '....';
$ch = curl_init($res['href']); // ссылка полученная с яндекс диска.
curl_setopt($ch, CURLOPT_FILE, $file);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth ' . $token));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$result = curl_exec($ch);
curl_close($ch);
fclose($file);

Ответы (0 шт):