函数计算CFC

    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功能为例。

    1. 创建printhello函数的代码文件。

    打开文本编辑器,编写helloworld函数,代码如下,文件命名为helloworld.php,保存文件。

    <?php
    function printhello() {
        var_dump('Hello world!');
    }
    1. 创建handler函数的代码文件。

    打开文本编辑,定义函数,代码如下,文件命名为index.php,保存文件(与helloworld.php保存在同一文件夹下)。

    <?php
    include_once 'helloworld.php';
     
    function handler($event, $context) {
        $output = json_encode($event);
        printhello();
        return $output;
    }
    1. 打包代码。

    函数的代码文件创建以后,可以在目录下看到helloworld.php和index.php两个文件。选中这两个文件,打包命名为helloworld.zip,在【函数代码】页面点击【上传函数.ZIP包】上传。

    image.png

    1. 测试函数

    在【函数代码】页面点击【测试】,新对话框中事件模板保持默认的"HelloWorld模板",然后点击执行。 image.png

    在对话框下方将显示如下运行日志: image.png

    上一篇
    Lua
    下一篇
    使用BSAM-CLI调试函数