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

mac系统安装php72,最容易的办法,是使用brew。但是本文中,苏南大叔要写的是使用最原始的办法,刀耕火种般的自己编译一个php出来。所以,如果你的主要目的是安装php72,而不是体验一下手工编译php的乐趣的话,请直接跳到本文尾部,查看如何使用brew安装php72

苏南大叔:mac系统,如何手工编译php72? - mac-compile-php
mac系统,如何手工编译php72?(图10-1)

本篇教程中的手工编译方法,比较容易碰到各种各样的拦路虎,导致最终的安装失败。如果您和苏南大叔一样,仅仅是想体验一下手工编译php的乐趣的话,那么,请继续阅读本篇教程。

清理本机php

如果您系统里面现有的php是使用brew安装的,那么请使用brew uninstall卸载。重点的是:一定要把系统路径中的php,phpize,和php-config彻底删除。等我们的php编译安装完成后,再利用软连接把这几个文件给链接回来。

这个时候,就需要我们万能的whichwhereis了。用这两个命令来查找上述系统路径。然后再rm -rf掉即可。

which phpize
sudo rm -rf /usr/local/bin/phpize
which php
sudo rm -rf /usr/local/bin/php
which php-config
sudo rm -rf /usr/local/bin/php-config
sudo pkill -INT -o php-fpm

当然您系统的上述路径可能和苏南大叔的路径不一致,那么请注意替换上述路径。当然,如果您选择更谨慎的操作的话,可以先把这三个文件先备份一下,再删除掉,这是个更加稳妥的方案。本机的php-fpm进程一定要kill掉,否则可能会导致install操作失败。

安装xcode

我们要编译的是最新版的php。所以安装最新版的xcode也是当务之急。xcode的安装是在appstore里面进行的。但是在编译过程中,似乎并不需要xcode出马。编译过程所需要的.h库文件,都存在于xcode之中。没有最新版本的xcode的话,就会报各种.h文件不能找到。xcode内部的.h库文件的事情,请参见这篇文章:

安装好xcode之后,还可能会碰见必须同意xcode协议之类的提示。可以参见这篇文章:

下载并编译php源码

苏南大叔从php官网上面下载到最新的php7.2.2的源码,然后对它进行编译。下载地址是:

苏南大叔:mac系统,如何手工编译php72? - php72src
mac系统,如何手工编译php72?(图10-2)

make clean
./configure
make
sudo make install

make clean仅仅是用于第二次编译的时候,第一次编译的话,这条命令是不需要的。

苏南大叔:mac系统,如何手工编译php72? - 002
mac系统,如何手工编译php72?(图10-3)

另外一点,需要注意的是:./configure这一步,参数众多,变数极大,大家可以尽量减少这一步的参数,以最大限度的减少出错的概率。而没有被编译进来的模块,我们可以通过对模块单独编译的方式,来二次启用这些模块。这些模块以后会以.so文件的形式,出现在extension目录之中。然后,我们可以通过在php.ini中利用extension=xxx.so;的方式,启用对应模块。

苏南大叔认为:最简单的情况下,是可以不指定任何的参数的。当然,你也可以自定义一下--prefix,来指定一下最终php的安装位置。

当然,如果你认为某个模块,肯定是会无条件需要的,而且也是无条件肯定能编译成功的,你可以在./configure这一步,使用--with-xxx之类的参数,使这些模块,固化在php程序体内。具体的参数,大家可以采用下面的方式获得参数列表。每个版本的php的参数列表都是不一致的,所以,试图通过百度来获得真实列表的方式,都是不切合实际的,请具体问题具体分析自己的php版本源码。

./configure --help

anyway,下面的是苏南大叔的./configure命令参数,仅供参考,并非最优化方案。

./configure --prefix=/usr/local/php72 --enable-fpm

苏南大叔:mac系统,如何手工编译php72? - 004
mac系统,如何手工编译php72?(图10-4)

苏南大叔:mac系统,如何手工编译php72? - 005
mac系统,如何手工编译php72?(图10-5)

sudo make install完成后,我们还需要对系统目录下的相关文件,进行软连接操作。相关文件分别是:php,phpize,和php-config。这一步很重要,会严重影响后续新的模块编译。成败在此一举。在这一步中,请注意检查对应系统目录下的相关文件,是否删除完成,再执行新的ln操作。

sudo ln -s /usr/local/php72/bin/phpize /usr/local/bin/phpize
sudo ln -s /usr/local/php72/bin/php /usr/local/bin/php
sudo ln -s /usr/local/php72/bin/php-config /usr/local/bin/php-config

效果展示

如果上述步骤都顺利完成的话,我们就可以看到期待已久的phpinfo()了。当然,也可以在终端中通过--version来做辅助判断。

这样操作后,默认的fpm的配置文件位置是:/usr/loca/etc/php-fpm.conf。其他的请参见相关文章即可。如果您需要对fpm进行设置的话,请参见这篇文章。https://newsn.net/say/php-fpm-command.html

苏南大叔:mac系统,如何手工编译php72? - 006
mac系统,如何手工编译php72?(图10-6)

如果,您使用的apache的内置模块的形式的话,请注意调整httpd.conf文件,否则您不能正常使用这款自己编译的php版本的。这部分内容,在以后的文章里面会有更加详细的描述。

LoadModule php7_module        modules/libphp7.so
AddType application/x-httpd-php .php .html .htm
PHPIniDir /usr/local/etc/php.ini

苏南大叔:mac系统,如何手工编译php72? - 020
mac系统,如何手工编译php72?(图10-7)

苏南大叔:mac系统,如何手工编译php72? - 021
mac系统,如何手工编译php72?(图10-8)

题外话

通过brew安装php72的脚本如下,其实,这个才是最简单的安装php72的途径。脚本如下,不解释。

brew tap homebrew/homebrew-php
brew install php72 --with-apache --with-freetype

苏南大叔:mac系统,如何手工编译php72? - brew_001
mac系统,如何手工编译php72?(图10-9)

苏南大叔:mac系统,如何手工编译php72? - brew_002
mac系统,如何手工编译php72?(图10-10)

结论

编译php的过程,感觉就是瞎折腾。哈哈。想体验一下折腾的快感吗?来和苏南大叔一起编译php吧。更多php的相关经验文章,苏南大叔建议您,点击这里查看:https://newsn.net/tag/php/

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

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

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

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