すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo VOD:PHP SDK を使用したファイルのアップロード

最終更新日:Jan 29, 2026

このトピックでは、PHP 用のサーバー側アップロードソフトウェア開発キット (SDK) を使用して、さまざまなメディアファイルを ApsaraVideo VOD のストレージにアップロードする方法について、詳細な例を挙げて説明します。

概要

説明

PHP 開発では、B/S (ブラウザ/サーバー) アーキテクチャを推奨します。

PHP アップロード SDK は、ApsaraVideo VOD のサーバー側 SDK の一般的なプロセスに従います。詳細については、「アップロードプロセス」をご参照ください。PHP アップロード SDK を使用する基本的なプロセスは次のとおりです。

  1. 前提条件を満たします。詳細については、「前提条件」をご参照ください。

  2. PHP アップロード SDK を統合します。詳細については、「PHP アップロード SDK の統合」をご参照ください。

  3. アップロード情報を設定することを含む、アップロードロジックを実装します。

  4. PHP アップロード SDK のデフォルトのエンドポイントは cn-shanghai (中国 (上海)) です。他のリージョンにメディアファイルをアップロードするには、AliyunVodUploader を初期化する際にリージョンを指定できます。ApsaraVideo VOD がサポートするエンドポイントの詳細については、「エンドポイント」をご参照ください。

    次の例は、アップロードリージョンを cn-beijing (中国 (北京)) に設定する方法を示しています。

    $apiRegionId = 'cn-beijing';  // アップロード先のリージョン
    $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret, $apiRegionId);

前提条件

  • ApsaraVideo VOD が有効化されていること。詳細については、「ApsaraVideo VOD の有効化」をご参照ください。

  • 指定されたリージョンのストレージパスやコールバック設定など、アップロードに必要なシステム設定が構成されていること。詳細については、「ストレージバケットの管理」および「コールバックの設定」をご参照ください。

  • ApsaraVideo VOD にアクセスするための RAM ユーザーが作成されていること。Alibaba Cloud アカウントの AccessKey ペアの漏洩によるセキュリティリスクを防ぐため、RAM ユーザーを作成し、その RAM ユーザーに ApsaraVideo VOD へのアクセスに必要な権限を付与することを推奨します。その後、RAM ユーザーの AccessKey ペア を使用して ApsaraVideo VOD にアクセスできます。詳細については、「RAM ユーザーの作成と権限付与」をご参照ください。

  • ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていること。詳細については、「Linux、macOS、Windows で環境変数を設定する」をご参照ください。

    重要
    • Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。API 操作の呼び出しや日常の O&M (運用保守) には、RAM ユーザーの AccessKey ペアを使用することを推奨します。

    • AccessKey ID と AccessKey Secret をプロジェクトコードにハードコーディングしないでください。ハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが危険にさらされる可能性があります。

  • 任意。セキュリティトークンサービス (STS) を使用して ApsaraVideo VOD にアクセスする場合、RAM ユーザー用のロールを作成し、そのロールに ApsaraVideo VOD へのアクセスに必要な権限を付与します。詳細については、「STS トークンの取得」をご参照ください。

PHP アップロード SDK の統合

  1. SDK とデモをダウンロードします。

  2. VodUploadSDK-PHP_1.0.3.zip を解凍し、VodUploadSDK-PHP_1.0.3 ディレクトリから voduploadsdk フォルダをプロジェクトにコピーします。

PHP アップロード SDK のディレクトリ構造

