且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

函数计算 php 运行环境添加 pdo_sqlite 扩展

更新时间:2022-08-13 18:37:46

注:结尾附pdo_sqlite.so文件和一键脚本

1. 启动 Sandbox,并进入容器的 shell 环境

如下图所示,点击"Start Sandbox",启动fc运行环境的sandbox
函数计算 php 运行环境添加 pdo_sqlite 扩展

此时会创建一个fc php运行环境的docker容器
函数计算 php 运行环境添加 pdo_sqlite 扩展

在终端输入:docker exec -it tender_merkle /bin/bash,进入容器shell环境
函数计算 php 运行环境添加 pdo_sqlite 扩展

2. 下载 php 源码

下载地址:https://www.php.net/downloads
在该页面选择对应的版本,复制其链接地址,这里fc环境用是php7.2版本
函数计算 php 运行环境添加 pdo_sqlite 扩展

函数计算 php 运行环境添加 pdo_sqlite 扩展
然后解压得到源码目录 php-7.2.32/

3. 编译 pdo_sqlite

进入目录 php-7.2.32/ext/pdo_sqlite
运行:phpize
函数计算 php 运行环境添加 pdo_sqlite 扩展

运行:./configure
函数计算 php 运行环境添加 pdo_sqlite 扩展
此时报错 Please reinstall the sqlite3 distribution

运行:
apt-get update
apt-get install libsqlite3-dev
然后再运行 ./configure 就正常了
函数计算 php 运行环境添加 pdo_sqlite 扩展

接下来再运行:make
会在php-7.2.32/ext/pdo_sqlite/modules/ 目录下生成pdo_sqlite.so 和 pdo_sqlite.la 文件
函数计算 php 运行环境添加 pdo_sqlite 扩展

4. 添加到fc目录下

参考文档:https://help.aliyun.com/document_detail/89032.html?spm=a2c4g.11174283.6.574.20685212pqjLdP#using-customextension
创建extension目录,pdo_sqlite.ini文件,并把刚编译的pdo_sqlite.so放到extension下:
函数计算 php 运行环境添加 pdo_sqlite 扩展

4. 验证 fc 运行环境已经加载 pdo_sqlite

在demo/index目录下添加phpinfo.php文件:
函数计算 php 运行环境添加 pdo_sqlite 扩展

修改demo/index入口函数handler:

function handler($request, $context): Response {
    $proxy = $GLOBALS['fcPhpCgiProxy'];
    $resp = $proxy->requestPhpCgi($request, "/code", "phpinfo.php",
        ['SCRIPT_FILENAME' => "/code/phpinfo.php"],
        ['debug_show_cgi_params' => true, 'readWriteTimeout' => 300 * 1000]
    );
    return $resp;
}

函数计算 php 运行环境添加 pdo_sqlite 扩展

点击运行:
函数计算 php 运行环境添加 pdo_sqlite 扩展

浏览器访问 http://localhost:8000/2016-08-15/proxy/demo/index
函数计算 php 运行环境添加 pdo_sqlite 扩展

5. 附:

pdo_sqlite.so文件:https://skyun-public.oss-cn-hangzhou.aliyuncs.com/pdo_sqlite.so

#!/bin/bash
#一键脚本

version="7.2.32"
docker_container=${container_name} # or ${container_id}
fc_func_dir=${fc_dir}/${service}/${function}

cd ${fc_func_dir}

docker exec -it ${docker_container} /bin/bash -c "
cd /root
apt-get update
apt-get install libsqlite3-dev
wget https://www.php.net/distributions/php-${version}.tar.gz
tar zxvf php-${version}.tar.gz
cd php-${version}/ext/pdo_sqlite
phpize
./configure
make
"

mkdir extension
cd extension
pwd
cmd="docker cp ${docker_container}:/root/php-${version}/ext/pdo_sqlite/modules/pdo_sqlite.so ./"
echo ${cmd}
`${cmd}`
echo "extension=/code/extension/pdo_sqlite.so" > pdo_sqlite.ini