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

Object Storage Service:PHP

最終更新日:Dec 20, 2023

このトピックでは、サーバー上のPHPで署名を計算し、アップロードコールバックを設定し、フォームアップロードを使用してデータをOSSにアップロードする方法について説明します。

前提条件

  • webサーバーがデプロイされています。

  • ウェブサーバのドメイン名は、インターネットを介してアクセス可能である。

  • webサーバーはPHPを解析できます。 PHPのバージョンを表示するには、php -vコマンドを実行します。

    説明

    PHP 5.0以降をインストールする必要があります。

  • PCのブラウザはJavaScriptをサポートしています。

手順1: webサーバーの設定

このセクションでは、Ubuntu 16.04を例として、さまざまなwebサーバーの環境を構成する方法を示します。 実際のビジネスシナリオに基づいて環境を設定する必要があります。

  • Apache webサーバーを使用する場合は、次の手順に基づいて環境を設定します。 この例ではApache 2.4.18が使用されます。

    • webサーバのパブリックIPアドレスを192.0.2.11に設定します。 これを行うには、/etc/apache2/apache2.conf設定ファイルにServerName 192.0.2.11を追加します。

    • リスニングポートを8080に設定します。 これを行うには、/etc/apache2/ports.conf設定ファイルのポート設定をListen 8080に変更します。

    • sudo apt-get install libapache2-mod-php5を実行して、Apache用のPHPモジュールをインストールします。 このモジュールにより、ApacheはPHPファイルを解析できます。

    実際のビジネスシナリオに基づいて、IPアドレスとリスニングポートを置き換えることができます。 設定を更新した後、/etc/init.d/apache2 restartを実行してwebサーバーを再起動する必要があります。

  • NGINX webサーバーを使用する場合は、次の手順に基づいて環境を構成します。 この例ではNGINX 1.19.7を使用します。

    次のサンプルコードに示すように、/etc/nginx/nginx.conf設定ファイルでパブリックIPアドレスを192.0.2.11に設定し、リスニングポートを8080に設定します。

    サーバ {
        listen 8080;
        server_name 192.0.2.11;
        
        root /var/www/html;
        index index.html index.php;
    
    
        location ~ * \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_paramsを含みます。
            }
    }

    実際のビジネスシナリオに基づいて、IPアドレスとリスニングポートを置き換えることができます。 設定を更新した後、NGINX webサーバーを再起動する必要があります。

手順2: アプリケーションサーバーの設定

  1. アプリケーションサーバーのPHPソースコードをダウンロードします。

  2. アプリケーションサーバーのソースコードをアプリケーションサーバーの該当するディレクトリに解凍します。 この例では、アプリケーションサーバーをUbuntu 16.04の /var/www/html/aliyun-oss-appserver-phpディレクトリに配置する必要があります。

  3. PCにインストールされているブラウザから、http:// 192.0.2.11:8080/aliyun-oss-appserver-php/index.htmlでサーバーを開きます。

  4. Apache webサーバーを使用する場合は、Apacheを有効にしてHTTP認証ヘッダーをキャプチャします。 NGINX webサーバーを使用する場合は、この手順をスキップします。

    一部のwebサーバーはAuthorizationヘッダーを自動的に解析するため、アプリケーションサーバーが受信したコールバックリクエストにAuthorizationヘッダーが含まれていない場合があります。 Apache 2は、そのようなウェブサーバの一例である。 Authorizationヘッダーが解析されないように、Apache 2の設定ファイルを変更する必要があります。

    1. Apache 2の /etc/apache2/apache2.conf設定ファイルを開きます。 次のスニペットを見つけて変更します。

      <ディレクトリ /var/www/>
              オプションインデックスFollowSymLinks
              AllowOverrideすべて
              許可されたすべてを要求する
      </ディレクトリ> 
    2. という名前のファイルを作成します。htaccess/var/www/html/aliyun-oss-appserver-phpディレクトリに保存し、次の内容を入力します。

      <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteCond %{HTTP: 許可} 。
      RewriteRule .* - [E=HTTP_AUTHORIZATION :%{ HTTP: 許可}]
      </IfModule> 

    別のApacheバージョンまたは別のwebサーバーを使用する場合、設定は異なります。

  5. アプリケーションサーバーの設定を変更します。

    /var/www/html/aliyun-oss-appserver-php/phpディレクトリで、get.phpファイルを開き、次のスニペットを変更します。

    $id= '<yourAccessKeyId>'; // AccessKey IDを入力します。 
        $key= '<yourAccessKeySecret>'; // AccessKeyシークレットを入力します。 
    
        // $hostをhttps:// bucketname.endpointの形式の値に設定します。 この例のホストを実際の情報に置き換えます。 
        $host = 'https:// bucket-name.oss-cn-hangzhou.aliyuncs.com ';  
    
        // $callbackUrlをコールバックサーバーのURLに設定します。 IPアドレスとポート番号を実際の情報に置き換えます。 
        $callbackUrl = 'http:// 192.0.2.11:8080/aliyun-oss-appserver-php/php/callback.php';
    
        $dir = 'user-dir-prefix/'; // // アップロードするオブジェクトの名前のプレフィックスを指定します。

    パラメーター

    必須

    説明

    id

    必須

    LTAn *********************

    Alibaba CloudアカウントまたはRAMユーザーのAccessKey IDとAccessKeyシークレット。 詳細については、「AccessKeyペアの取得」をご参照ください。

    キー

    必須

    zbnK **************************

    host

    必須

    https://bucket-name.oss-cn-hangzhou.aliyuncs.com

    ホストのURL。 URLはhttps:// BucketName.Endpoint形式に従います。 エンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

    callbackUrl

    必須

    http:// 192.0.2.11:8080/aliyun-oss-appserver-php/php/callback.php

    アップロードコールバック要求が送信されるアプリケーションサーバーのURL。 このURLは、アプリケーションサーバーとOSS間の通信に使用されます。 オブジェクトをアップロードした後、OSSはURLを使用して、オブジェクトのアップロードに関する情報をアプリケーションサーバーに送信します。

    dir

    任意

    exampledir /

    OSSにアップロードされたオブジェクトの名前のプレフィックス。 ビジネス要件に基づいてこのパラメーターを設定します。

    ビジネスシナリオでプレフィックス設定が必要ない場合は、このパラメーターを空のままにすることができます。

