mac系统,如何手工编译php72?
发布于 作者:苏南大叔 来源:程序如此灵动~mac
系统安装php72
,最容易的办法,是使用brew
。但是本文中,苏南大叔要写的是使用最原始的办法,刀耕火种般的自己编译一个php
出来。所以,如果你的主要目的是安装php72
,而不是体验一下手工编译php
的乐趣的话,请直接跳到本文尾部,查看如何使用brew
安装php72
。
本篇教程中的手工编译方法,比较容易碰到各种各样的拦路虎,导致最终的安装失败。如果您和苏南大叔一样,仅仅是想体验一下手工编译php
的乐趣的话,那么,请继续阅读本篇教程。
清理本机php
如果您系统里面现有的php
是使用brew
安装的,那么请使用brew uninstall
卸载。重点的是:一定要把系统路径中的php
,phpize
,和php-config
彻底删除。等我们的php编译安装完成后,再利用软连接把这几个文件给链接回来。
这个时候,就需要我们万能的which
和whereis
了。用这两个命令来查找上述系统路径。然后再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
的源码,然后对它进行编译。下载地址是:
make clean
./configure
make
sudo make install
make clean
仅仅是用于第二次编译的时候,第一次编译的话,这条命令是不需要的。
另外一点,需要注意的是:./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
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 。
如果,您使用的apache的内置模块的形式的话,请注意调整httpd.conf
文件,否则您不能正常使用这款自己编译的php版本的。这部分内容,在以后的文章里面会有更加详细的描述。
LoadModule php7_module modules/libphp7.so
AddType application/x-httpd-php .php .html .htm
PHPIniDir /usr/local/etc/php.ini
题外话
通过brew安装php72的脚本如下,其实,这个才是最简单的安装php72的途径。脚本如下,不解释。
brew tap homebrew/homebrew-php
brew install php72 --with-apache --with-freetype
结论
编译php的过程,感觉就是瞎折腾。哈哈。想体验一下折腾的快感吗?来和苏南大叔一起编译php吧。更多php的相关经验文章,苏南大叔建议您,点击这里查看:https://newsn.net/tag/php/ 。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。