日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

請(qǐng)求處理程序(Handler)

更新時(shí)間:

您可以使用PHP請(qǐng)求處理程序響應(yīng)接收到的事件并執(zhí)行相應(yīng)的業(yè)務(wù)邏輯。本文介紹PHP請(qǐng)求處理程序的相關(guān)概念、結(jié)構(gòu)和使用示例。

什么是請(qǐng)求處理程序

FC函數(shù)的請(qǐng)求處理程序,是函數(shù)代碼中處理請(qǐng)求的方法。當(dāng)您的FC函數(shù)被調(diào)用時(shí),函數(shù)計(jì)算會(huì)運(yùn)行您提供的Handler方法處理請(qǐng)求。您可以通過函數(shù)計(jì)算控制臺(tái)請(qǐng)求處理程序配置Handler。

對(duì)PHP語言的FC函數(shù)而言,您的請(qǐng)求處理程序格式為文件名.方法名。例如,您的文件名為main.php,方法名為handler,則請(qǐng)求處理程序?yàn)?span data-tag="ph" id="codeph-c5a-5m4-zim" class="ph">main.handler

關(guān)于FC函數(shù)的具體定義和相關(guān)操作,請(qǐng)參見創(chuàng)建事件函數(shù)

請(qǐng)求處理程序的具體配置均需符合函數(shù)計(jì)算平臺(tái)的配置規(guī)范。配置規(guī)范因請(qǐng)求處理程序類型而異。

Handler簽名

一個(gè)簡(jiǎn)單的Handler簽名定義如下。

<?php

function handler($event, $context) {
  return 'hello world';
}

示例解析如下:

  • handler:方法名稱。與函數(shù)計(jì)算控制臺(tái)配置的請(qǐng)求處理程序相對(duì)應(yīng)。例如,為FC函數(shù)配置的請(qǐng)求處理程序index.handler,那么函數(shù)計(jì)算會(huì)去加載index.php中定義的handler函數(shù),并從handler函數(shù)開始執(zhí)行。

  • $event:您調(diào)用函數(shù)時(shí)傳入的參數(shù),其數(shù)據(jù)類型是字符串。PHP函數(shù)直接使用您指定的event參數(shù),不會(huì)做任何預(yù)處理,您在函數(shù)中可以根據(jù)實(shí)際情況解析event。例如,輸入數(shù)據(jù)是JSON字符串,您可以把輸入的數(shù)據(jù)轉(zhuǎn)換為Array。

  • $context:包含函數(shù)的運(yùn)行時(shí)信息,例如請(qǐng)求ID和臨時(shí)身份驗(yàn)證,便于您在代碼中使用這些信息。

說明

如您需要通過HTTP觸發(fā)器或自定義域名訪問函數(shù),請(qǐng)先獲取請(qǐng)求結(jié)構(gòu)體再自定義HTTP響應(yīng)。更多信息,請(qǐng)參見HTTP觸發(fā)器調(diào)用函數(shù)

示例一:解析JSON格式參數(shù)

示例代碼

當(dāng)您傳入JSON格式參數(shù)時(shí),函數(shù)計(jì)算會(huì)透?jìng)鲄?shù)內(nèi)容,需要您在代碼中自行解析。下面是解析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;
}

前提條件

創(chuàng)建運(yùn)行環(huán)境為PHP的函數(shù)。具體操作,請(qǐng)參見創(chuàng)建事件函數(shù)

操作步驟

  1. 登錄函數(shù)計(jì)算控制臺(tái),在左側(cè)導(dǎo)航欄,單擊函數(shù)

  2. 在頂部菜單欄,選擇地域,然后在函數(shù)頁面,單擊目標(biāo)函數(shù)。

  3. 在函數(shù)配置頁面,選擇代碼頁簽,在代碼編輯器中輸入上述示例代碼,然后單擊部署代碼

    說明

    上述示例代碼中函數(shù)的請(qǐng)求處理程序是index.php中的handler方法。如果您的函數(shù)的請(qǐng)求處理程序配置不同,請(qǐng)獲取對(duì)應(yīng)的文件和方法進(jìn)行更新。

  4. 代碼頁簽,單擊測(cè)試函數(shù)右側(cè)的down圖標(biāo),從下拉列表中選擇配置測(cè)試參數(shù),輸入如下示例測(cè)試參數(shù),然后單擊確定

    {
      "key1": "value1",
      "key2": "value2",
      "key3": {
        "v1": true,
        "v2": "bye",
        "v3": 1234
      }
    }
  5. 單擊測(cè)試函數(shù)

    執(zhí)行成功后,您從返回結(jié)果中可以看到函數(shù)成功返回了上面的JSON格式,并且日志輸出里打印了key1key2key3的內(nèi)容。

示例二:通過臨時(shí)密鑰安全讀寫OSS的資源

示例代碼

您可以使用函數(shù)計(jì)算為您提供的臨時(shí)密鑰訪問對(duì)象存儲(chǔ)OSS,代碼示例如下所示。

<?php

use OSS\OssClient;
use OSS\Core\OssException;

