最近尝试了PHP7,在编译和支持MySQL的时候遇到了一些问题。相信很多同学也遇到了一些问题,所以我在这里就说说这个过程。简单来说,编译PHP7只需要3个步骤:
1、/buildconf - force2、/configure3、进行制作安装
1、3个步骤,没什么好管理的,配置是编译的关键,涉及到PHP对一些库的支持,这里我们用最少的支持,包括MySQL:
curlgdfpmmysqlnd
之所以提到curl和gd,是为了明确这些三方库在编译PHP之前必须安装,可以直接使用yum安装在默认位置,也可以编译安装到指定位置。yum安装后,编译时不需要指定库的安装位置。有很多可以搜索的库。让我们看一下基本配置。/configure-prefix=/apps/PHP/PHP 7 . 0-enable-mbstring-with-curl-with-GD-with-config-file-path=/apps/PHP/PHP 7 . 0/etc/-
enable-fpm-enable-mysqlnd-with-PDO-MySQL=mysqlnd
PHP-FPM
关于fpm,我相信用它来支持PHP是一个不错的选择。php-fpm已经内置在PHP5.3.3中,所以它在PHP7中肯定是可用的,只是- enable-fpm。
Php-fpm参数:
- start start - stop强制终止-退出平滑终止-重启-重载以平滑加载php的php.ini - logrotate以重新启用日志文件。
MySQL支持
专注于此,因为它花了一点时间。不知道从哪个版本开始,PHP不再想用mysql库支持mysql连接,而是启用了mysqlnd支持。听说比libmysql快多了。PHP5.x也可以使用libmysql。PHP7似乎已经取消了对它的支持,它的编译也随着-mysql参数一起消失了。仅支持带MySQL和带PDO的MySQL,这可以通过检查configure:/configure-help | grep MySQL
可以看到PHP想用mysqlnd来支持MySQL,所以参数可以写成如下:
-enable-MySQL nd-with-MySQL Li=MySQL nd-with-PDO-MySQL=MySQL nd
Mysqlnd不需要mysql支持,所以不用先安装mysql就可以编译。启动php-fpm,检查phpinfo,可以看到mysqlnd和pdo_mysql都表示php已经可以支持mysql了(这里用的是pdo,MySQL也是一样的)。
几个问题
编译问题:cc:内部错误:被杀死(程序cc1)。
第一次遇到这个问题。原来我的阿里巴巴云服务器关闭了swap,内存不够,所以我报告了这个错误。解决方法很简单,只需在配置时添加- disable-fileinfo参数。
PHP找不到mysql服务。
如它所说,它没有被发现。看看phpinfo中的pdo_mysql.default_socket项。
mysql.sock在哪里?看看mysql.sock的真实位置,使用命令:ps -ef|grep mysql查看:
显然不在同一个位置,我的正确位置是://var/lib/var/lib/MySQL/MySQL . sock
因此,修改php.ini,找到pdo_mysql.default_socket,将其更改为您的实际位置,然后重新启动php-fpm。不幸的是,尽管php.ini有这种配置,但修改后将无法工作。编译时最好指定mysql.socket的位置:
-with-MySQL-sock=/var/lib/MySQL/mysql.sock如果还不够,可以去/tmp目录建立MySQL . sock的软链接:
ln-s/var/lib/MySQL/MySQL . sockmysql . sock再次重启php-fpm,相信一直运行正常。如果需要更多PHP支持的库,可以重新编译。配置时,添加所需的支持,即- with-xxx。请记住,如果是三方,您必须首先安装这些库。