全部產品
Search
文件中心

Object Storage Service:PHP

更新時間:Feb 28, 2024

本文以PHP語言為例,講解在服務端通過PHP程式碼完成簽名,並且設定上傳回調,然後通過表單直傳資料到OSS。

前提條件

  • Web伺服器已部署。

  • Web伺服器對應的網域名稱可通過公網訪問。

  • Web伺服器能夠解析PHP(執行命令php -v進行查看)。

    說明

    PHP需要為PHP 5及以上版本。

  • PC端瀏覽器支援JavaScript。

步驟1:配置Web伺服器

本文以Ubuntu16.04為例介紹使用不同Web伺服器時的環境配置,請根據實際選擇。

  • 當使用Apache作為Web伺服器時,請進行如下環境配置,此處以Apache2.4.18為例說明。

    • Web伺服器外網IP地址為192.0.2.11。您可以在設定檔/etc/apache2/apache2.conf中增加ServerName 192.0.2.11來進行修改。

    • Web伺服器的監聽連接埠為8080。您可以在設定檔/etc/apache2/ports.conf中進行修改相關內容Listen 8080

    • 確保Apache能夠解析PHP檔案:sudo apt-get install libapache2-mod-php5(其他平台請根據實際情況進行安裝配置)。

    您可以根據自己的實際環境修改IP地址和監聽連接埠。更新配置後,需要重啟Apache伺服器,重啟命令為/etc/init.d/apache2 restart

  • 當使用nginx作為Web伺服器時,請進行如下環境配置,此處以nginx1.19.7為例說明。

    Web伺服器外網IP地址為192.0.2.11,監聽連接埠為8080。您可以在設定檔/etc/nginx/nginx.conf中修改外網IP地址和連接埠。設定檔樣本如下:

    server {
        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;
                include fastcgi_params;
            }
    }

    您可以根據自己的實際環境修改IP地址和監聽連接埠。更新配置後,需要重啟nginx伺服器。

步驟2:配置應用伺服器

  1. 下載應用伺服器源碼(PHP版本)。

  2. 將應用伺服器源碼解壓到應用伺服器的相應目錄。本文樣本中需要部署到Ubuntu16.04的/var/www/html/aliyun-oss-appserver-php目錄下。

  3. PC端瀏覽器中訪問應用伺服器URL http://192.0.2.11:8080/aliyun-oss-appserver-php/index.html

  4. 如果使用Apache作為Web伺服器,請開啟Apache捕獲HTTP頭部Authorization欄位的功能。如果使用nginx作為Web伺服器,請跳過此步驟。

    您的應用伺服器收到的回調請求有可能沒有Authotization頭,這是因為有些Web應用伺服器會將Authorization頭自行解析掉。例如Apache2,需要設定成不解析頭部。

    1. 開啟Apache2設定檔/etc/apache2/apache2.conf,找到如下片段進行相應修改。

      <Directory /var/www/>
              Options Indexes FollowSymLinks
              AllowOverride All
              Require all granted
      </Directory>
    2. /var/www/html/aliyun-oss-appserver-php目錄下,建立一個.htaccess檔案,填寫如下內容。

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

    其他Web伺服器或其他Apache版本,請根據實際情況進行配置。

  5. 修改應用伺服器配置。

    /var/www/html/aliyun-oss-appserver-php/php目錄下開啟檔案get.php, 修改如下程式碼片段。

        $id= '<yourAccessKeyId>';          // 填寫您的AccessKey ID。
        $key= '<yourAccessKeySecret>';     // 填寫您的AccessKey Secret。
    
        // $host的格式為https://bucketname.endpoint,請替換為您的真實資訊。
        $host = 'https://bucket-name.oss-cn-hangzhou.aliyuncs.com';  
    
        // $callbackUrl為上傳回調伺服器的URL,請將以下IP和Port配置為您自己的真實URL資訊。
        $callbackUrl = 'http://192.0.2.11:8080/aliyun-oss-appserver-php/php/callback.php';
    
        $dir = 'user-dir-prefix/';          // 上傳檔案時指定的首碼。

    配置項

    是否必填

    樣本值

    描述

    id

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

    阿里雲帳號或者RAM使用者的AccessKey ID和AccessKey Secret。具體操作,請參見擷取AccessKey

    key

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

    host

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

    訪問地址,格式為https://BucketName.Endpoint。關於Endpoint的更多資訊,請參見訪問網域名稱和資料中心

    callbackUrl

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

    上傳回調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改成伺服器部署的地址,用於處理瀏覽器和應用伺服器之間的通訊。例如本樣本中可以修改為serverUrl ='http://192.0.2.11:8080/aliyun-oss-appserver-php/php/get.php'

步驟4:修改CORS

用戶端進行表單直傳到OSS時,會從瀏覽器向OSS發送帶有Origin的請求訊息。OSS對帶有Origin頭的請求訊息會進行跨域規則(CORS)的驗證。因此需要為Bucket設定跨域規則以支援Post方法。

  1. 登入OSS管理主控台

  2. 單擊Bucket 列表,然後單擊目標Bucket名稱。

  3. 在左側導覽列,選擇資料安全 > 跨網域設定

  4. 跨網域設定頁面,單擊建立規則,配置如下圖所示。

    重要

    為了您的資料安全,實際使用時建議將來源填寫為實際允許訪問的網域名稱。更多資訊。請參見設定跨域訪問

步驟5:體驗上傳回調

  1. 在PC端的Web瀏覽器中輸入http://192.0.2.11:8080/aliyun-oss-appserver-php/index.html。

    重要

    index.html檔案不保證相容IE 10以下版本瀏覽器,若使用IE 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)
    {
        header("Content-Type: application/json");
        $data = array("Status"=>"Ok");
        echo json_encode($data);
    }

    更多資訊,請參見API參考中的Callback