最近试了一下PHP7,在编译和支持MysqL上都遇到一些问题,相信不少同学也同样遇到,所以在这里聊一下这个过程。简单来讲编译PHP7只需要3步:
1、./buildconf --force 2、./configure 3、make && make install
1、3步,都没啥好管的,configure是编译的关键,涉及到PHP对一些库的支持,这里我们使用最小的支持,包括MysqL:
curl gd fpm MysqLnd
之所以把curl和gd拿来说,目的是要搞清楚,这些三方库在编译PHP之前得安装好,可以直接使用yum安装在默认位置,也可以编译安装到指定位置,yum安装后,编译时不用指定库的安装位置,关于安装这些库,可以搜索一下有很多。下面看看基本的configure
./configure --prefix=/apps/PHP/PHP7.0 --enable-mbstring --with-curl --with-gd --with-config-file-path=/apps/PHP/PHP7.0/etc/ --
enable-fpm --enable-MysqLnd --with-pdo-MysqL=MysqLnd
PHP-FPM
关于fpm,相信不用多说,用它来支持PHP是一个比较好的选择,PHP5.3.3开始就已经内置了PHP-fpm,所以PHP7里当然也有,只需要--enable-fpm一下就可以了
PHP-fpm参数:
--start 启动 --stop 强制终止 --quit 平滑终止 --restart 重启 --reload 重新平滑加载PHP的PHP.ini --logrotate 重新启用log文件
MysqL支持
重点讲一下这个,因为在它上面花了一点时间,不知道从哪一版本开始,PHP不在希望使用MysqL的库来支持MysqL的连接,启用了MysqLnd来支持,听说比libMysqL要快很多,PHP5.x还可以使用libMysqL,PHP7貌似已经取消了支持,编译都没有了--with-MysqL参数,只支持--with-MysqLi和--with-pdo-MysqL,可以通过查看configure的参数来知道:
可以看到,PHP希望使用MysqLnd来支持MysqL,所以参数可以这样写:
--enable-MysqLnd --with-MysqLi=MysqLnd --with-pdo-MysqL=MysqLnd
MysqLnd是不需要MysqL支持的,所以不用先安装好MysqL一样可以编译通过,启动PHP-fpm,查看一下PHPinfo,能看到MysqLnd和pdo_MysqL表示PHP已经可以支持MysqL了(这里用的是pdo,MysqLi同理)
几个问题
编译问题:cc: Internal error: Killed (program cc1)
这个问题是第一次遇到,原来是我的阿里云服务器关掉了swap,内存不够用,就报了这个错。 解决办法很简单,configure时加上--disable-fileinfo参数就可以了。
PHP报找不到MysqL服务
正如它所说,确实没找到,看看PHPinfo中pdo_MysqL.default_socket项
MysqL.sock在哪里,再看一下MysqL.sock的真正位置,使用命令:ps -ef|grep MysqL查看:
明显不在一个位置上,我的正确位置是:/var/lib/MysqL/MysqL.sock
所以,修改一下PHP.ini,找到pdo_MysqL.default_socket,改为你的实际位置,重启一下PHP-fpm,很不幸,虽然PHP.ini有这个配置,修改后,竟然不行,最好是编译的时候,指定MysqL.socket的位置:
如果还不行,可以到/tmp目录下建立一个MysqL.sock的软链接:
再重启一次PHP-fpm,相信已经正常运行了。如果需要PHP支持的库更多,可以再次编译,在configure时把需要的支持加上,就是--with-xxx这中,记得如果是三方的,要先安装这些库才行哦。
原文链接:https://www.f2er.com/php/20770.html