如题,最近在折腾阿里云的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