本篇介绍源码安装 PHP7, 并搭配 Nginx 使用

安装 Nginx

参考 Nginx 安装教程、系统服务脚本说明

安装 PHP7

下载 PHP7

1
wget https://www.php.net/distributions/php-7.3.5.tar.gz

解压

1
2
tar -zxvf php-7.3.5.tar.gz
cd php-7.3.5

创建PHP用户

1
2
groupadd -r php-fpm
useradd -s /sbin/nologin -g php-fpm -M php-fpm

构建PHP

运行 ./configure --help 命令来获得完整的可用选项清单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
./configure \
--prefix=/usr/local/php \ [php安装的根目录]
--exec-prefix=/usr/local/php \ [php执行文件所在目录]
--bindir=/usr/local/php/bin \ [php/bin目录]
--sbindir=/usr/local/php/sbin \ [php/sbin目录]
--includedir=/usr/local/php/include \ [php包含文件所在目录]
--libdir=/usr/local/php/lib/php \ [php/lib目录]
--mandir=/usr/local/php/php/man \ [php/man目录]
--with-config-file-path=/usr/local/php/etc \ [php的配置目录]
--with-mysql-sock=/tmp/mysql.sock \ [php的Unix socket通信文件]
--with-mhash \ [Mhash是基于离散数学原理的不可逆向的php加密方式扩展库,其在默认情况下不开启]
--with-openssl \ [OpenSSL 是一个安全套接字层密码库]
--with-mysqli=shared,mysqlnd \ [php依赖mysql库]
--with-pdo-mysql=shared,mysqlnd \ [php依赖mysql库]
--with-gd \ [gd库]
--with-iconv \ [关闭iconv函数,种字符集间的转换]
--with-zlib \ [zlib是提供数据压缩用的函式库]
--enable-zip \ [打开对zip的支持]
--enable-inline-optimization \ [优化线程]
--disable-debug \ [关闭调试模式]
--disable-rpath \ [关闭额外的运行库文件]
--enable-shared \ [启用动态库]
--enable-xml \ [开启xml扩展]
--enable-bcmath \ [打开图片大小调整,用到zabbix监控的时候用到了这个模块]
--enable-shmop \ [共享内存]
--enable-sysvsem \ [内存共享方案]
--enable-mbregex \ [开启多字节正则表达式的字符编码。]
--enable-mbstring \ [开启多字节字符串函数]
--enable-ftp \ [开启ftp]
--enable-pcntl \ [PHP的进程控制支持实现了Unix方式的多进程创建]
--enable-sockets \ [开启套节字]
--with-xmlrpc \ [打开xml-rpc的c语言]
--enable-soap \ [开启简单对象访问协议简单对象访问协议]
--without-pear \ [开启php扩展与应用库]
--with-gettext \ [开户php在当前域中查找消息]
--enable-session \ [允许php会话session]
--with-curl \ [允许curl扩展]
--with-jpeg-dir \ [指定jpeg安装目录yum安装过后不用再次指定会自动找到]
--with-freetype-dir \ [指定freetype安装目录yum安装过后不用再次指定会自动找到]
--enable-opcache \ [开启使用opcache缓存]
--enable-fpm \ [开启fpm]
--with-fpm-user=php-fpm \ [php-fpm的用户]
--with-fpm-group=php-fpm \ [php-fpm的用户组]
--without-gdbm \ [数据库函数使用可扩展散列和类似于标准UNIX dbm的工作]
--enable-fast-install \ [为快速安装优化]
--with-gd \ [验证码、缩略图]

安装

1
make && make install

创建配置文件,并将其复制到正确的位置。

1
2
3
4
cp php.ini-production /usr/local/php/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp sapi/fpm/php-fpm /usr/local/php/bin
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

确保 www.confuser=php-fpm, group=php-fpm
确保 php 目录是属于用户 php-fpm ; chown -R php-fpm:php-fpm /usr/local/php

配置 Nginx 使其支持 PHP 应用

修改默认的 location 块,使其支持 .php 文件

1
2
3
4
location / {
root html;
index index.php index.html index.htm;
}

配置来保证对于 .php 文件的请求将被传送到后端的 PHP-FPM 模块, 取消默认的 PHP 配置块的注释,并修改为下面的内容

1
2
3
4
5
6
7
location ~* \.php$ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}

重启服务

1
2
/usr/local/php/bin/php-fpm
systemctl reload nginx

将PHP设置成系统服务,并自启动

创建脚本 php.service

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=php-fpm
After=network.target
[Service]
Type=forking
User=root
Group=root
ExecStart=/usr/local/php/bin/php-fpm
ExecReload=/usr/bin/kill -USR2 $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
# PrivateTmp=true
[Install]
WantedBy=multi-user.target

将脚本移动到 /usr/lib/systemd/system/ 目录

1
cp php.service /usr/lib/systemd/system/

启动

1
systemctl start php

错误备注:

一、 CURL 扩展错误

  • curl版本错误信息如下
    1
    checking for cURL 7.15.5 or greater... configure: error: cURL version 7.15.5 or later is required to compile php with cURL support

curl 版本必须高于 7.15.5

检查版本

1
curl -V

查找 curl 路径

1
which curl

添加 curl 路径参数

1
--with-curl=/usr/bin/curl # 查找出来的路径

  • 缺少 curl-devel 依赖包
    1
    2
    configure: error: Please reinstall the libcurl distribution -
    easy.h should be in <curl-dir>/include/curl/

安装 crul-devel

1
yum install curl-devel -y

二、 缺少 libjpeg-devel 依赖包

1
configure: error: jpeglib.h not found.

安装 libjpeg-devel

1
yum install -y libjpeg-devel

三、缺少 libzip 依赖

1
configure: error: Please reinstall the libzip distribution

安装 libzip

1
yum install -y libzip

出现如下错误需要源码编译安装 libzip

yum 安装版本是 0.10

1
2
# 或 configure: error: system libzip must be upgraded to version >= 0.11
configure: error: Please reinstall the libzip distribution

卸载 libzip

1
yum remove libzip -y

下载 libzip

1
wget https://libzip.org/download/libzip-1.5.2.tar.gz

解压

1
tar -zxvf libzip-1.5.2.tar.gz

安装

1
2
cd libzip-1.5.2
mkdir build && cd build && cmake .. && make && make install

缺少 cmake 命令, 需要安装 yum install cmake -y

CMake 安装

若出现错误

1
CMake 3.0.2 or higher is required.  You are running version 2.8.12.2

采用源码安装 cmake
下载最新版

1
wget https://github.com/Kitware/CMake/releases/download/v3.14.3/cmake-3.14.3.tar.gz

安装

1
2
tar -zxvf cmake-3.14.3.tar.gz
cd cmake-3.14.3 && ./bootstrap && make && make install

若提示 -bash: /usr/bin/cmake: 没有那个文件或目录

查找 cmake 路径

1
which cmake

添加软连接

1
ln -s /usr/local/bin/cmake /usr/bin/cmake

提示如下错误 安装 yum install -y gcc gcc-c++ 即可

1
2
3
4
5
6
Error when bootstrapping CMake:
Cannot find a C++ compiler that supports both C++11 and the specified C++ flags.
Please specify one using environment variable CXX.
The C++ flags are "".
They can be changed using the environment variable CXXFLAGS.
See cmake_bootstrap.log for compilers attempted

四、off_t undefined; check your library configuration

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

解决方案

1
2
3
4
echo '/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64'>>/etc/ld.so.conf&&ldconfig -v

参考 off_t undefined; check your library configuration