阿里云函数计算PHP开发指南

阿里云函数计算开通地址 https://www.aliyun.com/product/fc
阿里云函数计算官方开发指南 https://help.aliyun.com/document_detail/89029.html
函数代码

以下为一个最基本的hello world函数入口示例:

<?phpfunction handler($event, $context) { var_dump($event); return "hello world!";}
函数入口

在创建阿里云函数计算云函数时,需要指定执行方法。

  • 普通方式:handler需要与创建函数时的 "handler" 字段相对应。例如,创建函数时指定的 "handler" 为 index.handler,函数计算则会加载 index.php 文件中定义的 handler 函数。
  • ZIP包上传:当使用本地上传.ZIP包或从上传.ZIP等方法提交代码ZIP包时,ZIP包的根目录下需要包含指定的入口文件,入口文件中定义入口函数,且文件名和函数名要与执行入口函数名保持一致,否则会无法找到入口文件和入口函数而报错。

输入

PHP 环境下的入参包括 $event 、$context。

$event:使用此参数传递触发事件数据。

$context:使用此参数向您的处理程序传递运行时信息。

输出

在处理函数中您可以使用return来返回值,函数不同调用方式,对返回值的处理方式不同。

同步调用(RequestResponse): 使用同步调用时,结果会以序列化的JSON格式返回, 调用方可以根据返回值进行后续处理。异步调用(Event): 异步调用时,调用方法触发函数后立即返回,所以,函数返回值会被丢弃。

日志

您可以在程序中使用如下语句来完成日志输出:

  • print_r()
  • var_dump()

输出内容您可以在函数日志中查看。

错误处理

PHP 函数在执行过程中发生异常时,函数计算捕获异常并返回异常信息。以下示例代码返回了 panic 的异常信息:

<?phpfunction handler($event, $context) { throw new Exception("panic");}

根据以上示例代码,您调用函数时可能收到如下响应信息:

panicStack 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阿里云函数计算CfcClient->do_invoke(Array)#3 phar:///var/runtime/script/php7-runtime.phar/bin/php7-runtime(29): BaiduBce阿里云函数计算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,保存文件。

<?phpfunction printhello() { var_dump('Hello world!');}

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

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

<?phpinclude_once 'helloworld.php'; function handler($event, $context) { $output = json_encode($event); printhello(); return $output;}

  1. 打包代码。

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

  1. 测试函数

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