パス:VodUploadSDK-PHP_1.0.3/voduploadsdk/uploader

  • UploadVideoRequest.php

    ディレクトリ

    説明

    UploadVideoRequest

    動画をアップロードするためのリクエストクラスです。フィールドの詳細については、「CreateUploadVideo」をご参照ください。

  • UploadImageRequest.php

    ディレクトリ

    説明

    UploadImageRequest

    画像をアップロードするためのリクエストクラスです。フィールドの詳細については、「CreateUploadImage」をご参照ください。

  • UploadAttachedMediaRequest.php

    ディレクトリ

    説明

    UploadAttachedMediaRequest

    補助メディアアセットをアップロードするためのリクエストクラスです。フィールドの詳細については、「CreateUploadAttachedMedia」をご参照ください。

  • AliyunVodUploader.php

    ディレクトリ

    説明

    __construct

    アップロード用の AccessKey、ApsaraVideo VOD センター、およびエンドポイントを設定します。詳細については、「AccessKey」および「ApsaraVideo VOD リージョン ID」をご参照ください。

    uploadLocalVideo

    ローカル動画をアップロードするためのインターフェイスです。

    uploadWebVideo

    Web 動画をアップロードするためのインターフェイスです。

    uploadLocalImage

    ローカル画像をアップロードします。

    uploadWebImage

    Web 画像をアップロードします。

    uploadLocalAttachedMedia

    ローカル補助メディアアセットをアップロードします。

    uploadWebAttachedMedia

    Web 補助メディアアセットをアップロードします。

    uploadLocalM3u8

    ローカル M3U8 ファイルをアップロードします。

    uploadWebM3u8

    Web M3U8 ファイルをアップロードします。

    parseM3u8File

    M3U8 マニフェストを解析して、シャードアドレスのリストを取得します。

    setEcsRegionId

    該当する場合、アップロードスクリプトがデプロイされている ECS インスタンスのリージョンを設定します。リージョンが ApsaraVideo VOD のストレージリージョンと同じ場合、内部ネットワークアップロードが自動的に有効になります。

    setEnableSSL

    SSL を有効にする (ネットワークリクエストに HTTPS を使用する) かどうかを指定します。関連する拡張機能がインストールされていない、または正しく設定されていない場合の問題を防ぐため、デフォルトでは無効になっています。

    uploadProgressCallback

    アップロードの進捗状況に関するコールバック関数です。この関数は再書き込みできます。

  • AliyunVodUtils.php

    ディレクトリ

    説明

    AliyunVodUtils

    文字列の切り捨て、ファイル拡張子の取得、ファイル名の取得などの静的関数を提供するユーティリティクラスです。

    AliyunVodLog

    簡単な出力用のログクラスです。`logSwitch` はログスイッチです。

    AliyunVodDownloader

    Web ファイルをダウンロードします。

    AliyunVodReportUpload

    アップロードの進捗を報告します。

    AliyunVodError

    エラーコードを定義します。

パス:VodUploadSDK-PHP_1.0.3/voduploadsdk

  • aliyun-php-sdk-core:アップロード SDK のベースクラスを提供する依存関係です。Alibaba Cloud API の署名、HTTP リクエスト、その他のコア機能をカプセル化します。

  • aliyun-php-sdk-vod:ApsaraVideo VOD のサーバー側 API SDK です。ApsaraVideo VOD API のリクエストをカプセル化します。

  • aliyun-php-sdk-oss:アップロード SDK の OSS クラスを提供する依存関係です。OSS のアップロード操作やその他の関連機能をカプセル化します。

パス:VodUploadSDK-PHP_1.0.3/samples

  • uploadVideo.php:動画をアップロードするためのサンプルコードです。

  • uploadImage.php:画像をアップロードするためのサンプルコードです。

  • uploadAttachedMedia.php:補助メディアアセットをアップロードするためのサンプルコードです。

シナリオ 1:音声ファイルと動画ファイルのアップロード

標準の音声ファイルと動画ファイル

以下の種類の音声ファイルと動画ファイルをアップロードできます。

  • マルチパートアップロードを使用してローカルファイルをアップロードできます。単一ファイルのサイズは最大 48.8 TB です。レジュームアップロードはサポートされていません。詳細については、`testUploadLocalVideo` 関数をご参照ください。

  • ファイル URL を指定して Web ファイルをアップロードできます。単一ファイルのサイズは最大 48.8 TB です。このメソッドでは、Web ファイルをアップロードする前にローカルディスクにダウンロードする必要があります。ローカルディスクに十分な空き容量があることを確認してください。詳細については、`testUploadWebVideo` 関数をご参照ください。

