tigusigalpa/yandex-disk-php

PHP SDK for Yandex Disk API integration

Installs: 1

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/tigusigalpa/yandex-disk-php

v1.0.0 2025-11-22 17:30 UTC

This package is auto-updated.

Last update: 2025-11-22 17:35:18 UTC


README

Yandex Disk PHP SDK

PHP Version License Yandex Disk API Laravel

🌐 Π―Π·Ρ‹ΠΊ: Русский | English

ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½Ρ‹ΠΉ PHP SDK для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Yandex Disk API. Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° прСдоставляСт чистый, ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ интСрфСйс для управлСния Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΏΠ°ΠΏΠΊΠ°ΠΌΠΈ Π½Π° ЯндСкс ДискС с ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ API.

πŸ“‹ Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ API

ΠœΠ΅Ρ‚ΠΎΠ΄ Π­Π½Π΄ΠΏΠΎΠΈΠ½Ρ‚ ДокумСнтация ОписаниС
getAuthorizationUrl() - OAuth Guide ГСнСрация URL Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ OAuth
getCapacity() GET / Disk Info ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ дискС
getMeta() GET /resources Metadata ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… рСсурса
addMeta() PATCH /resources Add Metadata Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…
getAllFiles() GET /resources/files All Files ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ плоского списка всСх Ρ„Π°ΠΉΠ»ΠΎΠ²
getRecentUploads() GET /resources/last-uploaded Recent Uploads ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅Π΄Π°Π²Π½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²
getRecentPublished() GET /resources/public Published Files ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²
createFolder() PUT /resources Create Folder Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΏΠΊΠΈ
uploadFile() GET /resources/upload Upload File Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»Π°
uploadFromUrl() POST /resources/upload Upload from URL Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»Π° ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°
downloadFile() GET /resources/download Download File Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°
copy() POST /resources/copy Copy Resource ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°/ΠΏΠ°ΠΏΠΊΠΈ
move() POST /resources/move Move Resource ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°/ΠΏΠ°ΠΏΠΊΠΈ
delete() DELETE /resources Delete Resource Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°/ΠΏΠ°ΠΏΠΊΠΈ
publish() PUT /resources/publish Publish Resource ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ рСсурса
unpublish() PUT /resources/unpublish Unpublish Resource ΠžΡ‚ΠΌΠ΅Π½Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ рСсурса
getAvailablePublicSettings() GET /public/resources/public-settings/available Available Settings ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ доступных ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… настроСк
getPublicSettings() GET /public/resources/public-settings Public Settings ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… настроСк рСсурса
changePublicSettings() PUT /resources/public Change Settings ИзмСнСниС ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… настроСк
getPublicResourceMeta() GET /public/resources Public Metadata ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ рСсурса
downloadPublicResource() GET /public/resources/download Download Public Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ рСсурса
savePublicResource() POST /public/resources/save Save Public Resource Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ рСсурса
getTrash() GET /trash/resources Trash List ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ содСрТимого ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹
restoreFromTrash() PUT /trash/resources/restore Restore from Trash ВосстановлСниС ΠΈΠ· ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹
clearTrash() DELETE /trash/resources Clear Trash ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹
getOperationStatus() GET /operations/{id} Operation Status ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ статуса ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
getPublicResourcesOwnedByUser() GET /public/resources/admin/public-resources Owned Resources Администратор: ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ рСсурсы ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
getPublicResourcesAccessedByUser() GET /public/resources/admin/accessible-resources Accessible Resources Администратор: доступныС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ рСсурсы
unpublishUserResource() PUT /public/resources/admin/unpublish Admin Unpublish Администратор: ΠΎΡ‚ΠΌΠ΅Π½Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ рСсурса

πŸ” ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ OAuth-Ρ‚ΠΎΠΊΠ΅Π½Π°

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Yandex Disk API Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ OAuth-Ρ‚ΠΎΠΊΠ΅Π½. Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ этим шагам:

