所有文档

          函数计算 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
          下一篇
          Node.js