サンプルコードの表示

<?php
/**
 * Created by Aliyun ApsaraVideo VOD.
 */
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
date_default_timezone_set('PRC');
// ローカル動画のアップロードをテストします。
function testUploadLocalVideo($accessKeyId, $accessKeySecret, $filePath)
{
    try {
        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
        $uploadVideoRequest = new UploadVideoRequest($filePath, 'testUploadLocalVideo via PHP-SDK');
        //$uploadVideoRequest->setCateId(1);
        // CoverURL の例:http://example.com/example****.jpg
        //$uploadVideoRequest->setCoverURL("<your CoverURL>");
        //$uploadVideoRequest->setTags('test1,test2');
        //$uploadVideoRequest->setStorageLocation('outin-xx.oss-cn-beijing.aliyuncs.com');
        //$uploadVideoRequest->setTemplateGroupId('6ae347b0140181ad371d197ebe289****');
        $userData = array(
            // コールバックの例:https://demo.aliyundoc.com/ProcessMessageCallback
            "MessageCallback"=>array("CallbackURL"=>"<your callback URL>"),
            "Extend"=>array("localId"=>"xxx", "test"=>"www")
        );
        $uploadVideoRequest->setUserData(json_encode($userData));
        $res = $uploader->uploadLocalVideo($uploadVideoRequest);
        print_r($res);
    } catch (Exception $e) {
        printf("testUploadLocalVideo Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
            $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
    }
}
// Web 動画のアップロードをテストします。
function testUploadWebVideo($accessKeyId, $accessKeySecret, $fileURL)
{
    try {
        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
        $uploadVideoRequest = new UploadVideoRequest($fileURL, 'testUploadWebVideo via PHP-SDK');
        $res = $uploader->uploadWebVideo($uploadVideoRequest);
        print_r($res);
    } catch (Exception $e) {
        printf("testUploadWebVideo Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
            $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
    }
}

####  テストコードの実行   ####
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API へのアクセス権限を持っています。API アクセスや日常の O&M には RAM ユーザーの AccessKey ペアを使用してください。
// AccessKey ID と AccessKey Secret をプロジェクトコードにハードコーディングしないでください。これにより、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが危険にさらされる可能性があります。
// この例では、環境変数から AccessKey ペアを使用して API アクセスを認証する方法を示します。サンプルコードを実行する前に、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定してください。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$localFilePath = '/opt/video/sample.mp4';
// testUploadLocalVideo($accessKeyId, $accessKeySecret, $localFilePath);

// webFileURL の例:http://example-bucket-****.cn-shanghai.aliyuncs.com/b55b904bc612463b812990b7c8cc****/daa30814c0c340cf8199926f78aa****-a0bc05ba62c3e95cc672e88b8281****-ld.mp4?auth_key=1608774986-0-0-c56acd302bea0c331370d8ed6865****
$webFileURL = '<your webFileURL>';
testUploadWebVideo($accessKeyId, $accessKeySecret, $webFileURL);

M3U8 動画ファイル

次のコードは例です。

サンプルコードの表示

<?php
/**
 * Created by Aliyun ApsaraVideo VOD.
 */
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
date_default_timezone_set('PRC');
// ローカル M3U8 動画のアップロードをテストします。
function testUploadLocalM3u8($accessKeyId, $accessKeySecret, $m3u8FilePath)
{
    try {
        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
        $uploadVideoRequest = new UploadVideoRequest($m3u8FilePath, 'testUploadLocalM3u8 via PHP-SDK');
        // API を呼び出して M3U8 ファイルからシャードアドレスのリストを解析します。解析結果が不正確な場合は、アドレスリストを自分で連結してください。デフォルトでは、シャードファイルと M3U8 ファイルは同じディレクトリにあります。
        $sliceFiles = $uploader->parseM3u8File($m3u8FilePath);
        //print_r($sliceFiles);
        $res = $uploader->uploadLocalM3u8($uploadVideoRequest, $sliceFiles);
        print_r($res);
    } catch (Exception $e) {
        printf("testUploadLocalM3u8 Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
            $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
    }
}

// Web M3U8 動画のアップロードをテストします。
function testUploadWebM3u8($accessKeyId, $accessKeySecret, $m3u8FileUrl)
{
    try {
        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
        $uploadVideoRequest = new UploadVideoRequest($m3u8FileUrl, 'testUploadWebM3u8 via PHP-SDK');
        // API を呼び出して M3U8 ファイルからシャードアドレスのリストを解析します。解析結果が不正確な場合は、アドレスリストを自分で連結してください。デフォルトでは、シャードファイルと M3U8 ファイルは同じディレクトリにあります。
        $sliceFileUrls = $uploader->parseM3u8File($m3u8FileUrl);
        //print_r($sliceFileUrls);
        $res = $uploader->uploadWebM3u8($uploadVideoRequest, $sliceFileUrls);
        print_r($res);
    } catch (Exception $e) {
        printf("testUploadWebM3u8 Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
            $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
    }
}
####  テストコードの実行   ####
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API へのアクセス権限を持っています。API アクセスや日常の O&M には RAM ユーザーの AccessKey ペアを使用してください。
// AccessKey ID と AccessKey Secret をプロジェクトコードにハードコーディングしないでください。これにより、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが危険にさらされる可能性があります。
// この例では、環境変数から AccessKey ペアを使用して API アクセスを認証する方法を示します。サンプルコードを実行する前に、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定してください。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$localM3u8FilePath = '/opt/video/m3u8/sample.m3u8';
//testUploadLocalM3u8($accessKeyId, $accessKeySecret, $localM3u8FilePath);

// webM3u8FileURL の例:http://example-bucket-****.cn-shanghai.aliyuncs.com/b55b904bc612463b812990b7c8cc****/daa30814c0c340cf8199926f78aa****-195a25af366b5edae324c47e99a0****-ld.m3u8?auth_key=1608775606-0-0-9fb038deaecd009dadd86721c585****
$webM3u8FileURL = '<your webM3u8FileURL>';
//testUploadWebM3u8($accessKeyId, $accessKeySecret, $webM3u8FileURL);

アップロードアクセラレーション

大容量ファイル (GB または TB 単位) のアップロードや、リージョンをまたいだアップロード (例えば、中国本土から シンガポール リージョンのストレージへのアップロードなど) を行う場合は、アップロードアクセラレーション機能を有効にできます。詳細については、「有効化の方法」をご参照ください。この機能を有効にした後、アップロード設定の UserData オブジェクトに AccelerateConfig キーと値のペア を追加する必要があります。UserData オブジェクトが存在しない場合は作成してください。次のコードは例です。

$userData = array(  
    "AccelerateConfig"=>array("Type"=>"oss","Domain"=>"****Bucket.oss-accelerate.aliyuncs.com"),
);       
$uploadVideoRequest->setUserData(json_encode($userData));

パラメーターの説明

名前

タイプ

説明

Type

string

有効にするアップロードアクセラレーションのタイプです。`oss` のみがサポートされています。

Domain

string

ユーザーのバケットのアクセラレーションエンドポイントです。デフォルトで HTTPS が使用されます。

説明

有効化後に割り当てられたアクセラレーションエンドポイントを使用してください。例:`vod-*******.oss-accelerate.aliyuncs.com`。

シナリオ 2:画像のアップロード

サンプルコードの表示

サンプルコードの表示

<?php
/**
 * Created by Aliyun ApsaraVideo VoD.
 * User: https://www.aliyun.com/product/vod
 */

require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';

date_default_timezone_set('PRC');

// ローカル画像のアップロードをテストします。
function testUploadLocalImage($accessKeyId, $accessKeySecret, $filePath)
{
    try {
        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
        $uploadImageRequest = new UploadImageRequest($filePath, 'testUploadLocalImage via PHP-SDK');
        $uploadImageRequest->setCateId(1000009458);
        $res = $uploader->uploadLocalImage($uploadImageRequest);
        print_r($res);
    } catch (Exception $e) {
        printf("testUploadLocalImage Failed, ErrorMessage: %s\n", $e->getMessage());
    }

}

// Web 画像のアップロードをテストします。
function testUploadWebImage($accessKeyId, $accessKeySecret, $fileURL)
{
    try {
        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
        $uploadImageRequest = new UploadImageRequest($fileURL, 'testUploadWebImage via PHP-SDK');
        $uploadImageRequest->setCateId(1000009458);
        $res = $uploader->uploadWebImage($uploadImageRequest);
        print_r($res);
    } catch (Exception $e) {
        printf("testUploadWebImage Failed, ErrorMessage: %s\n", $e->getMessage());
    }

}



####  テストコードの実行   ####
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API へのアクセス権限を持っています。API アクセスや日常の O&M には RAM ユーザーの AccessKey ペアを使用してください。
// AccessKey ID と AccessKey Secret をプロジェクトコードにハードコーディングしないでください。これにより、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが危険にさらされる可能性があります。
// この例では、環境変数から AccessKey ペアを使用して API アクセスを認証する方法を示します。サンプルコードを実行する前に、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定してください。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');

$localFilePath = '/opt/image/test-image.jpg';
//testUploadLocalImage($accessKeyId, $accessKeySecret, $localFilePath);

$webFileURL = 'http://vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F38****.gif';
testUploadWebImage($accessKeyId, $accessKeySecret, $webFileURL);

シナリオ 3:補助メディアアセットのアップロード

次のコードは例です。

サンプルコードの表示

サンプルコードの表示

<?php
/**
 * Created by Aliyun ApsaraVideo VoD.
 * User: https://www.aliyun.com/product/vod
 */

require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';

date_default_timezone_set('PRC');

// ローカル補助メディアアセットのアップロードをテストします。
function testUploadLocalAttachedMedia($accessKeyId, $accessKeySecret, $filePath)
{
    try {
        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
        $uploadAttachedRequest = new UploadAttachedMediaRequest($filePath, 'watermark',
            'testUploadLocalAttachedMedia via PHP-SDK');
        //$uploadAttachedRequest->setCateId(100000****);
        $res = $uploader->uploadLocalAttachedMedia($uploadAttachedRequest);
        print_r($res);
    } catch (Exception $e) {
        printf("testUploadLocalAttachedMedia Failed, ErrorMessage: %s\n", $e->getMessage());
    }

}

// Web 補助メディアアセットのアップロードをテストします。
function testUploadWebAttachedMedia($accessKeyId, $accessKeySecret, $fileURL)
{
    try {
        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
        $uploadAttachedRequest = new UploadAttachedMediaRequest($fileURL, 'watermark',
            'testUploadWebAttachedMedia via PHP-SDK');
        //$uploadAttachedRequest->setCateId(100000****);
        $res = $uploader->uploadWebAttachedMedia($uploadAttachedRequest);
        print_r($res);
    } catch (Exception $e) {
        printf("testUploadWebAttachedMedia Failed, ErrorMessage: %s\n", $e->getMessage());
    }

}


####  テストコードの実行   ####
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API へのアクセス権限を持っています。API アクセスや日常の O&M には RAM ユーザーの AccessKey ペアを使用してください。
// AccessKey ID と AccessKey Secret をプロジェクトコードにハードコーディングしないでください。これにより、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが危険にさらされる可能性があります。
// この例では、環境変数から AccessKey ペアを使用して API アクセスを認証する方法を示します。サンプルコードを実行する前に、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定してください。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');

$localFilePath = '/opt/image/test.png';
//testUploadLocalAttachedMedia($accessKeyId, $accessKeySecret, $localFilePath);

$webFileURL = 'http://vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F38****.gif';
testUploadWebAttachedMedia($accessKeyId, $accessKeySecret, $webFileURL);

参考資料

メディアアップロードの概要

STS SDK の概要