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

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

mac 系统,如何编译带 freetype 功能的 php 的 gd 模块 - freetype-gd
mac 系统,如何编译带 freetype 功能的 php 的 gd 模块(图12-1)

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

gd模块缺失了freetype的解决方案,到底是什么呢?说起来也挺简单的,解决方案就是:重新编译gd模块... 但是事情总是没有想像中的那么简单...

在本文中,苏南大叔将带您查看mac系统编译php的gd模块的事情。本文测试环境: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 模块(图12-2)

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

mac 系统,如何编译带 freetype 功能的 php 的 gd 模块 - 044
mac 系统,如何编译带 freetype 功能的 php 的 gd 模块(图12-3)

freetype模块支持

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

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

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

newsn.net:这里是【评论】可见内容

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

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

mac 系统,如何编译带 freetype 功能的 php 的 gd 模块 - 050
mac 系统,如何编译带 freetype 功能的 php 的 gd 模块(图12-5)

mac 系统,如何编译带 freetype 功能的 php 的 gd 模块 - 051
mac 系统,如何编译带 freetype 功能的 php 的 gd 模块(图12-6)

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

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

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

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 模块(图12-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 模块(图12-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 模块(图12-9)

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

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

mac 系统,如何编译带 freetype 功能的 php 的 gd 模块 - 020
mac 系统,如何编译带 freetype 功能的 php 的 gd 模块(图12-10)

mac 系统,如何编译带 freetype 功能的 php 的 gd 模块 - 043
mac 系统,如何编译带 freetype 功能的 php 的 gd 模块(图12-11)

mac 系统,如何编译带 freetype 功能的 php 的 gd 模块 - 055
mac 系统,如何编译带 freetype 功能的 php 的 gd 模块(图12-12)

相关链接

总结

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

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

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

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

本站的忠实读者小伙伴,正在阅读下面这些文章:

欢迎转载传播本篇原创文章,转载请保留链接及作者信息。
欢迎指正文字或逻辑错误,将会择优在文末列出您的信息。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

苏南大叔需要你的支持

感谢您的打赏,让我更有动力,将更多精彩教程文章,呈现给大家!谢谢!