我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

php下有个有关php创建图片相关的gd.so文件,似乎有段时间是gd2.so文件,不知道为啥又变回去了。这计算机的时代,变化就是最大的不变。但mac系统下自带的phpgd模块中,缺失了freetype支持,显然不能满足国内各种开源系统的要求。

苏南大叔:mac 系统,如何编译带freetype功能的php的gd模块 - freetype-gd
mac 系统,如何编译带freetype功能的php的gd模块(图11-1)

这会导致:多数图片验证码功能失效。换句话说,如果你的php源码使用mac做测试环境的话,那么很有可能发生的事情,就是:gd模块缺少freetype支持,导致图片验证码不能显示。

gd模块缺失了freetype的解决方案,到底是什么呢?说起来也挺简单的,解决方案就是:重新编译gd模块... 但是事情总是没有想像中的那么简单... 在本文中,苏南大叔将带您查看mac系统编译phpgd模块的事情。

本文测试环境:mac/php7.2.2/gd@2.1.0/freetype@2.9

php是否支持freetype情况对比

mac系统自带的php,且不说是不是最新版。gd模块似乎是构建在php内部的,也就是说,并没有独立的gd.so文件。所以,试图通过替换.so模块来补齐freetype功能,似乎是不切合实际的。那么,理想很丰满,现实很骨感。苏南大叔为了一个freetype,将php全部推倒重来了。相关文章请参见文末链接。

freetype功能的phpinfo截图如下:

苏南大叔:mac 系统,如何编译带freetype功能的php的gd模块 - 010
mac 系统,如何编译带freetype功能的php的gd模块(图11-2)

缺失freetype功能的phpinfo截图如下:

苏南大叔:mac 系统,如何编译带freetype功能的php的gd模块 - 044
mac 系统,如何编译带freetype功能的php的gd模块(图11-3)

freetype模块支持

freetype的支持,其实也是需要个第三方包的。然后,php下的gd,再把freetype功能整合进去。所以,需要先确保freetype的安装。

当然,读者朋友也可以试试直接跳过这一步,撞墙之后再来回头看看也行。因为你的mac里面可能安装了这个东东,仅仅是没有在php中启用而已。

截至发稿,freetype的最新版是2.9,下载地址是:

seosn.com:这里是【评论】可见内容

下载解压后,需要执行如下命令进行编译。

make clean
./configure --with-static --with-shared
make & make install

苏南大叔:mac 系统,如何编译带freetype功能的php的gd模块 - 050
mac 系统,如何编译带freetype功能的php的gd模块(图11-5)

苏南大叔:mac 系统,如何编译带freetype功能的php的gd模块 - 051
mac 系统,如何编译带freetype功能的php的gd模块(图11-6)

gd其实还有jpeg/gif/png等功能模块,但是除了freetype之外,其他的模块似乎一般都是默认启用的状态,并不会出什么纰漏。所以,这里也不会特别处理。

方案一:带freetypegd功能作为php的内置功能

安装脚本如下,不解释。因为,本节内容并非本文的主要阐述主体。参数--with-gd保证:编译完成的gd模块固化在php之中,当然,并不是说,./configure就不能添加别的参数了,别的参数,如果你需要,就自行添加即可。

cd ext/gd/
make clean
phpize
./configure --with-freetype-dir --with-jpge-dir --with-png-dir --with-gd
make
sudo make install

苏南大叔:mac 系统,如何编译带freetype功能的php的gd模块 - 045
mac 系统,如何编译带freetype功能的php的gd模块(图11-7)

方案二:带freetypegd功能模块作为第三方模块进行构建

这个方案中,gd是一个独立模块,可以在php.ini中独立配置是否启用。相对而言,是比较灵活的。建议大家使用这个方案,在这个方案里面,设置到php源码(自行到官网下载合适版本)目录下面的ext/gd/目录,一切操作都是基于这个目录进行的。切记。

在具体操作之前,请自行阅读有关php源码编译的文章,请确保系统路径下的php-config以及phpize是配套的!譬如--with-php-config=/usr/bin/php-config,这个可能是你需要的参数。

cd ext/gd/
phpize
./configure --with-php-config=/usr/bin/php-config --with-freetype-dir --with-jpge-dir --with-png-dir
make
sudo make install

苏南大叔:mac 系统,如何编译带freetype功能的php的gd模块 - 017
mac 系统,如何编译带freetype功能的php的gd模块(图11-8)

注意,如果单单./configure,而不添加相关参数的话。生成的gd.so文件,是不包含我们期待的freetype功能的,是个阉割版的gd

  • 一定注意添加相关参数--with-freetype-dir --with-jpge-dir --with-png-dir
  • install的过程中,也许会碰到目录权限的问题。您可以参照下面的截图解决问题

苏南大叔:mac 系统,如何编译带freetype功能的php的gd模块 - 027
mac 系统,如何编译带freetype功能的php的gd模块(图11-9)

得到gd.so之后,在php.ini中启用即可,重启生效。可以用下面的脚本确认一下php.ini的文件位置。

php -r "phpinfo();" | grep php.ini

苏南大叔:mac 系统,如何编译带freetype功能的php的gd模块 - 020
mac 系统,如何编译带freetype功能的php的gd模块(图11-10)

更多查找php.ini文件的方式,请点击下面这个链接:

重启php后,新的gd库生效:

苏南大叔:mac 系统,如何编译带freetype功能的php的gd模块 - 重启服务器
mac 系统,如何编译带freetype功能的php的gd模块(图11-11)

相关链接

总结

freetype功能模块是验证码相关必备功能,这个模块对于国人来说,是个刚需。但是万恶的mac,居然是默认不开启这个功能的。而如果想要开启它,通过源码编译的途径,显然是条非常痛苦的途径,并不建议大家走这条路。

但是喜欢折腾的你,还是感谢你的耐心阅读。欢迎点赞、打赏、转载苏南大叔的文章。更多php相关文章,请点击这里查看:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php    gd