

##### 一: 下载安装编译工具

```bash
yum  -y groupinstall 'Development Tools'
```

##### 二:  安装依赖包

```bash
yum install -y libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses curl gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel gmp-devel expat-devel xmlrpc-c xmlrpc-c-devel libicu-devel libmcrypt-devel libmemcached-devel sqlite-devel oniguruma-devel
```

##### 三:  下载并解压php7.4

```bash
cd && wget  http://8.210.81.239/linux/php/php-7.4.0.tar.gz
tar -zxvf php-7.4.0.tar.gz
cd php-7.4.0

```

#####  : 编译安装（./configure --help 查看编译参数）  编译前，新增用户组，用户，用于编译使用

```
groupadd www
useradd -g www www
```

######  .一 :  开始编译（根据自己需要增减）

```bash
mkdir /opt/php

./configure --prefix=/opt/php --with-config-file-path=/etc --with-fpm-user=www --with-fpm-group=www --with-curl --with-freetype  --enable-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-mysqli --with-openssl  --with-pdo-mysql --with-pdo-sqlite --with-pear --with-jpeg  --with-xmlrpc --with-xsl --with-zlib --with-bz2 --with-mhash --enable-fpm --enable-bcmath --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem  --enable-sysvshm --enable-xml --with-zip --enable-fpm 

make && make install
```



```
好像有点问题执行不了
./configure \ 
--prefix=/opt/php \ 
--with-config-file-path=/etc \ 
--with-fpm-user=www \ 
--with-fpm-group=www \  
--with-curl \ 
--enable-gd \ 
--with-gettext \  
--with-iconv-dir \ 
--with-kerberos \ 
--with-libdir=lib64 \ 
--with-mysqli \ 
--with-openssl \ 
--with-pdo-mysql \ 
--with-pdo-sqlite \ 
--with-pear \ 
--with-jpeg \ 
--with-xmlrpc \ 
--with-xsl \ 
--with-zlib \ 
--with-bz2 \ 
--with-mhash \ 
--enable-fpm \ 
--enable-bcmath \ 
--enable-inline-optimization \ 
--enable-mbregex \ 
--enable-mbstring \ 
--enable-opcache \ 
--enable-pcntl \ 
--enable-shmop \ 
--enable-soap \ 
--enable-sockets \ 
--enable-sysvsem \ 
--enable-sysvshm \ 
--enable-xml \  
--with-zip \ 
--enable-fpm
```

###### 这里需要注意的是在php7.4 编译参数 --with-gd 要改成了 --enable-gd

当报错checking for libzip... configure: error: system libzip must be upgraded to version >= 0.11

```
#先删除旧版本
yum remove -y libzip

#下载编译安装
wget http://8.210.81.239/linux/php/libzip-1.2.0.tar.gz
tar -zxvf libzip-1.2.0.tar.gz
cd libzip-1.2.0
./configure
make && make install

```

error： Package requirements (sqlite3 > 3.7.4) were not met

```
yum install libsqlite3x-devel -y
```

error: Package requirements (oniguruma) were not met

```
yum install oniguruma-devel -y
```

 当yum install 提示 "没可用软件包"

```
yum install -y epel-release
```

off_t undefined 报错

```
configure: error: off_t undefined; check your library configuration
```

off_t 类型是在 头文件 unistd.h中定义的，
在32位系统 编程成 long int ，64位系统则编译成 long long int ，
在进行编译的时候 是默认查找64位的动态链接库，
但是默认情况下 centos 的动态链接库配置文件/etc/ld.so.conf里并没有加入搜索路径，
这个时候需要将 /usr/local/lib64 /usr/lib64 这些针对64位的库文件路径加进去。

```
#添加搜索路径到配置文件
echo '/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64'>>/etc/ld.so.conf

#然后 更新配置
ldconfig -v
```

/usr/local/include/zip.h:59:21: fatal error: zipconf.h: No such file or directory

```
cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h
```

编译没问题了，执行make && make install 安装完毕

##### 将php命令复制到/usr/bin

```
cp /opt/php/bin/php /usr/bin/
# 现在就可以直接使用php命令了, 方便
php -v

```

二选一

```
添加环境变量
vim /etc/profile
添加到最后
PATH=$PATH:/usr/local/php/bin
export PATH
更新环境变量
source /etc/profile
查看版本
php -v
```

##### 配置php-fpm

```
cp /root/php-7.4.0/php.ini-production /etc/php.ini
cp /opt/php/etc/php-fpm.conf.default /opt/php/etc/php-fpm.conf
cp /opt/php/etc/php-fpm.d/www.conf.default  /opt/php/etc/php-fpm.d/www.conf
cp /root/php-7.4.0/sapi/fpm/init.d.php-fpm  /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm

```

启动php-fpm

```
/etc/init.d/php-fpm start
或者
service php-fpm start
```

###### 查看安装的模块

```bash
/opt/php/bin/php -m
```

修改PHP时区

```
编辑php.ini文件, 找到;date.timezone, 修改为
vim /etc/php.ini
date.timezone = Asia/Shanghai
```



##### 修改php-fpm监听的端口号

如果需要修改`php-fpm`监听的端口号, 那么不能直接在`php-fpm.conf`中进行修改, 也没有地方可以改

而应该在`/opt/php/etc/php-fpm.d/` 下面的`*.conf`中进行修改, 仔细看`php-fpm.conf`文件

可以看到, 在最下面一行引入了`php-fpm.d`下面的所有的.conf文件

```bash
include=/opt/php/etc/php-fpm.d/*.conf
```

默认php已经带了一个`www.conf.default` 文件

将这个文件复制一份为`www.conf`

```bash
cp /opt/php/etc/php-fpm.d/www.conf.default  /opt/php/etc/php-fpm.d/www.conf
```

编辑`www.conf`, 找到`listen = 127.0.0.1:9000` 这一段, 修改对应的监听端口即可





##### 设置php-fpm为开机启动  

编辑`php-fpm.conf`文件, 将`pid`的注释打开

```bash
vim /opt/php/etc/php-fpm.conf 

pid = run/php-fpm.pid
```

编辑`/etc/rc.local`文件, 加入`php-fpm`的配置

```bash
/opt/php/sbin/php-fpm  >/tmp/php-fpm.log 2>&1
```











##### 参考文档:  

```
编译安装PHP7.4.7
参考文档:  https://www.xstnet.com/article-152.html    这个比较可靠
centos7 编译安装 php7.4
参考文档:  https://www.cnblogs.com/uvwill/p/14807686.html
解决CentOS 7编译php错误：No package 'sqlite3' found
参考文档:  https://www.4spaces.org/874.html   
CentOS 7编译安装PHP 7.4提示No package 'libzip' found或者(libzip >= 0.11)
参考文档: https://cloud.tencent.com/developer/article/1938150
```





