环境:centos7 nginx php7.2
一、安装前准备
1. 检查是否已安装PHP
yum安装检查:yum list installed |grep php
rpm安装检查:rpm -qa |grep php
2. 安装php所需的依赖库
1)zlib zlib-devel #数据压缩解压函数库
2)libxml2 libxml2-devel #libxml2是一个c语言的xml程序库,可以简单的对xml进行各种操作,并且支持xpath查询,以及部分支持xslt转换等功能。
3)libxslt libxslt-devel #如果不安装libxslt-devel会提示找不到xslt.config文件,xslt是转换xml到其他格式的扩展。
4)openssl openssl-devel #安全套接字层密码库
5)libjpeg libjpeg-devel libpng libpng-devel ... #php的gd库所需。
6)freetype freetype-devel #免费开源的且可移植的字体引擎,提供统一的接口访问多种字体格式,这两个都是gd库的依赖软件,所以如果没有安装,或者版本太低,在安装php时设定的是安装gd库则 会报错,另外不安装-devel也是会报错的,因为编译扩展的时候会缺少ft2build.h文件。
7)gd gd-devel #gd是php处理图形的扩展库
8)curl curl-devel #命令行工具,通过指定的URL来上传或下载数据
9)gcc gcc-c++ #gcc编译器用来编译c,c++源码包(一般系统自带,最小化安装怎没有)
10)glibc glibc-devel #C运行库(一般系统自带)
11)glib2 glib2-devel #C语言函数库(一般系统自带)
12)libaio libaio-devel #和异步调用有关
13)ncurses #是一个Linux系统下的图形支持的函数库,字符终端处理库
14)m4 #是一个宏处理器.将输入拷贝到输出,同时将宏展开
二、下载php源码包
地址:https://www.php.net/downloads.php
解压源码包,并进入到解压的文件目录
三、PHP扩展库的安装方式
1. 静态编译:安装php时通过--with --enable 将扩展库和php一起编译安装到php内核,这样速度更快(php源码包有php官方支持的所有扩展库)
2. 动态编译:已安装好php后,还要增加其他扩展(一般是第三方扩展:redis,mecache,mongodb),使用php的phpize工具编译安装生成xxx.so文件,在php配置文件中引入,使扩展生效
php源码包内有所有php官方支持的扩展库,但并不是所有的扩展库都会编译安装
php默认会编译安装的扩展库(直接安装php,不进行任何配置)
Core ctype date dom fileinfo filter hash iconv json libxml pcre PDO pdo_sqlite Phar posix Reflection session SimpleXML SPL sqlite3 standard tokenizer xml xmlreader xmlwriter
php默认不会编译安装的扩展库
(1)以--enable-xxx方式开启
zip fpm inline-optimization exif bcmath mbstring debug
(2)以--with-xxx方式开启
gd curl bz2 zlib mysqli openssl xmlrpc gmp xsl
三、编译配置(此步用来生成编译时需要的文件)
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-freetype-dir --with-openssl --with-curl --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-fpm-user=php --with-fpm-group=php --enable-mbstring --enable-exif --with-libzip
1. 路径设置
--prefix=/usr/local/php #php的安装路径
--with-config-file-path=/usr/local/php/etc #php配置文件的路径(php.ini,php-fpm.conf)
--prefix=/usr/local/php7.2 #php安装路径
2. 编译扩展库时需要依赖第三方类库的php扩展库
--with-xxx=path[=path]
若依赖是用rpm,yum 安装在linux默认位置,则不用指定。若依赖是编译安装在其他位置,则要指定依赖包的安装路径
如编译php的mysqli,pdo-mysql扩展时使用php源码自带的mysqlnd(文件在解压的源码文件根目录)驱动
--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd
3. 指定php扩展库运行时需要的依赖包位置
--with-xxx-dir[=path] #不带路径在默认安装位置查找(相关的包要在Linux上已安装)
如gd库运行时需要的jpeg,png,freetype,zlib库
--with-jpeg-dir --with-webp-dir --with-png-dir --with-zlib-dir --with-freetype-dir
4. 编译扩展库时不需要依赖第三方类库的php扩展库(如ftp,zip,libxml)
--enable-xxx --enable-ftp
5. 某些默认会编译安装的库不让它编译(如编译时占用内存很大的库:fileinfo)
--disable-xxx --disable-fileinfo
四、编译
make #用来编译生成php,php扩展安装的可执行文件(安装程序)和所需的文件
make test #检测编译是否正确,只有编译都正确后再安装以后才不会有莫名的错误
五、安装
make install #执行编译生成的安装程序
六、安装后配置
1. 加入php.ini配置文件
在解压的php源码包中有2个php的配置文件php.ini-development (用于开发环境) php.ini-production(用于产品环境),根据需要选择一个放到php配置文件目录,并重命名为php.ini
php配置文件目录默认位置:/usr/local/php/etc (php安装目录/usr/local/php)
2. 加入php-fpm.conf配置文件:
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
3. 加入www.conf配置文件:
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
完成后php就可以作为一个独立的模块运行了
七、php-fpm服务控制
1. 启动
/usr/local/php/sbin/php-fpm #也可以设置环境变量
2. 查看启动信息
ps aux | grep -c php-fpm #查看php-fpm进程数
ps -ef |grep php-fpm
3. php-fpm 命令
-m #查看已启用的扩展
-v #查看版本信息
-i #查看php信息
4. 停止php-fpm
kill -INT php-fpm进程id #
kill -USR2 php-fpm进程id #
kill -9 php-fpm进程id
完整配置: ./configure --prefix=/usr/local/php7.2 --sysconfdir=/etc/php7 --with-config-file-path=/etc/php7 --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mhash
--with-openssl --with-bz2 --with-curl --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --enable-mbstring --enable-sockets
--with-iconv-dir --with-xsl --enable-zip --with-pcre-dir --with-pear --enable-session --enable-xml --with-freetype-dir --enable-gd-jis-conv
--enable-inline-optimization --enable-shared --enable-bcmath --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-mbregex --enable-pcntl --with-xmlrpc
--with-gettext --enable-exif --with-readline --with-recode --enable-fpm --disable-fileinfo 注意:服务器内存不足1G,配置项加上:--disable-fileinfo #默认会开启,禁用掉它
或者开启swap虚拟内存
--with-库名 #要编译安装该扩展库
--without-库名 #用于默认安装的php扩展库进制安装
--with-库名=filepath #表示在编译生成这个库时需要的某个库或工具的路径
--with-mysqli=mysqlnd --with-pdo-mysqli=mysqlnd #编译mysqli,pdo_mysqli扩展是用最新的MySQL驱动mysqlnd
--with-gd2 #gd2.0 php图片处理用到的库
--with-freetype #全真字体库
--with-xsl #libxml2的扩展,用于支持xstl文件
--with-xmlrpc #处理xml请求的php扩展库
--with-libxml2 #解析XML文档的函数库,编译安装该库需要libxml(--with-libxml-dir)
--with-bz2 #支持bz2文件处理的php扩展库
--enable-zip #启用zip模块,使php支持对zip文件的处理
--enable-fpm #php-fpm是PHP专用的fastcgi管理器
--enable-fileinfo #获取文件真实MIME类型的模块
--enable-bcmath #图片大小调整模块,gd改变图片尺寸需要
--enable-exif #图片元数据支持,gd库需要
--enable-gd-jis-conv #
--enable-mbregx #多字节正则字符串支持(中文字符串正则)
--enable-ftp #
--enable-mbstring #多字节字符串支持(中文字符串准确计算长度)
--prefix=路径 #设置php的安装路径
--enable-xxx #启用某个模块,php源码内置的模块用这个开启
--without-xxx #不包含某个包的支持
--disable-xxx #禁用某模块
--with-apxs2=/usr/local/apache/bin/apxs #构建共享Apache2.0模块,后面路径是Apache的apxs工具的路径,要先安装apxs
--with-MySQL=/usr/local/mysql #
--with-webp-dir
--with-jpeg-dir #打开对jpeg图片的支持
--with-png-dir #打开对png图片的支持
--with-gd # 打开gd库的支持
--with-freetype #打开对freetype字体库的支持
--enable-bcmath #图片大小技术调整支持
--enable-sockets #
--enable-gd-jis-conv
--enable-gd-native-ttf #画图字体库支持,php7.2开始不支持
--with-xsl #打开xsl支持,是xml2库的扩展
--with-gd #打开libxml2库的支持
--with-xmlrpc # 打开xml-rpc的c语言
--enable-xml
--enable-libxml
--with-bz2 #打开对bz2文件的支持
--enable-zip # 支持php对zip压缩包处理
--with-zlib # 包含压缩库,文件压缩与解压基本库
--with-libzip #包含libzip库
--with-pcre-regx #正则表达式支持(utf8 ascii)
--enable-mbregx #多字节正则字符串支持
--enable-mbstring #多字节字符串的支持(utf8mb4)
--enable-fpm # 启用fpm可执行文件的构建,php作为一个独立的进程运行
--with-fpm-user=www #php-fpm进程的用户名
--with-fpm-group=www #
--enable-fastCGI
--enable-force-CGI-redirect
--enable-pcntl #php扩展,支持php的多线程操作
--with-tidy #php整理和修复html打工具(相关包:tidy tidy-devel php-didy libtidy libtidy-devel)
--with-gmp
--with-iconv #字符编码转换函数库
--enable-inline-optimization #优化线程,给php整体做性能优化处理用
--enable-opcache #缓存支持
--enable-ftp #打开ftp服务
--with-pear #php扩展和应用程序库,包含许多有用的类
--with-openssl #加密传输支持,https
--with-ncurses #支持ncurses 屏幕绘制以及基于文本终端的图形互动功能的动态库
--with-mysqli=mysqlnd #
--with-pdo-mysql=mysqlnd #
--disable-rpath #关闭额外运行库
--enable-magic-quotes #魔术引用
--enable-phpdbg #启用phpdgb调试模块,是一个php的SAPI模块
--disable-debug #关闭debug调试
--enable-debug #开启,开发环境要的
--with-pcre-dir=/usr/local/bin/pcre-config #正则库安装位置
--with-config-file-path=/usr/local/php/etc #指定php.ini位置