ステップ3: クライアントの設定

アプリケーションサーバーの /var/www/html/aliyun-oss-appserver-phpディレクトリで、upload.jsファイルを変更します。

PHPアプリケーションサーバーのソースコードの場合、相対パスも適切に機能するため、upload.jsファイルの内容を変更する必要はありません。 ファイルを変更する場合は、serverUrl ='./php/get.php' 設定を見つけ、既存のserverUrl設定をwebサーバーがデプロイされているアドレスに置き換えます。 これにより、ブラウザとアプリケーションサーバー間の通信が確立されます。 この例では、serverUrl ='http:// 192.0.2.11:8080/aliyun-oss-appserver-php/php/get.php' 設定を使用できます。

ステップ4: CORS設定の変更

フォームアップロードを使用してクライアントからOSSにデータをアップロードすると、Originヘッダーを含むリクエストがブラウザーからOSSに送信されます。 次に、Originヘッダーの値が、バケットに設定したクロスオリジンリソース共有 (CORS) ルールのオリジン設定と一致するかどうかを確認します。 したがって、POSTメソッドを使用してバケットにデータをアップロードする前に、バケットのCORSルールを設定する必要があります。

  1. OSSコンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションウィンドウで、[コンテンツセキュリティ] > [クロスオリジンリソース共有 (CORS)] を選択します。

  4. [クロスオリジンリソース共有 (CORS)] ページで、[ルールの作成] をクリックし、次の図に示すパラメーターを設定します。

    重要

    データのセキュリティを確保するために、OSSでリクエストを許可する実際のドメイン名を [ソース] フィールドで指定することを推奨します。 詳細については、「CORSの設定」をご参照ください。

ステップ5: アップロードコールバック要求を送信する

  1. PCのブラウザのアドレスバーにhttp:// 192.0.2.11:8080/aliyun-oss-appserver-php/index.htmlを入力します。

    重要 index.htmlファイルは、Internet Explorer 10以前と互換性がない場合があります。 Internet Explorer 10以前を使用するときに問題が発生した場合は、デバッグを実行する必要があります。
  2. ファイルを選択し、ファイルタイプを指定して、ファイルをアップロードします。

    オブジェクトをアップロードすると、アプリケーションサーバーから返されたコンテンツが表示されます。

アプリケーションサーバのコアコード解析

アプリケーションサーバーのソースコードは、署名ベースのアップロードおよびアップロードコールバックを実装するために使用されます。

  • 署名ベースのアップロード

    署名ベースのアップロード中、アプリケーションサーバーはクライアントから送信されたGETメッセージに応答します。 コードファイルはaliyun-oss-appserver-php/php/get.phpです。 コードスニペットの例:

    
    $response = array();
    $response['accessid'] = $id;
    $response['host'] = $host;
    $response['policy'] = $base64_policy;
    $response['signature'] = $signature;
    $response['expire'] = $end ;
    $response['callback'] = $base64_callback_body;
    $response['dir'] = $dir; 
  • コールバックのアップロード

    アップロードコールバック中、アプリケーションサーバーはOSSから送信されたPOSTメッセージに応答します。 コードファイルはaliyun-oss-appserver-php/php/callback.phpです。

    コードスニペットの例:

    // 6。 署名を検証します。
    $ok = openssl_verify($authStr、$authorization、$pubKey、OPENSSL_ALGO_MD5);
    if ($ok == 1)
    {
        ヘッダー ("Content-Type: application/json");
        $data=配列 ("ステータス"=>"Ok");
        エコーjson_encode($data);
    } 

    詳細については、「コールバック」をご参照ください。