PHP函数开发指南
函数定义
PHP 7.3函数的接口定义如下所示:
function handler($event, $context)
SDK接口
Context类中提供了许多上下文方法供用户使用,其声明和功能如所示。
方法名 |
方法说明 |
---|---|
getRequestID() |
获取请求ID。 |
getRemainingTimeInMilliSeconds () |
获取函数剩余运行时间。 |
getAccessKey() |
获取租户AccessKey,使用该方法需要给函数配置委托。 |
getSecretKey() |
获取租户SecretKey,使用该方法需要给函数配置委托。 |
getUserData(string key) |
通过key获取用户通过环境变量传入的值。 |
getFunctionName() |
获取函数名称。 |
getRunningTimeInSeconds () |
获取函数超时时间。 |
getVersion() |
获取函数的版本。 |
getMemorySize() |
分配的内存。 |
getCPUNumber() |
分配的CPU数。 |
getProjectID() |
获取projectID。 |
getPackage() |
获取函数组。 |
getToken() |
获取token,使用该方法需要给函数配置委托。 |
getLogger() |
获取context提供的logger方法,返回一个日志输出类,通过使用其info方法按“时间-请求ID-输出内容”的格式输出日志。 如调用info方法输出日志: logg = context.getLogger()$ $logg->info("hello") |

getToken()、getAccessKey()和getSecretKey()方法返回的内容包含敏感信息,请谨慎使用,避免造成用户敏感信息的泄露。
开发PHP函数
开发PHP函数步骤如下:
- 创建函数
- 编写打印helloworld的代码。
打开文本编辑器,编写helloworld函数,代码如下,文件命名为“helloworld.php”,保存文件。
1 2 3 4
<?php function printhello() { echo 'Hello world!'; }
- 定义FunctionGraph函数
打开文本编辑,定义函数,代码如下,文件命名为index.php,保存文件(与helloworld.php保存在同一文件夹下)。
1 2 3 4 5 6 7 8
<?php include_once 'helloworld.php'; function handler($event, $context) { $output = json_encode($event); printhello(); return $output; }
函数仅支持返回如下几种类型的值。
- Null:函数返回的HTTP响应Body为空。
- string:函数返回的HTTP响应Body内容为该字符串内容。
- 其他:函数会返回值作为对象进行json编码,并将编码后的内容作为HTTP响应的Body,同时设置响应的“Content-Type”头为“text/plain”。
- 编写打印helloworld的代码。
- 工程打包函数工程创建以后,可以得到以下目录,选中工程所有文件,打包命名为“fss_examples_php7.3.zip”,如图2所示。
本例函数工程文件保存在“~/Code/”文件夹下,在打包的时候务必进入Code文件夹下选中所有工程文件进行打包,这样做的目是:由于定义了FunctionGraph函数的index.php是程序执行入口,确保fss_examples_php7.3.zip解压后,index.php文件位于根目录。
- 创建FunctionGraph函数,上传程序包登录FunctionGraph,创建PHP函数,上传 fss_examples_php7.3.zip文件。如 图3所示。
- 函数执行入口中的index与定义FunctionGraph函数的文件名保持一致,通过该名称找到FunctionGraph函数所在文件。
- 函数执行入口中的handler为函数名,与index.php文件中的函数名保持一致。
- 函数执行过程为:用户上传fss_examples_php7.3.zip保存在OBS中,触发函数后,解压缩zip文件,通过index匹配到FunctionGraph函数所在文件,通过handler匹配到index.php文件中定义的FunctionGraph函数,找到程序执行入口,执行函数。
- 测试函数
- 创建测试事件。
- 在函数详情页,选择已配置测试事件,单击“测试”。
- 执行函数函数执行结果分为三部分,分别为函数返回(由return返回)、执行摘要、日志输出(由echo或getLogger()方法获取的日志方法输出),如图5所示。
执行结果
执行结果由3部分组成:函数返回、执行摘要和日志。
参数项 |
执行成功 |
执行失败 |
---|---|---|
函数返回 |
返回函数中定义的返回信息。 |
返回包含错误信息、错误类型和堆栈异常报错信息的JSON文件。格式如下: { "errorMessage": "", "errorType": "", "stackTrace": {} } errorMessage:Runtime返回的错误信息 errorType:错误类型 stackTrace:Runtime返回的堆栈异常报错信息 |
执行摘要 |
显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 |
显示请求ID、配置内存、执行时长、实际使用内存和收费时长。 |
日志 |
打印函数日志,最多显示4KB的日志。 |
打印报错信息,最多显示4KB的日志。 |
函数执行失败的函数返回示例如下:
{ "errorMessage": "syntax error, unexpected '$data' (T_VARIABLE), expecting ')'", "errorType": "ParseError", "stackTrace": { "file": "\/index.php", "line": 24 } }
函数执行失败的日志示例如下:
2020-07-27 14:40:03.817+08:00 Start invoke request '1512e67f-98c6-474e-b5c2-051ada1ccb94', version: latest 2020-07-27 14:40:03.819+08:00 Finish invoke request '1512e67f-98c6-474e-b5c2-051ada1ccb94'(invoke Failed), duration: 2.273ms, billing duration: 100ms, memory used: 54.320MB
