需求背景:公司项目有个功能需要导出花名册,有个客户里的员工有几万名,每次导出需要很久且接口不稳定经常会报504。继而开发优化需要用到下xlswriter这个扩展。
先上官方地址:https://github.com/viest/php-ext-xlswriter
开始部署
由于公司的环境是docker-alpine,所以本想着更换下源,使用添加命令即可
1 | apk add php7-xlswriter |
结果发现 xlswriter文档中部署的源只有
1 | # 添加官方 Testing 源 |
尝试添加源以后,再装扩展,发现一直不能识别到扩展路径。
1 | PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php7/modules/xlswriter.so' - Error relocating /usr/lib/php7/modules/xlswriter.so: zend_wrong_parameter_type_error: symbol not found in Unknown on line 0 |
多方资料查询无果,加入群里问了下作者问题,作者==说apk的源没有更新,可通过pecl编译==,安装无奈最后选择编译安装了。
Pecl编译安装
1.pecl工具安装:
1 | cd /bin/ |
2.相关扩展的安装
1 | apk update |
3.尝试使用pecl安装xlswriter
1 | pecl install xlswriter会出现错误提示,但是不要紧xlswriter 的安装包已经下载下来了 |
4.编译安装
1 | # 解压 |
5.开始编译
1 | phpize && ./configure --with-php-config=/usr/bin/php-config7 --enable-reader |
编译后执行make && make install 会提示 make找不到命令
1 | apk add make |
然后再次运行make && make install,编译完成。
6.配置扩展文件
1 | 在cd /usr/lib/php7/modules/查看xlswriter.so文件是否存在 |
7.运行 php -m |grep xlswriter 确认是否安装上
1 | # php -m |grep xlswriter |
一劳永逸
在我编译安装后作者说,两个基础包一样的镜像,都安装一下zlib扩展,然后在另一个镜像里编译扩展,把编译好的so动态库复制过去就可以完成安装
这句话的意思两个相同的基础镜像1和2,在镜像1中编译之前安装zlib扩展,编译成功以后的xlswriter.so 可以复制在镜像2中,只需执行上面的第六步骤配置扩展文件
即可完成扩展的安装