PHP
函数代码
以下为一个最基本的hello world函数入口示例:
<?php
function handler($event, $context) {
var_dump($event);
return "hello world!";
}
函数入口
在创建CFC云函数时,需要指定执行方法。
- 普通方式:handler需要与创建函数时的 "handler" 字段相对应。例如,创建函数时指定的 "handler" 为 index.handler,函数计算则会加载 index.php 文件中定义的 handler 函数。
- ZIP包上传:当使用本地上传.ZIP包或从BOS上传.ZIP等方法提交代码ZIP包时,ZIP包的根目录下需要包含指定的入口文件,入口文件中定义入口函数,且文件名和函数名要与执行入口函数名保持一致,否则会无法找到入口文件和入口函数而报错。
输入
PHP 环境下的入参包括 $event 、$context。
$event:使用此参数传递触发事件数据。
$context:使用此参数向您的处理程序传递运行时信息。
输出
在处理函数中您可以使用return来返回值,函数不同调用方式,对返回值的处理方式不同。
同步调用(RequestResponse): 使用同步调用时,结果会以序列化的JSON格式返回, 调用方可以根据返回值进行后续处理。 异步调用(Event): 异步调用时,调用方法触发函数后立即返回,所以,函数返回值会被丢弃。
日志
您可以在程序中使用如下语句来完成日志输出:
- print_r()
- var_dump()
输出内容您可以在函数日志中查看。
错误处理
PHP 函数在执行过程中发生异常时,函数计算捕获异常并返回异常信息。以下示例代码返回了 panic 的异常信息:
<?php
function handler($event, $context) {
throw new Exception("panic");
}
根据以上示例代码,您调用函数时可能收到如下响应信息:
panic
Stack Trace:
#0 [internal function]: handler(Array, Array)
#1 phar:///var/runtime/script/php7-runtime.phar/src/CfcClient.php(89): ReflectionFunction->invoke(Array, Array)
#2 phar:///var/runtime/script/php7-runtime.phar/src/CfcClient.php(46): BaiduBce\CFC\CfcClient->do_invoke(Array)
#3 phar:///var/runtime/script/php7-runtime.phar/bin/php7-runtime(29): BaiduBce\CFC\CfcClient->wait_invoke()
#4 /var/runtime/script/php7-runtime.phar(12): require('phar:///var/run...')
#5 {main}
已安装扩展
如下列出目前已安装的 PHP 扩展供参考:
- Core
- ate
- ibxml
- penssl
- cre
- qlite3
- lib
- alendar
- type
- url
- dom
- hash
- fileinfo
- filter
- ftp
- gettext
- SPL
- iconv
- json
- mbstring
- session
- pcntl
- PDO
- standard
- pdo_sqlite
- Phar
- readline
- Reflection
- mysqlnd
- shmop
- SimpleXML
- sockets
- pdo_mysql
- exif
- sysvmsg
- sysvsem
- sysvshm
- tokenizer
- xml
- xmlreader
- xmlwriter
- zip
- mysqli
- redis
- imagick
- Zend OPcache
您也可以随时在函数中通过 print_r(get_loaded_extensions()); 代码打印查看已安装的扩展。
代码打包
用户可以将生成的二进制执行文件打包到zip文件中,并上传zip包即可。具体步骤可以参考创建部署程序包。
下面以一个简单的hello world功能为例。
- 创建printhello函数的代码文件。
打开文本编辑器,编写helloworld函数,代码如下,文件命名为helloworld.php,保存文件。
<?php
function printhello() {
var_dump('Hello world!');
}
- 创建handler函数的代码文件。
打开文本编辑,定义函数,代码如下,文件命名为index.php,保存文件(与helloworld.php保存在同一文件夹下)。
<?php
include_once 'helloworld.php';
function handler($event, $context) {
$output = json_encode($event);
printhello();
return $output;
}
- 打包代码。
函数的代码文件创建以后,可以在目录下看到helloworld.php和index.php两个文件。选中这两个文件,打包命名为helloworld.zip,在【函数代码】页面点击【上传函数.ZIP包】上传。
- 测试函数
在【函数代码】页面点击【测试】,新对话框中事件模板保持默认的"HelloWorld模板",然后点击执行。
在对话框下方将显示如下运行日志: