本文介紹PHP事件請求處理常式的結構和使用樣本。
Event Handler簽名
一個簡單的Event Handler簽名定義如下。
<?php
function handler($event, $context) {
return 'hello world';
}
Event Handler的樣本解析如下:
handler
:方法名稱。與Function Compute控制台配置的請求處理常式相對應。例如,為FC函數配置的請求處理常式為index.handler
,那麼Function Compute會去載入index.php
中定義的handler
函數,並從handler
函數開始執行。$event
:您調用函數時傳入的參數,其資料類型是字串。PHP函數直接使用您指定的event
參數,不會做任何預先處理,您在函數中可以根據實際情況解析event
。例如,輸入資料是JSON字串,您可以把輸入的資料轉換為Array。$context
:包含函數的運行時資訊,例如請求ID和臨時身分識別驗證,便於您在代碼中使用這些資訊。
樣本一:解析JSON格式參數
範例程式碼
當您傳入JSON格式參數時,Function Compute會透傳參數內容,需要您在代碼中自行解析。下面是解析JSON格式事件的程式碼範例。
<?php
function handler($event, $context) {
$v = json_decode($event, true);
var_dump($v['key1']);
var_dump($v['key2']);
var_dump($v['key3']);
return $v;
}
前提條件
建立運行環境為PHP的函數。具體操作,請參見建立函數。
操作步驟
- 登入Function Compute控制台,在左側導覽列,單擊服務及函數。
- 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務。
- 在函數管理頁面,單擊目標函數名稱。
- 在函數詳情頁面,單擊函數代碼頁簽,在代碼編輯器中輸入上述範例程式碼,然後單擊部署代碼。說明 上述範例程式碼中函數的請求處理常式是
index.php
中的handler
方法。如果您的函數配置的請求處理常式不同,請替換為實際的檔案和方法。 - 在函數代碼頁簽,單擊測試函數右側的
表徵圖,從下拉式清單中選擇配置測試參數,輸入如下樣本測試參數,然後單擊確定。
{ "key1": "value1", "key2": "value2", "key3": { "v1": true, "v2": "bye", "v3": 1234 } }
- 單擊測試函數。執行成功後,您從返回結果中可以看到函數成功返回了上面的JSON格式,並且日誌輸出裡列印了
key1
,key2
和key3
的內容。
樣本二:通過臨時密鑰安全讀寫OSS的資源
範例程式碼
您可以使用Function Compute為您提供的臨時密鑰訪問Object Storage Service,程式碼範例如下所示。
<?php
use OSS\OssClient;
use OSS\Core\OssException;
function handler($event, $context) {
/*
阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
本樣本以從上下文中擷取AccessKey/AccessSecretKey為例。
*/
$creds = $context["credentials"];
$accessKeyId = $creds["accessKeyId"];
$accessKeySecret = $creds["accessKeySecret"];
$securityToken = $creds["securityToken"];
$endpoint = "https://oss-cn-hangzhou-internal.aliyuncs.com";
$bucket= "randombucket";
$object = "exampledir/index.php";
$filePath = "/code/index.php";
try{
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
$ossClient->uploadFile($bucket, $object, $filePath);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return $e->getMessage();
}
return 'hello world';
}
範例程式碼解析如下:
$creds = $context["credentials"]
:表示從$context
參數中擷取臨時密鑰,避免在代碼中寫入程式碼密碼等敏感資訊。- 以上代碼錶示將
/code/index.php
檔案上傳到OSS的randombucket
的exampledir目錄下。說明 請根據實際情況,將endpoint
、bucket
、object
和filePath
替換為真實的資源名稱。
前提條件
- 為服務配置具有訪問Object Storage Service的許可權的角色。具體操作,請參見授予Function Compute訪問其他雲端服務的許可權。
- 建立運行環境為PHP的函數。具體操作,請參見建立函數。
操作步驟
- 登入Function Compute控制台,在左側導覽列,單擊服務及函數。
- 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務。
- 在函數管理頁面,單擊目標函數名稱。
- 在函數詳情頁面,單擊函數代碼頁簽,在代碼編輯器中輸入上述範例程式碼,然後單擊部署代碼。說明 上述範例程式碼中函數的請求處理常式是
index.php
中的handler
方法。如果您的函數配置的請求處理常式不同,請替換為實際的檔案和方法。 - 單擊測試函數。函數執行成功後,查看返回結果,您可以看到返回結果為
hello world
。
樣本三:調用外部命令
您的PHP程式也可以建立fork
進程,調用外部命令。
當您的PHP函數需要調用非PHP語言構建的工具,例如Shell、C++或Go編譯的可執行檔,您可以將工具與函數代碼一起打包上傳,然後在函數中通過運行外部命令來使用工具。常見的調用外部命令的方法有exec、system和shell_exec。
以下範例程式碼為調用Linux的ls -halt
命令,輸出目前的目錄下的檔案詳情。
<?php
function handler($event, $context) {
return shell_exec("ls -halt /code");
}