Linux 编译安装 PHP 7

作者: BroQiang

发布于 2017-04-18 | 最后更新 2017-04-18


开始之前

此文档支持下面版本(经过测试)

  • Ubuntu 16.10 / Ubuntu 17.10
  • CentOS 7
  • Fedora 26 / Fedora 27, 除了依赖关系,其他步骤相同即可

编译的时候编译了 Mysql 支持,安装前要保证 Mysql 安装正确, 可以参考此博客中的 Mysql 安装

原本已经更新到了 7.2 ,在使用过程中发现变化有些多,并且和绝大多数应用兼容还有问题,所以又将文档降回到 7.1 。

准备安装包

# 下载安装包
wget https://cn2.php.net/distributions/php-7.1.15.tar.gz

# 解压到src目录
sudo tar xzvf php-7.1.15.tar.gz -C /usr/local/src/

解决依赖关系


# Ubuntu 16.10 执行下面命令
sudo apt install -y libxml2-dev libssl-dev libcurl4-gnutls-dev libjpeg-dev libpng-dev \
    libfreetype6-dev libmcrypt-dev libreadline-dev re2c libbz2-dev



# CentOS 7 执行下面 命令
sudo yum -y install libxml2 libxml2-devel libcurl libcurl-devel libwebp bzip2-devel \
        libwebp-devel openssl-devel libjpeg* libpng libpng-devel readline-devel \
        openldap-devel openldap libmcrypt libmcrypt-devel freetype-devel re2c

# Fedora 26
sudo dnf -y install libxml2 libxml2-devel libcurl libcurl-devel libwebp bzip2-devel \
        libwebp-devel openssl-devel libjpeg* libpng libpng-devel readline-devel \
        openldap-devel openldap libmcrypt libmcrypt-devel freetype-devel re2c

创建守护进程用户

sudo useradd -M -r -s /sbin/nologin www

编译安装

此处只是常用的扩展, 如果需要什么扩展后期再安装也可以

# 进入到源码存放目录
cd /usr/local/src/php-7.1.15/

# 配置 makefile
# 需要注意,此处将 mysql 编译进来了,需要保证 Mysql 已经安装配置好

sudo ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc \
--with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql \
--with-mysql-sock=/tmp/mysql.sock --enable-sockets --enable-zip --enable-fpm \
--with-fpm-user=www --with-fpm-group=www  --with-zlib --enable-pcntl --with-bz2 \
--with-jpeg-dir --with-freetype-dir --with-gd --with-curl --with-openssl --with-mhash \
--with-xmlrpc --enable-ftp --enable-bcmath --enable-shmop --enable-sysvsem --enable-soap \
--enable-inline-optimization --enable-mbregex --enable-mbstring --with-readline

sudo make
sudo make install

初始化配置

详细参数配置参考

# 复制默认配置文件
sudo cp php.ini-production /usr/local/php/etc/php.ini
sudo cp sapi/fpm/php-fpm.service /lib/systemd/system
sudo cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
sudo cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

# 配置开机自动启动
sudo systemctl enable php-fpm

php.ini 配置

时区配置

这个还是很有必要的,如果 php.ini 中没有配置, 程序也没有初始化, 就会出现莫名其妙的问题了,养成习惯,安装完了就给他配置上即可。

根据项目实际去配置, 一般都是中国时区 Asia/Shanghai, 可以配置的时区

sudo vim /usr/local/php/etc/php.ini

# 将下面的
;date.timezone =
# 改成
date.timezone = Asia/Shanghai

# 或者 两种配置选其中一种方式即可
date.timezone = PRC

配置默认的上传数据大小

这个参数是可选的,非必须,根据实际情况去配置

# 修改默认上传文件的大小,这个默认是2M,可以根据实际的项目需求去设置
upload_max_filesize = 2M

# 允许的最大的 post 数据,默认是 8M,一般都够了,如果不够的话根据实际情况去调整
post_max_size = 8M

配置环境变量

sudo vim /etc/profile.d/php.sh

# 写入下面内容
export PHP_PATH=/usr/local/php
export PATH=$PATH:$PHP_PATH/bin

# 生效, 桌面环境最好注销再登录
source /etc/profile.d/php.sh

# 测试, 输入下面内容,显示版本信息
php --version

测试 phpinfo

创建 test 目录

mkdir ~/test

在目录下创建 index.php 文件,写入下面内容

<?php

    phpinfo();

test 目录中执行下面命令

因为此时还没有配置 web 服务, 可以用php 内置的先测试一下


# -S 参数就是运行内置的web服务, 后面跟的是 地址:端口号
# 如果想用80端口就要加上sudo,用root权限执行
php -S localhost:8888

此时可以在浏览器地址栏输入 https://localhost:8888/ , 查看结果

看一下常用的PHP扩展是否安装成功, 比如 pdo_mysql,mysqli,gd(同时要看里面包含的图片格式),libxml,mbstring,curl,openssl等

太多了,直接去看phpinfo输出结果查看

额外的配置

readline 扩展

--with-readline 可以在终端使用 -a(–interactive) 模式,一般只有开发的时候才用得到。

如果使用此扩展,要先安装依赖

# Ubuntu
sudo apt install libreadline-dev

# Fedora
sudo dnf install readline-devel

# CentOS
sudo yum install readline-devel

编译PHP的 configure 阶段加上 –with-readline 参数