1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ прилоТСния Π½Π° ЯндСкс OAuth

  1. Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ своСй ΡƒΡ‡Ρ‘Ρ‚Π½ΠΎΠΉ записью Π½Π° ЯндСкс OAuth: https://oauth.yandex.ru/
  2. НаТмитС Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ "+ Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ"
  3. Π’ΠΎ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΠΎΠΊΠ½Π΅ "КакоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ?" ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ "Для доступа ΠΊ API ΠΈΠ»ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ" ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ "ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ созданию"
  4. Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΡƒ:
    • НазваниС сСрвиса: Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ вашСго прилоТСния
    • ΠŸΠΎΡ‡Ρ‚Π° для связи: Π’Π°Ρˆ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½Ρ‹ΠΉ email
    • Доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ: Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΡ€Π°Π²Π°:
      • cloud_api:disk.write β€” Π—Π°ΠΏΠΈΡΡŒ Π² любом мСстС Π½Π° ДискС
      • cloud_api:disk.read β€” Π§Ρ‚Π΅Π½ΠΈΠ΅ всСго Диска
      • cloud_api:disk.app_folder β€” Доступ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ прилоТСния Π½Π° ДискС
      • cloud_api:disk.info β€” Доступ ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ДискС

ПослС создания прилоТСния Π²Π°ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹:

  • ClientID β€” понадобится для получСния OAuth-Ρ‚ΠΎΠΊΠ΅Π½Π°
  • Client secret β€” для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ЯндСкс Диском ΠΎΠ½ Π½Π΅ понадобится

2. Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ссылки Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ getAuthorizationUrl() для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ссылки Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ:

use Tigusigalpa\YandexDisk\YandexDiskClient;

$clientId = 'ваш_client_id_ΠΈΠ·_настроСк_прилоТСния';
$authUrl = YandexDiskClient::getAuthorizationUrl($clientId);

echo "ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ссылкС для Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ:\n";
echo $authUrl;
// Π’Ρ‹Π²ΠΎΠ΄: https://oauth.yandex.ru/authorize?response_type=token&client_id=<ClientID>

Или сформируйтС ссылку Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ:

https://oauth.yandex.ru/authorize?response_type=token&client_id=<ClientID>

3. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½Π°

  1. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ сгСнСрированной ссылкС
  2. ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ Π² своём Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π΅ ЯндСкса (Ссли Π΅Ρ‰Π΅ Π½Π΅ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹)
  3. Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ доступ для вашСго прилоТСния
  4. ПослС подтвСрТдСния Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π½Π° страницу с Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ Π² URL
  5. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΠΊΠ΅Π½ Π½Π° страницС, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ y0__xCD2tUFGKDjOyD2-Myl...

4. ИспользованиС Ρ‚ΠΎΠΊΠ΅Π½Π°

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈ создании ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°:

use Tigusigalpa\YandexDisk\YandexDiskClient;

$accessToken = 'ваш_oauth_Ρ‚ΠΎΠΊΠ΅Π½';
$client = new YandexDiskClient($accessToken);

// Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ API
$diskInfo = $client->getCapacity();

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ дискС

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ дискС
$diskInfo = $client->getCapacity();
echo "Использовано: " . $diskInfo['used'] . " Π±Π°ΠΉΡ‚\n";
echo "ВсСго: " . $diskInfo['total_space'] . " Π±Π°ΠΉΡ‚\n";
echo "Π‘Π²ΠΎΠ±ΠΎΠ΄Π½ΠΎ: " . ($diskInfo['total_space'] - $diskInfo['used']) . " Π±Π°ΠΉΡ‚\n";

Π Π°Π±ΠΎΡ‚Π° с рСсурсами

use Tigusigalpa\YandexDisk\Models\{Resource, DiskInfo};

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ дискС
$diskData = $client->getCapacity();
$diskInfo = DiskInfo::fromArray($diskData);