function handler($event, $context) {
    /*
      阿里云賬號(hào)AccessKey擁有所有API的訪問權(quán)限,建議您使用RAM用戶進(jìn)行API訪問或日常運(yùn)維。
      建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號(hào)下所有資源的安全。
      本示例以從上下文中獲取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參數(shù)中獲取臨時(shí)密鑰,避免在代碼中硬編碼密碼等敏感信息。

  • 以上代碼表示將/code/index.php文件上傳到OSS的randombucketexampledir目錄下。

    說明

    請(qǐng)根據(jù)實(shí)際情況,將endpointbucketobjectfilePath替換為真實(shí)的資源名稱。

前提條件

操作步驟

  1. 登錄函數(shù)計(jì)算控制臺(tái),在左側(cè)導(dǎo)航欄,單擊函數(shù)

  2. 在頂部菜單欄,選擇地域,然后在函數(shù)頁面,單擊目標(biāo)函數(shù)。

  3. 在函數(shù)配置頁面,選擇代碼頁簽,在代碼編輯器中輸入上述示例代碼,然后單擊部署代碼

    說明

    上述示例代碼中函數(shù)的請(qǐng)求處理程序是index.php中的handler方法。如果您的函數(shù)配置的請(qǐng)求處理程序不同,請(qǐng)?zhí)鎿Q為實(shí)際的文件和方法。

  4. 單擊測(cè)試函數(shù)

    函數(shù)執(zhí)行成功后,查看返回結(jié)果,您可以看到返回結(jié)果為hello world

示例三:調(diào)用外部命令

您的PHP程序也可以創(chuàng)建fork進(jìn)程,調(diào)用外部命令。

當(dāng)您的PHP函數(shù)需要調(diào)用非PHP語言構(gòu)建的工具,例如Shell、C++或Go編譯的可執(zhí)行文件,您可以將工具與函數(shù)代碼一起打包上傳,然后在函數(shù)中通過運(yùn)行外部命令來使用工具。常見的調(diào)用外部命令的方法有execsystemshell_exec

以下示例代碼為調(diào)用Linux的ls -halt命令,輸出當(dāng)前目錄下的文件詳情。

<?php

function handler($event, $context) {
  return shell_exec("ls -halt /code");
}        

示例四:使用HTTP觸發(fā)器調(diào)用函數(shù)

示例代碼

<?php

function handler($event, $context) {
  $logger = $GLOBALS['fcLogger'];
  $logger->info('hello world');
  $logger->info('receive event: ' . $event);
  
  try {
    $evt = json_decode($event, true);
    if (is_null($evt['body'])) {
      return "The request did not come from an HTTP Trigger, event: " . $event;
    }
    $body = $evt['body'];
    if ($evt['isBase64Encoded']) {
      $body = base64_decode($evt['body']);
    }
    return array(
      "statusCode" => 200,
      'headers' => array("Content-Type" => "text/plain"),
      'isBase64Encoded' => false,
      "body" => $body
    );
  } catch (Exception $e) {
      $logger->error("Caught exception: " . $e->getMessage());
      return "The request did not come from an HTTP Trigger, event: " . $event;
  }
}

前提條件

已使用上述示例創(chuàng)建運(yùn)行環(huán)境為PHP的函數(shù),并創(chuàng)建HTTP觸發(fā)器。具體操作,請(qǐng)參見創(chuàng)建事件函數(shù)配置HTTP觸發(fā)器并使用HTTP觸發(fā)

操作步驟

  1. 登錄函數(shù)計(jì)算控制臺(tái),在左側(cè)導(dǎo)航欄,單擊函數(shù)

  2. 在頂部菜單欄,選擇地域,然后在函數(shù)頁面,單擊目標(biāo)函數(shù)。

  3. 在函數(shù)詳情頁面,單擊配置頁簽,然后再左側(cè)導(dǎo)航欄,單擊觸發(fā)器,在觸發(fā)器頁面獲取HTTP觸發(fā)器的公網(wǎng)訪問地址。

  4. 在Curl工具執(zhí)行以下命令,調(diào)用函數(shù)。

    curl -i "https://http-trigger-demo.cn-shanghai.fcapp.run" -d 'Hello FC!'
    重要
    • 如果HTTP觸發(fā)器的認(rèn)證方式無需認(rèn)證,您可以直接使用Postman或Curl工具來調(diào)用函數(shù)。具體操作,請(qǐng)參見本文操作步驟

    • 如果HTTP觸發(fā)器的認(rèn)證方式簽名認(rèn)證JWT認(rèn)證,請(qǐng)使用簽名方式或JWT認(rèn)證方式來調(diào)用函數(shù)。具體操作,請(qǐng)參見認(rèn)證鑒權(quán)

錯(cuò)誤分析

本示例代碼支持使用HTTP觸發(fā)器或者自定義域名調(diào)用。如果使用API調(diào)用函數(shù),但配置的測(cè)試參數(shù)不符合HTTP觸發(fā)器請(qǐng)求格式規(guī)范時(shí),會(huì)出現(xiàn)報(bào)錯(cuò)。

例如,在控制臺(tái)上調(diào)用函數(shù),配置請(qǐng)求參數(shù)為 "Hello, FC!",單擊測(cè)試函數(shù),收到的請(qǐng)求響應(yīng)如下所示。

The request did not come from an HTTP Trigger, event: Hello FC!