全部产品
云市场
云游戏

PHP 事件函数

更新时间:2020-03-29 20:14:47

在函数计算中使用 PHP 编程,需要定义一个函数作为入口函数。本文介绍了 PHP 事件函数的结构和特点。

事件函数入口

一个最简单的入口函数定义如下所示。

  1. <?php
  2. function handler($event, $context) {
  3. return "hello world";
  4. }

函数名

handler 需要与创建函数时的 handler 字段相对应。例如创建函数时指定的 handlerindex.handler,函数计算则会加载 index.php 文件中定义的 handler 函数。

$event 参数

$event 参数是函数的输入参数,也是您调用函数时传入的数据,其数据类型是字符串。PHP 函数直接使用您指定的 $event 参数,不会做任何预处理。您在函数中可以根据实际情况解析 $event。例如输入数据是一个 JSON 字符串,您可以把输入的数据转换成一个数组。以下代码示例演示了一个参数解析的过程。

  1. {
  2. "key": "value"
  3. }

在 PHP 函数代码中解析上文 $event,返回结果为 value

  1. <?php
  2. function handler($event, $context) {
  3. $eventObj = json_decode($event, $assoc = true);
  4. return $eventObj['key'];
  5. }

$context 参数

$context 参数中包含函数的运行时信息,例如请求 ID(requestId)和临时身份验证 securityToken ,便于您在代码中使用这些信息。$context 参数的数据类型是数组,定义如下所示。

  1. [
  2. 'requestId' => 'b1c5100f-819d-c421-3a5e-7782a27d8a33',
  3. 'credentials' => [
  4. 'accessKeyId' => 'STS.access_key_id',
  5. 'accessKeySecret' => 'access_key_secret',
  6. 'securityToken' => 'security_token',
  7. ],
  8. 'function' => [
  9. 'name' => 'my-func',
  10. 'handler' => 'index.handler',
  11. 'memory' => 128,
  12. 'timeout' => 10,
  13. ],
  14. 'service' =>[
  15. 'name' => 'my-service',
  16. 'logProject' => 'my-log-project',
  17. 'logStore' => 'my-log-store',
  18. 'qualifier' => 'qualifier',
  19. 'versionId' => '1',
  20. 'initializer' => 'index.initializer',
  21. 'initializationTimeout' => 10,
  22. ],
  23. 'region' => 'cn-shanghai',
  24. 'accountId' => '123456'
  25. ]

$context 中包含了以下信息。

信息类型信息类型说明
requestId本次调用请求的唯一 ID,常用于问题复查或历史调用计数。
function当前调用的函数的一些基本信息,例如函数名、函数入口、函数内存和超时时间。
credentials函数计算服务通过扮演您提供的服务角色获得的一组临时密钥,每 15 分钟更新一次。您可以在代码中使用 credentials 去访问相应的服务( 例如 OSS ),这就避免了您把自己的 AccessKey 信息写死在函数代码里。
service当前调用的函数所在的 service 的信息,包含 service 的名字、接入的日志服务的 logProject 和 logStore 信息、service 的版本信息、 qualifier 和 version_id。其中 qualifier 表示调用函数时指定的 service 版本或别名,version_id 表示实际调用的 service 版本。
region当前调用的函数所在区域,例如 cn-shanghai。更多详情,请参见地域与可用区
accountId 当前调用函数用户的阿里云 Account ID。更多详情,请参见获取账号 ID

事件函数示例

临时密钥用于辨识请求者身份和权限,在访问其他服务,例如 OSS 时,您必须设置 securityToken。下文的代码示例演示了如何使用临时密钥向 OSS 的一个 Bucket 上传一个 .txt 文件。

  1. <?php
  2. use OSS\OssClient;
  3. function handler($event, $context) {
  4. $accessKeyId = $context["credentials"]["accessKeyId"];
  5. $accessKeySecret = $context["credentials"]["accessKeySecret"];
  6. $securityToken = $context["credentials"]["securityToken"];
  7. $endpoint = "oss-cn-shenzhen.aliyuncs.com";
  8. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
  9. $bucket = "my-bucket";
  10. $object = "php.txt";
  11. $content = "Hello fc.";
  12. try {
  13. $ossClient->putObject($bucket, $object, $content);
  14. } catch (OssException $e) {
  15. print($e->getMessage());
  16. }
  17. return 'sucess';
  18. };