echo "ВсСго: " . $diskInfo->getTotalSpace() . " Π±Π°ΠΉΡ‚\n";
echo "Использовано: " . $diskInfo->getUsedSpace() . " Π±Π°ΠΉΡ‚\n";
echo "Π‘Π²ΠΎΠ±ΠΎΠ΄Π½ΠΎ: " . $diskInfo->getFreeSpace() . " Π±Π°ΠΉΡ‚\n";
echo "ИспользованиС: " . $diskInfo->getUsagePercentage() . "%\n";
echo "ΠšΠΎΡ€Π·ΠΈΠ½Π°: " . $diskInfo->getTrashSize() . " Π±Π°ΠΉΡ‚\n";
echo "ΠŸΠ»Π°Ρ‚Π½Ρ‹ΠΉ: " . ($diskInfo->isPaid() ? 'Π”Π°' : 'НСт') . "\n";

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… рСсурса
$meta = $client->getMeta('/disk/MyFile.txt');
$resource = Resource::fromArray($meta);

echo "Имя: " . $resource->getName() . "\n";
echo "Π’ΠΈΠΏ: " . $resource->getType() . "\n";        // 'file' ΠΈΠ»ΠΈ 'dir'
echo "Π Π°Π·ΠΌΠ΅Ρ€: " . $resource->getSize() . " Π±Π°ΠΉΡ‚\n";
echo "Π‘ΠΎΠ·Π΄Π°Π½: " . $resource->getCreated() . "\n";
echo "Π˜Π·ΠΌΠ΅Π½Ρ‘Π½: " . $resource->getModified() . "\n";
echo "MIME Ρ‚ΠΈΠΏ: " . $resource->getMimeType() . "\n";
echo "MD5: " . $resource->getMd5() . "\n";
echo "SHA256: " . $resource->getSha256() . "\n";

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»Π°

// Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»Π°
$result = $client->uploadFile(
    '/local/path/file.txt',
    '/disk/MyFolder/file.txt',
    true  // ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ»
);

echo "Бтатус: " . $result['status'] . "\n";  // 201 для успСха
echo "УспСшно: " . ($result['success'] ? 'Π”Π°' : 'НСт') . "\n";

Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°

// Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°
$success = $client->downloadFile(
    '/disk/MyFile.txt',
    '/local/path/downloaded.txt'
);

echo $success ? "Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ\n" : "Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ\n";

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°

// ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°
$result = $client->copy(
    '/disk/original.txt',
    '/disk/copy.txt',
    true  // ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, Ссли сущСствуСт
);

echo "Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π²: " . $result['path'] . "\n";

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°

// ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°
$result = $client->move(
    '/disk/old-location/file.txt',
    '/disk/new-location/file.txt',
    true  // ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, Ссли сущСствуСт
);

echo "ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΎ Π²: " . $result['path'] . "\n";

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°

// Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°
$result = $client->delete(
    '/disk/file.txt',
    true  // ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ (false = Π² ΠΊΠΎΡ€Π·ΠΈΠ½Ρƒ)
);

echo "Π£Π΄Π°Π»Π΅Π½ΠΎ\n";

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠ°ΠΏΠΊΠ°ΠΌΠΈ

// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΏΠΊΠΈ
$result = $client->createFolder('/disk/MyNewFolder');
echo "Папка создана: " . $result['path'] . "\n";

// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ структуры ΠΏΠ°ΠΏΠΎΠΊ
$client->createFolder('/disk/Projects');
$client->createFolder('/disk/Projects/WebDev');
$client->createFolder('/disk/Projects/WebDev/Site1');

Бписок Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΠ°ΠΏΠΎΠΊ

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ всСх Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° дискС
$allFiles = $client->getAllFiles(limit: 100, offset: 0);
echo "ВсСго Ρ„Π°ΠΉΠ»ΠΎΠ²: " . $allFiles['total'] . "\n";

foreach ($allFiles['items'] as $file) {
    $resource = Resource::fromArray($file);
    echo "- " . $resource->getName() . " (" . $resource->getType() . ")\n";
}

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅Π΄Π°Π²Π½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²
$recent = $client->getRecentUploads(limit: 10);
foreach ($recent['items'] as $file) {
    $resource = Resource::fromArray($file);
    echo "- " . $resource->getName() . "\n";
}

