安装流程
- 准备好编译源码需要的环境
- 先到PHP官网下载要安装的源码压缩包
- 解压并设置运行时配置
- 编译 && 安装
具体安装步骤
- 准备编译环境,以及PHP可能会需要的依赖
apt install gcc autoconf make
apt install libxml2-dev build-essential openssl libssl-dev libcurl4-gnutls-dev libjpeg-dev libpng-dev libtool-bin bison libxslt1-dev libfreetype6-dev libssl1.0
- 到 PHP官方下载页 或者 PHP 官方releases 页面 下载要安装的PHP版本的源码压缩包,这里我们以 PHP 7.2.25 版本为例
cd ~
wget https://www.php.net/distributions/php-7.2.25.tar.gz # 下载资源包
tar zxvf php-7.2.25.tar.gz
cd php-7.2.25
- cd 进入到源码目录之后可以看到当前目录下有
configure和buildconf,buildconf在需要重新生成configure文件的时候会用到,什么情况下会需要重新生成呢?比如我们要新增静态编译一个我们需要的PHP扩展。- 这一步可能会遇到的情况,请参考:ubuntu 源码安装php configure error 解决
- 不静态编译其他拓展的情况下
# --prefix 设置安装目录 # --with-config-file-path 设置php.ini配置文件的目录 # 可通过 configure --help 查看有哪些可用的指令 # 一个包含大部分需要的拓展的编译指令 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/conf --with-fpm-user=www-data --with-fpm-group=www-data --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-fpm --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-pcntl --enable-pdo --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-xml --enable-zip --enable-ftp --enable-exif --with-curl=/usr/local/php --with-freetype-dir=/usr/local/php/lib --with-gd --with-gettext --with-iconv-dir --with-jpeg-dir=/usr/local/php/lib --with-png-dir=/usr/local/php/lib --with-libxml-dir=/usr/local/php --with-mhash --with-openssl --with-pcre-regex --with-pear --with-xmlrpc --with-zlib --enable-bcmath --disable-rpath --with-xsl --enable-opcache --enable-fileinfo- 如果在编译安装的时候我们要直接把我们需要的扩展编译好,就需要到 pecl PHP扩展包 这里下载我们需要的扩展源码包,然后将拓展源码放到
php-7.2.25/ext这个目录下,然后执行buildconf重新生成buildconf文件。然后再执行编译,并在编译的时候设置开启这个扩展。比如我们要静态编译安装redis。
cd ~ wget https://pecl.php.net/get/redis-5.2.2.tgz # 下载redis扩展源码 tar zxvf redis-5.2.2.tgz # 下载redis扩展源码 cp -r redis-5.2.2 ~/php-7.2.25/ext/redis # 将扩展源码放到PHP源码的ext目录下 cd php-7.2.25 # 回到PHP源码根目录 buildconf --force # 然后执行 buildconf 重新生成 configure 文件 # 最后在 configure 配置中加入 --enable-redis 即可 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/conf --with-fpm-user=www-data --with-fpm-group=www-data --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-fpm --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-pcntl --enable-pdo --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-xml --enable-zip --enable-ftp --enable-exif --with-curl=/usr/local/php --with-freetype-dir=/usr/local/php/lib --with-gd --with-gettext --with-iconv-dir --with-jpeg-dir=/usr/local/php/lib --with-png-dir=/usr/local/php/lib --with-libxml-dir=/usr/local/php --with-mhash --with-openssl --with-pcre-regex --with-pear --with-xmlrpc --with-zlib --enable-bcmath --disable-rpath --with-xsl --enable-opcache --enable-fileinfo --enable-redis - 然后等待完成安装,顺利安装成功的话可以在我们设置的
--prefix的这个路径看到最终编译安装好的PHP相关文件,我们需要设置php.ini和php-fpm.conf等相关配置。我们指定的php.ini配置文件路径是/usr/local/php/conf,可能会没有这个目录,我们自己创建TA,然后将PHP源码目录下的php.ini-development或者php.ini-production复制一份到conf目录下,cp ~/php-7.2.25/php.ini-production /usr/local/php/conf/php.ini。然后是php-fpm的配置,php7默认是是在/usr/local/php/etc这个目录下,里面会有一个pear的配置文件和一个php-fpm以default为后缀的默认配置文件,我们复制一个文件把default后缀去掉即可,cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf。还有一个www的目录,www目录下也是一个默认文件(在php-fpm.conf中会引入),我们也是复制一个去掉default后缀即可。 - 执行至此PHP开发环境安装完毕
- 执行
/usr/local/php/sbin/php-fpm 即可开启fpm。 - 如果我们再编译安装的时候没有安装我们需要的扩展,那我们也通过
phpize编译安装或者简单的pecl安装方式来安装我们需要的扩展。这里简单介绍pecl的使用,编译安装的方法请自行搜索查找。
# 安装seaslog扩展 /usr/local/php/bin/pecl install seaslog # 执行这个指令,然后按照提示在php.ini文件中加入extension=seaslog.so即可 # 指定seaslog版本安装 /usr/local/php/bin/pecl install seaslog-2.0.2 - 执行
PHP7 使用opcache优化fpm,展示PHP7真正的实力!
-
安装后开启php-fpm,接入到生成环境负载上(),相同负载压力下,PHP5.4(开启APC的情况下)单个进程的CPU占用情况如下
而PHP7的单个fpm进程CPU占用非常高
在php.ini中打开opcache配置的注释符开启opcacheopcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.validate_timestamps=0 opcache.revalidate_freq=0 opcache.save_comments=0 opcache.file_cache=/tmp opcache.huge_code_pages=1有一个配置
opcache.fast_shutdown=1php7.2.0以后废弃了,fast_shutdown快速停止的续发事件的处理已经集成到 PHP 中,只要有可能,PHP会自动处理这些续发事件。
这时候fpm的CPU占用会得到很大幅度的改善,但是表现还是不如PHP5+APC环境下的fpm。
要达到最好的效果是要在php.ini中加上zend_extension=opcache.so这个配置。这个配置是ini文件中没有的,所以要我们手动加上。opcache既是PHP扩展,也是zend扩展,关于这两个的区别请移步PHP扩展与Zend扩展区别。设置这个之后fpm就得到了最好的性能提升了。 -
参考链接