This topic describes the structure of event handlers in a PHP runtime and provides examples.
Signatures for event handlers
The following sample code describes the signature for an event handler.
<?php
function handler($event, $context) {
return 'hello world';
}
handler
: the name of the method. The method corresponds to the value that is specified for the Request Handler parameter in the Function Compute console. For example, if the value of the Request Handler parameter for a Function Compute function isindex.handler
, Function Compute loads thehandler
function that is defined inindex.php
and executes the function from thehandler
function.$event
: the parameter that is passed when you invoke the function. The value of this parameter is of the String type. The PHP function directly uses the specifiedevent
parameter. You can parseevent
in the function based on your business requirements. For example, if the input data is a JSON string, you can convert the JSON string to an array.$context
: runtime information of a function, such as the request ID and the temporary identity credentials. You can use the runtime information in your code.
Example 1: Parse JSON-formatted parameters
Sample code
When Function Compute passes the JSON-formatted parameters that you configured, you must parse the parameters in the code. The following sample code provides an example on how to parse an event that is in the JSON format.
<?php
function handler($event, $context) {
$v = json_decode($event, true);
var_dump($v['key1']);
var_dump($v['key2']);
var_dump($v['key3']);
return $v;
}
Prerequisites
A function whose runtime environment is PHP is created. For more information, see Create a function.
Procedure
- Log on to the Function Compute console. In the left-side navigation pane, click Services & Functions.
- In the top navigation bar, select a region. On the Services page, click the desired service.
- On the Functions page, click the name of the desired function.
- On the Function Details page, click the Code tab, enter the preceding sample code in the code editor, and then click Deploy. Note In the preceding sample code, the handler is the
handler
method inindex.php
. If you specify a different handler parameter, use the actual file and method. - On the Code tab, click the icon next to Test Function, select Configure Test Parameters from the drop-down list, enter the following test parameters, and then click OK.
{ "key1": "value1", "key2": "value2", "key3": { "v1": true, "v2": "bye", "v3": 1234 } }
- Click Test Function. After the execution is complete, the response shows that the content in JSON format are returned by the function, and the
key1
,key2
, andkey3
content is printed in the log output.
Example 2: Read and write Object Storage Service (OSS) resources by using a temporary AccessKey pair
Sample code
You can use a temporary key pair that is provided by Function Compute to access Object Storage Service (OSS). Example:
<?php
use OSS\OssClient;
use OSS\Core\OssException;
function handler($event, $context) {
/*
The AccessKey pair of an Alibaba Cloud account can be used to access all API operations. Using these credentials to perform operations in Function Compute is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M.
We recommend that you do not save the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources under your account may be compromised.
In this example, the AccessKey ID and AccessKey secret are obtained from the context.
*/
$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"]
: obtains the temporary AccessKey pair from$context
. This prevents hard encoding on sensitive information such as passwords.- The preceding code indicates that the
/code/index.php
file is uploaded to the exampledir directory ofrandombucket
in OSS.Note Replaceendpoint
,bucket
,object
, andfilePath
with the actual resource names.
Prerequisites
- A role for the service that has the permissions to access OSS is configured. For more information, see Grant Function Compute permissions to access other Alibaba Cloud services.
- A function whose runtime environment is PHP is created. For more information, see Create a function.
Procedure
- Log on to the Function Compute console. In the left-side navigation pane, click Services & Functions.
- In the top navigation bar, select a region. On the Services page, click the desired service.
- On the Functions page, click the name of the desired function.
- On the Function Details page, click the Code tab, enter the preceding sample code in the code editor, and then click Deploy. Note In the preceding sample code, the handler is the
handler
method inindex.php
. If you specify a different handler parameter, use the actual file and method. - Click Test Function. After the function is executed, the execution result
hello world
is returned.
Example 3: Call external commands
You can use a PHP program to create a fork
process to call external commands.
If you want to use non-PHP tools, such as shell scripts and executable files compiled in C++ or Go in your PHP functions, you can package and upload the tools and code together, and then run external commands to use these tools. You can use the following methods to run external commands: exec, system, and shell_exec.
The following sample code is used to call the ls -halt
command in Linux and generate details of files in the current directory.
<?php
function handler($event, $context) {
return shell_exec("ls -halt /code");
}