本文介绍PHP事件请求处理程序的结构和使用示例。
Event Handler签名
一个简单的Event Handler签名定义如下。
<?php
function handler($event, $context) {
return 'hello world';
}
Event Handler的示例解析如下:
handler
:方法名称。与函数计算控制台配置的请求处理程序相对应。例如,为FC函数配置的请求处理程序为index.handler
,那么函数计算会去加载index.php
中定义的handler
函数,并从handler
函数开始执行。$event
:您调用函数时传入的参数,其数据类型是字符串。PHP函数直接使用您指定的event
参数,不会做任何预处理,您在函数中可以根据实际情况解析event
。例如,输入数据是JSON字符串,您可以把输入的数据转换为Array。$context
:包含函数的运行时信息,例如请求ID和临时身份验证,便于您在代码中使用这些信息。
示例一:解析JSON格式参数
示例代码
当您传入JSON格式参数时,函数计算会透传参数内容,需要您在代码中自行解析。下面是解析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的函数。具体操作,请参见创建函数。
操作步骤
- 登录函数计算控制台,在左侧导航栏,单击服务及函数。
- 在顶部菜单栏,选择地域,然后在服务列表页面,单击目标服务。
- 在函数管理页面,单击目标函数名称。
- 在函数详情页面,单击函数代码页签,在代码编辑器中输入上述示例代码,然后单击部署代码。说明 上述示例代码中函数的请求处理程序是
index.php
中的handler
方法。如果您的函数配置的请求处理程序不同,请替换为实际的文件和方法。 - 在函数代码页签,单击测试函数右侧的图标,从下拉列表中选择配置测试参数,输入如下示例测试参数,然后单击确定。
{ "key1": "value1", "key2": "value2", "key3": { "v1": true, "v2": "bye", "v3": 1234 } }
- 单击测试函数。执行成功后,您从返回结果中可以看到函数成功返回了上面的JSON格式,并且日志输出里打印了
key1
,key2
和key3
的内容。
示例二:通过临时密钥安全读写OSS的资源
示例代码
您可以使用函数计算为您提供的临时密钥访问对象存储OSS,代码示例如下所示。
<?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
替换为真实的资源名称。
前提条件
- 为服务配置具有访问对象存储OSS的权限的角色。具体操作,请参见授予函数计算访问其他云服务的权限。
- 创建运行环境为PHP的函数。具体操作,请参见创建函数。
操作步骤
- 登录函数计算控制台,在左侧导航栏,单击服务及函数。
- 在顶部菜单栏,选择地域,然后在服务列表页面,单击目标服务。
- 在函数管理页面,单击目标函数名称。
- 在函数详情页面,单击函数代码页签,在代码编辑器中输入上述示例代码,然后单击部署代码。说明 上述示例代码中函数的请求处理程序是
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");
}