// Бписок Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ
$dirMeta = $client->getMeta('/disk/MyFolder');
$directory = Resource::fromArray($dirMeta);

if ($directory->isDir()) {
    foreach ($directory->getItems() as $item) {
        echo "- " . $item->getName() . " (" . $item->getSize() . " Π±Π°ΠΉΡ‚)\n";
    }
    echo "ВсСго элСмСнтов: " . $directory->getTotalItems() . "\n";
}

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ

// Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…
$result = $client->addMeta('/disk/file.txt', [
    'description' => 'ΠœΠΎΡ‘ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ описаниС',
    'author' => 'John Doe',
    'version' => '1.0.0'
]);

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… рСсурса
$meta = $client->getMeta('/disk/file.txt');
$resource = ResourceResponse::fromArray($meta);

// Доступ ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ свойствам
$customProps = $resource->toArray()['custom_properties'] ?? [];

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌ доступом

ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ рСсурса

// Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌ
$result = $client->publish('/disk/document.pdf');

echo "ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ URL: " . $result['public_url'] . "\n";
// Π’Ρ‹Π²ΠΎΠ΄: https://yadi.sk/d/abc123...

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²
$published = $client->getRecentPublished(limit: 10);

foreach ($published['items'] as $file) {
    $resource = Resource::fromArray($file);
    
    if ($resource->isPublished()) {
        echo "- " . $resource->getName() . "\n";
        echo "  URL: " . $resource->getPublicUrl() . "\n";
        echo "  ΠšΠ»ΡŽΡ‡: " . $resource->getPublicKey() . "\n";
    }
}

ΠžΡ‚ΠΌΠ΅Π½Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ рСсурса

// ΠžΡ‚ΠΎΠ·Π²Π°Ρ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ доступ
$result = $client->unpublish('/disk/document.pdf');

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ настройками

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ доступных ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… настроСк
$available = $client->getAvailablePublicSettings();
print_r($available);

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… настроСк рСсурса
$settings = $client->getPublicSettings('/disk/document.pdf');
print_r($settings);

// ИзмСнСниС ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… настроСк
$client->changePublicSettings('/disk/document.pdf', [
    'access' => [
        'type' => 'public',
        'view' => true,
        'comment' => true,
        'edit' => false
    ]
]);

Π Π°Π±ΠΎΡ‚Π° с ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ рСсурсами

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ рСсурса
$publicMeta = $client->getPublicResourceMeta('https://yadi.sk/d/abc123...');
echo "ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»: " . $publicMeta['name'] . "\n";

// Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ рСсурса
$client->downloadPublicResource('https://yadi.sk/d/abc123...', '/local/downloaded.pdf');

// Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ рСсурса Π½Π° ваш диск
$saveResult = $client->savePublicResource(
    'https://yadi.sk/d/abc123...',
    'saved-document.pdf',
    '/disk/downloads/'
);

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Π·ΠΈΠ½ΠΎΠΉ

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ содСрТимого ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹
$trash = $client->getTrash('/', 50, 0);
foreach ($trash['items'] as $item) {
    echo "- " . $item['name'] . " (ΡƒΠ΄Π°Π»Ρ‘Π½: " . $item['deleted'] . ")\n";
}

// ВосстановлСниС Ρ„Π°ΠΉΠ»Π° ΠΈΠ· ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹
$restoreResult = $client->restoreFromTrash('/disk/document.pdf');
echo "ВосстановлСно: " . $restoreResult['name'] . "\n";

// ВосстановлСниС с Π½ΠΎΠ²Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ
$client->restoreFromTrash('/disk/document.pdf', 'restored-document.pdf', false);

// Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈΠ· ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹
$client->clearTrash('/disk/document.pdf');

// ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° всСй ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹
$client->clearTrash();

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ· URL

// Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»Π° ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-URL
$uploadResult = $client->uploadFromUrl(
    'https://example.com/document.pdf',
    '/disk/downloads/document.pdf'
);

echo "Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π°Ρ‡Π°Ρ‚Π°\n";

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° статуса ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ссли асинхронная
if (isset($uploadResult['href'])) {
    $operationId = basename($uploadResult['href']);
    $status = $client->getOperationStatus($operationId);
    
    echo "Бтатус: " . $status['status'] . "\n";
    echo "Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ: " . ($status['status'] === 'success' ? 'Π”Π°' : 'НСт') . "\n";
}

// Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ
$client->uploadFromUrl(
    'https://example.com/document.pdf',
    '/disk/downloads/document.pdf',
    true // ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ пСрСнаправлСния
);

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ администратора ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… рСсурсов, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ
$ownedResources = $client->getPublicResourcesOwnedByUser(
    'user-uid-123',
    'org-id-456',
    20,
    0
);

foreach ($ownedResources['items'] as $resource) {
    echo "- " . $resource['name'] . " (" . $resource['public_url'] . ")\n";
}

// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… рСсурсов, доступных ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠΉ доступ)
$accessibleResources = $client->getPublicResourcesAccessedByUser(
    'user-uid-123',
    'org-id-456',
    true, // Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠΉ доступ
    20
);

// ΠžΡ‚ΠΌΠ΅Π½Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ рСсурса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΊΠ°ΠΊ администратор
$client->unpublishUserResource(
    'public-key-789',
    'user-uid-123',
    'org-id-456'
);

πŸš€ Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Laravel

Установка

composer require tigusigalpa/yandex-disk-php

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»:

php artisan vendor:publish --provider="Tigusigalpa\YandexDisk\YandexDiskServiceProvider"

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² ваш Ρ„Π°ΠΉΠ» .env:

YANDEX_DISK_ACCESS_TOKEN=ваш_oauth_Ρ‚ΠΎΠΊΠ΅Π½

ИспользованиС

use Tigusigalpa\YandexDisk\Facades\YandexDisk;

// ИспользованиС фасада
$diskInfo = YandexDisk::getCapacity();

// ИспользованиС сСрвис-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°
$client = app('yandex-disk');
$client->uploadFile($localPath, $remotePath);

πŸ”§ ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок

SDK прСдоставляСт ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ:

use Tigusigalpa\YandexDisk\Exceptions\YandexDiskException;

try {
    $client->uploadFile('/path/to/file.txt', '/disk/file.txt');
} catch (YandexDiskException $e) {
    echo "Ошибка: " . $e->getMessage() . "\n";
    echo "Код ошибки: " . $e->getErrorCode() . "\n";
    
    // ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ API, Ссли доступСн
    if ($e->getResponse()) {
        print_r($e->getResponse());
    }
}

πŸ“Š ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ API

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ВсСго ΠŸΡ€ΠΎΡ†Π΅Π½Ρ‚
Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ дискС βœ… 1 1 100%
ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ βœ… 8 8 100%
ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ рСсурсы βœ… 8 8 100%
Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Π·ΠΈΠ½ΠΎΠΉ βœ… 3 3 100%
ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ βœ… 2 2 100%
ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ администратора βœ… 3 3 100%
ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ βœ… 1 1 100%
ВсСго βœ… 26 26 100%

🀝 УчастиС Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅

Π’ΠΊΠ»Π°Π΄Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ΡΡ! НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Pull Request.

πŸ“„ ЛицСнзия

Π­Ρ‚ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΏΠΎΠ΄ MIT License. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ смотритС Π² Ρ„Π°ΠΉΠ»Π΅ LICENSE.

πŸ”— Бсылки

πŸ“ž ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°

Для ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, вопросов ΠΈΠ»ΠΈ Π²ΠΊΠ»Π°Π΄ΠΎΠ²:

Π‘Π΄Π΅Π»Π°Π½ΠΎ с ❀️ для PHP сообщСства

РСсурсы