1.官网下载最新版本,移动到官网下载页面:https://www.php.net/downloads.php。鼠标移动到要下载的版本超链接文案,审查页面元素获取链接。
这里以7.3.8为例:https://www.php.net/distributions/php-7.3.8.tar.gz
wget -P /usr/local/src/ https://www.php.net/distributions/php-7.3.8.tar.gz // -P参数用来指定下载到哪个目录下
2.配置编译参数,比如官方扩展库的安装与否,安装文件,配置文件等的路径等等。
./configure --help 会有所有参数的作用解释 网上有中文翻译版。以下版本为网上借鉴,并实践后解决了其中的部分错误后整理所得。
> useradd www> groupadd www
./configure --prefix=/usr/local/php7 \
--with-config-file-path=/usr/local/php7 \
--with-fpm-user=www \
--with-fpm-group=www \
--with-curl=/usr/local/php7/curl \
--with-openssl-dir=/usr/local/php7/openssl \
--with-openssl \
--enable-sockets \
--enable-fpm \
--enable-cli \
--enable-mbstring \
--enable-pcntl \
--enable-soap \
--enable-opcache \
--enable-fileinfo \
--disable-rpath \
--enable-mysqlnd \
--with-mysqli \
--with-pdo-mysql \
--with-iconv-dir \
--with-mhash \
--with-gd=no \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--enable-zip \
--with-zlib \
--enable-simplexml \
--with-libxml-dir
//配置检查过程中会报各种:
#1 configure: error: libxml2 not found.
Please check your libxml2 installation.yum install libxml2 libxml2-devel
//那么缺什么库就使用yum安装,然后再执行上面的编译配置
#2 configure: error: Cannot find OpenSSL's <evp.h>yum install openssl openssl-devel
//依然报上面的错误改--with-openssl=/usr/local/php7/openssl => --with-openssl=/usr/local/php7/openssl-dir
#3 configure: error: Please reinstall the libzip distribution
yum install libzip libzip-devel
#4 checking for libzip... configure: error: system libzip must be upgraded to version >= 0.11yum remove -y libzip //移除旧版本的libzip库,源码安装最新版本(需要cmake)yum install wget
wget -P /usr/local/src/ https://libzip.org/download/libzip-1.5.2.tar.gz
cd /usr/local/src/tar -vxf libzip-1.5.2.tar.gz
cd libzip-1.5.2mkdir build && cd build && cmake .. && make && make install
#5 CMake Error at CMakeLists.txt:4 (CMAKE_MINIMUM_REQUIRED):#6 CMake 3.0.2 or higher is required. You are running version 2.8.12.2yum remove -y cmake
wget -P /usr/local/src/ https://github.com/Kitware/CMake/releases/download/v3.15.2/cmake-3.15.2.tar.gz
cd /usr/local/src/tar -vxf cmake-3.15.2.tar.gz
cd cmake-3.15.2./configure --prefix=/usr/local/cmake-3.15.2make
make install // 我在cmke的编译过程中没有遇到报错。最后检测cmake --version
#7 -bash: /usr/bin/cmake: No such file or directory
ln -s /usr/local/cmake-3.15.2/bin/cmake /usr/bin/cmake
//再执行cmake --version 显示cmake version 3.15.2vim /root/.bashrc
# 增加别名定义 alias cmake='/usr/local/cmake-3.15.2/bin/cmake'保存
source /root/.bashrc //立刻生效配置//那么我们再回到libzip的cmake安装 把问题
#4 下的方案在执行一遍cd /usr/local/src/libzip-1.5.2rm -rf build
mkdir build && cd build
cmake ..
#8 -- Could NOT find NETTLE (missing: NETTLE_LIBRARY NETTLE_INCLUDE_DIR)
#-- Could NOT find GnuTLS (missing: GNUTLS_LIBRARY GNUTLS_INCLUDE_DIR)
#-- Could NOT find BZip2 (missing: BZIP2_LIBRARIES BZIP2_INCLUDE_DIR)
#CMake Warning at CMakeLists.txt:218 (MESSAGE):
# -- bzip2 library not found; bzip2 support disabled
#-- Configuring done
#-- Generating done
#-- Build files have been written to: /usr/local/src/libzip-1.5.2/bulid
yum install bzip2 bzip2-devel
//再来一次 make ..少了Cmake警告 那两个无法找到的库 好像是用来加密的 网上资料很少 我无视直接编译安装了
make
make install
// 成功 再回到php配置编译参数执行
#9 configure: error: off_t undefined; check your library configuration
vim /etc/ld.so.conf
//添加内容/usr/local/lib64/usr/local/lib/usr/lib/usr/lib64
//保存并退出:wq
ldconfig -v
# 使之生效 成功 再回到php配置编译参数执行
#10 configure: error: Cannot find OpenSSL's <evp.h>
//这个问题又出现了 蛋疼
//网上看了半天没有解决方案 最后又加了一行 --with-openssl \
就好了 真他妈神奇 看来编译配置参数的解释要去好好看看
#11 # configure: error: Please reinstall the libcurl
// yum -y install curl-devel
3 编译和安装
make test // 结果运行了很久 最后报告显示还有不少测试错误 以为出问题了也不知道怎么处理
//后来网上说 只要配置参数部分成功完成 这步可以忽略
有写测试指标依赖于环境 主要是给官方做免费测试用的
make && make install
//出现以下结果为编译成功Build complete.Don't forget to run 'make test'.
Installing shared extensions:
/usr/local/php7/lib/php/extensions/no-debug-non-zts-20180731/Installing PHP CLI binary: /usr/local/php7/bin/Installing
PHP CLI man page: /usr/local/php7/php/man/man1/Installing PHP FPM binary: /usr/local/php7/sbin/Installing PHP FPM defconfig:
/usr/local/php7/etc/Installing PHP FPM man page: /usr/local/php7/php/man/man8/Installing PHP FPM status page: /usr/local/php7/php/php/fpm/Installing
phpdbg binary:
/usr/local/php7/bin/Installing phpdbg man page: /usr/local/php7/php/man/man1/Installing PHP CGI binary: /usr/local/php7/bin/Installing
PHP CGI man page: /usr/local/php7/php/man/man1/Installing build environment: /usr/local/php7/lib/php/build/Installing
header files: /usr/local/php7/include/php/Installing helper programs: /usr/local/php7/bin/
program: phpize
program: php-config
Installing man pages: /usr/local/php7/php/man/man1/
page: phpize.1
page: php-config.1Installing PEAR environment:
/usr/local/php7/lib/php/[PEAR] Archive_Tar
- installed: 1.4.7[PEAR] Console_Getopt
- installed: 1.4.2[PEAR] Structures_Graph
- installed: 1.1.1[PEAR] XML_Util
- installed: 1.4.3[PEAR] PEAR
- installed: 1.10.9Wrote PEAR system config file at: /usr/local/php7/etc/pear.conf
You may want to add: /usr/local/php7/lib/php to your php.ini include_path/usr/local/src/php-7.3.8/build/shtool install -c ext/phar/phar.phar /usr/local/php7/bin
ln -s -f phar.phar /usr/local/php7/bin/phar
Installing PDO headers: /usr/local/php7/include/php/ext/pdo/
4 添加PHP命令目录到环境变量 有点类似于类的自动加载,输入php 则会在环境变量里的目录查找是否有php这个执行文件,如果有就直接执行,达到php 替代 /usr/local/php7/bin/php 的简化作用
vim /etc/profile
//在文件末尾加入PATH=$PATH:/usr/local/php7/bin/export PATH
//保存并退出source /etc/profile
//立刻生效配置//测试php命令php -v
//显示以下为成功 这样PHP 7.3.8 (cli) (built: Aug 11 2019 18:55:14) ( NTS )Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.8, Copyright (c) 1998-2018 Zend Technologies
5.配置php-fpm
// 复制php.ini到编译配置参数指定的目录。
php.ini在解压的源码目录里
cp /usr/local/src/php-7.3.8/php.ini-production /usr/local/php7/php.ini
// 复制一份php-fpm的配置模版文件到同级目录 方便备份和修改
cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
// 复制一份php-fpm的扩展配置模板文件到同级目录
方便备份和修改
cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/
// 复制开启自起脚本到系统启动自动加载脚本目录。
fpm/init.d.php-fpm
在解压的源码目录里
cp /usr/local/src/php-7.3.8/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
// 使开机自起脚本可被任何权限角色执行chmod +x /etc/init.d/php-fpm
6.关于配置文件的一些说明 参考:https://www.cnblogs.com/xiaozong/p/5724984.html
php-fpm.conf是PHP-FPM特有的配置文件
php.ini是所有php模式中必须的配置文件
两者的区别是,php-fpm.conf是PHP-FPM进程管理器的配置文件,php.ini是PHP解析器的配置文件
有的PHP版本的配置文件路径中还有/fpm.d/www.conf配置文件
这是php-fpm.conf配置的文件的扩展文件,可以打开php-fpm.conf文件查看
; include=fpm.d/*.conf
我们可以使用php-fpm.conf配置慢日志
我们是可以开启慢日志功能的。
slowlog = /usr/local/var/log/php-fpm.log.slow
request_slowlog_timeout = 5s
> mkdir -p /usr/local/var/log/> touch /usr/local/var/log/php-fpm.log.slow> chmod -R 0777 /usr/local/var/log
不这样后面启动php-fpm会失败 因为安装php时编译参数指定了php-fpm使用www账户
当某个请求的时间超过了5秒,就会在慢日志中记录相应的记录,注意上面的时间5s,不能忽略了单位,相应的还有其他单位,m分,h时(当然,这这样做太扯淡了)
php-fpm慢日志会记录下进程号,脚本名称,具体哪个文件哪行代码的哪个函数执行时间过长:
[21-Nov-2016 10:30:38] [pool www] pid 11877
script_filename = /var/www/ceshi/c.php
[0xb70fb88c] sleep() /var/www/ceshi/c.php:2
通过日志,我们就可以知道第2行的sleep 函数有点问题,这样我们就能追踪问题了。
7.php.ini的绝对路径获取
php --ini
8.扩展安装检查
php -m