ubuntu LTS 16.04只能安装php7及以上版本,这里安装的具体版本是php7.1.10
安装相关依赖库
依赖库安装
sudo apt-get update
sudo apt-get install libxml2-dev
sudo apt-get install build-essential
sudo apt-get install openssl
sudo apt-get install libssl-dev
sudo apt-get install make
sudo apt-get install curl
sudo apt-get install libcurl4-gnutls-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libpng-dev
sudo apt-get install libtool-bin
sudo apt-get install bison
sudo apt-get install php7.0-dev
sudo apt-get install php-fpm
编译安装libiconv
在libiconv官网下载压缩包,放到/usr/local/src
下,解压,编译安装,这里下载的是libiconv-1.15.tar.gz
sudo tar zxvf libiconv-1.15.tar.gz
cd libiconv-1.15
sudo ./configure --prefix=/usr/local
sudo make
sudo make install
sudo ldconfig // 刷新动态链接库缓存
注意,这里是将libiconv
安装到了系统默认的lib
目录下,安装路径/usr/local
不可随意更改,否则后面会出现编译错误。另外,执行sudo make
之后会有如下warning
warning: remember too run 'libtool --finish /usr/local/lib'
按照warning的提示执行一下
libtool --finish /usr/local/lib
编译安装PHP
编译PHP
去PHP官网下载php7.1.10
压缩包放到/usr/local/src
下,解压,编译安装,这里下载的是php-7.1.10.tar.gz
sudo tar zxvf php-7.1.10.tar.gz
cd php-7.1.10
sudo ./configure --prefix=/usr/local/php-7.1.10 --with-config-file-path=/usr/local/php-7.1.10/conf --with-apxs2=/usr/local/apache2/bin/apxs --with-iconv-dir=/usr/local/lib --enable-fpm --enable-mysqlnd --with-mysqli=mysqlnd --without-pear --disable-phar
sudo make ZEND_EXTRA_LIBS='-liconv'
sudo make install
注意,这里--with-apxs2
的路径要与apache2安装路径一致,--with-iconv-dir
路径要与libiconv
安装路径一致,pear
是php的一个组件,需要专门安装,因为php5以后,pear没什么用了,所以这里就禁用了pear。
fpm
是支持PHP的一个比较好的工具,php-fpm参数如下:
--start 启动
--stop 强制终止
--quit 平滑终止
--restart 重启
--reload 重新平滑加载php的php.ini
--logrotate 重新启用log文件
另外,PHP7.0启用了mysqlnd来支持MySQL连接,具体可选的有mysqli
和pdo-mysql
,可以通过参数来配置
--enable-mysqlnd
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd
安装完成之后,会有warning
warning: remember to run 'libtool --finish /usr/local/src/php-7.1.10/libs'
按照warning的提示执行一下
libtool --finish /usr/local/src/php-7.1.10/libs
完成之后,会在/usr/local/apache2/modules
下生成一个libphp7.so
,这就是Apache的php动态链接库.
PHP7.0以后不再提供默认的php.ini
配置文件,而是在源码目录下提供php.ini-development
和 php.ini-production
两个配置文件,一个用于开发环境,一个用于线上环境。这里我们把php.ini-production
复制到之前的php配置目录下,作为php的配置文件
sudo cp /usr/local/src/php-7.1.10/php.ini-production /usr/local/php-7.1.10/conf/php.ini
接下来我们配置Apache解析PHP
& Apache的mysqli扩展
配置Apache解析PHP
打开Apache的主配置文件/usr/local/apache2/conf/httpd.conf
,写入如下配置行
// 这一行刚刚安装php的时候,系统应该已经自动生成了,如果没有,手动加入即可
// 配置Apache加载php动态链接库
LoadModule php7_module modules/libphp7.so
// 配置Apache解析php
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
配置Apache的mysqli扩展
在php.ini
中加入以下配置
extension=/usr/local/php-7.1.10/lib/php/extensions/no-debug-zts-20151012/mysqli.so
在mysql-server的配置目录下,从主配置文件my.cnf
开始遍历配置文件,找到mysqld.sock
的路径。这里是用apt-get安装的mysql-server-5.7
,所以mysqld.sock
路径是/var/run/mysqld/mysqld.sock
,我们需要把这个路径写到php.ini
中。找到mysqli.default_socket,写入配置
mysqli.default_socket = /var/run/mysqld/mysqld.sock
重启Apache,加个php页面,用echo phpinfo()
看看Apache能否正常解析php,是否正常加载了php的配置文件,是否支持了mysqli,以及是否能找到mysqli.default_socket是否已经被配置。
编译安装PHP的mysqli扩展(以此为例介绍如何编译安装PHP扩展)
PHP所有的扩展都放在目录/usr/local/php-7.1.10/lib/php/extensions/no-debug-zts-20151012/
下,我们在这个目录下可以看到apache的扩展,现在我们来编译mysqli扩展。
转到php源码目录下的ext
文件夹中,这里可以看到该php版本所支持的所有扩展,应该可以看到mysqli
文件夹。转到mysqli
下,运行phpize
/usr/local/src/php-7.1.10/ext/mysqli$ /usr/local/php-7.1.10/bin/phpize
会得到以下信息
Configuring for:
PHP Api Version: 20151012
Zend Module Api No: 20151012
Zend Extension Api No: 320151012
会在该目录下生成configure等文件,然后执行
sudo ./configure --with-php-config=/usr/local/php-7.1.10/bin/php-config --with-mysqli
sudo make
sudo make install
注意,这里--with-php-config
并非apache配置文件所在路径,必须设为bin/php-config
。安装完之后会提示extensions所在路径,转到该路径下,可以看到mysqli.so
,即为mysqli扩展。(编译安装其他PHP也是同理)。