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

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

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

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

php是否支持freetype情况对比

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

freetype功能的phpinfo截图。

mac系统,如何编译带freetype功能的php的gd模块 - 010

缺失freetype功能的phpinfo截图。

mac系统,如何编译带freetype功能的php的gd模块 - 044

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模块 - 051

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

方案二:带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

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

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

mac系统,如何编译带freetype功能的php的gd模块 - 027

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

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

mac系统,如何编译带freetype功能的php的gd模块 - 020

mac系统,如何编译带freetype功能的php的gd模块 - 043

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

相关链接

总结

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

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

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。