为阿里云函数计算php runtime添加支持Freetype的GD模块

如题,最近在折腾阿里云的PHP函数计算的时候发现默认不支持GD模块,然后找了找官方的文档,发现可以添加自己的模块,而且阿里云官方还提供了一个编译好的模块gd.so,遂尝试接入自己的项目中。但是实际使用的时候发现这个模块是个残废,并不支持FreeType,也就是不支持imagettftext函数,这就让我很是头大。接下来可怎么整...然后发现分享模块的那篇文章有提到了如何编译自己的模块,但没有马上去试,而是尝试去阿里云工单(主要是因为懒)。然而现实很残酷,客服让我自己研究,有问题再问他。。好吧,自己动手,丰衣足食。
如果你想偷懒的话可以去文末下载成品,按照官方使用教程只需要替换原来的gd.so就好了~

准备

首先你需要一个独立环境的Linux,这里我使用了一台软路由kvm开的小鸡。

安装docker,注意安装好之后要开启docker服务,不然之后会报错,命令如下:

(题外话:我自己电脑的WSL应该是没开启docker特性,装不上然后放弃了,有兴趣的可以自己试试手动开启,应该可以)

安装Docker——点击展开
CentOS/RedHat:
yum -y update && yum -y install docker
service docker start

Ubuntu/Debian:
apt -y update && apt -y install docker
service docker start

然后安装好Fcli(不会安装?阿里云官方安装教程直达),然后设置好Account ID、AccessID和AccessKey,这些内容在你阿里云控制台里都能找到,不再赘述。

安装和配置好Fcli之后,按照以下教程执行(SSH录屏),不方便的也可以食用下面的文本教程,注意复制root@xxxxxxx:/# 后面的内容:

文字版——点击展开

service docker start
#再次提醒一遍,启动Docker服务

chmod +x ./fcli
#给予Fcli可执行权限

mkdir code
#创建code目录来存放项目

./fcli shell
#此处设置好你的阿里云账号参数

sbox -t php7.2 -d code
#拉取阿里云php7.2 Docker编译/运行环境,设置项目目录为刚刚创建的code目录,时间可能长一点视机器配置而定,耐心等待

apt -y update && apt -y install libgd3 libgd-dev && rm -rf /var/lib/apt/lists/*
#更新Docker内的PHP7.2环境并安装编译完整GD模块所需要的软件包

docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
#编译所有php .so模块(包含gd.so),时间可能长一点视机器配置而定,耐心等待

ls /usr/local/lib/php/extensions/no-debug-non-zts-20170718/
#列出编译完成的so文件列表

#到这里编译算完成了,只需要提取出文件,有两个命令可以选,任选其一
#提取出所有 .so 模块到我们开始的code目录:
cp /usr/local/lib/php/extensions/no-debug-non-zts-20170718/* ./
#只提取 gd.so 模块到我们开始的code目录:
cp /usr/local/lib/php/extensions/no-debug-non-zts-20170718/gd.so ./

exit
#退出Docker

exit
#退出fcli

ls code
#列出code目录,正常情况下so文件应该在此目录下。

提供的成品(适用于阿里云函数计算PHP 7.2)

下载链接:
Onedrive E5:
云盘下载

包含的拓展:

gd.so(已支持FreeType参数)

json.so

bmath.so

dom.so

iconv.so

mysqli.so

pdo_mysql.so

redis.so

soap.so

 

希望能给你带来一些帮助。

参考的文档

函数计算 php runtime 编译非内置的扩展 - 阿里云开发者社区
Trying to add freetype to php-gd in Docker official image - Stackoverflow

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注