安装依赖

yum install gcc-c++ 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

在Ubuntu 18.04下, 需要额外补充的包有

sudo apt install libxml2-dev libcurl4 libcurl4-openssl-dev libjpeg-dev libgmp-dev libreadline-dev libxslt libxslt-dev libzip-dev

安装

开发环境(在Ubuntu下貌似无效)

    --enable-phpdbg\
--enable-dtrace\

生产环境:

    --disable-phpdbg\
--disable-dtrace\

执行configure

./configure \
--prefix=/opt/php/php7.2.10 \
--with-config-file-path=/opt/php/php7.2.10/etc \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-zlib-dir \
--with-freetype-dir \
--enable-mbstring \
--with-libxml-dir \
--enable-soap \
--enable-calendar \
--enable-pdo \
--with-curl \
--with-zlib \
--with-gd \
--with-pdo-sqlite \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysql-sock \
--enable-mysqlnd \
--disable-rpath \
--enable-inline-optimization \
--with-bz2 \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-mbregex \
--enable-exif \
--enable-bcmath \
--with-mhash \
--enable-zip \
--with-pcre-regex \
--with-jpeg-dir \
--with-png-dir \
--with-openssl \
--enable-ftp \
--with-kerberos \
--with-gettext \
--with-xmlrpc \
--with-xsl \
--enable-fpm \
--disable-debug \
--enable-shared \
--enable-fileinfo \
--enable-filter \
--with-sqlite3 \
--with-libzip \
--with-iconv \
--with-cdb \
--enable-dom \
--with-gmp \
--enable-json \
--enable-mysqlnd-compression-support \
--with-pear \
--enable-opcache \
--enable-wddx \
--with-libmbfl \
--with-onig \
--with-readline \
--enable-shmop \
--enable-simplexml \
--enable-xmlreader \
--enable-xmlwriter

遇到的问题的解决

1. 关于re2c和bison的warning, 通过安装解决

yum install re2c
yum install bison

2. 关于libzip的错误, 通过centos yum安装报版本太低, 需要编译安装

wget https://libzip.org/download/libzip-1.5.1.tar.gz
tar zxvf libzip-1.5..tar.gz
cd libzip-1.5.
more INSTALL.md
mkdir build
cd build/
cmake ..
make
make test
make install

3. 编译libzip时报centos7自带的cmake版本过低, 于是编译安装cmake

wget https://cmake.org/files/v3.12/cmake-3.12.2.tar.gz
tar zxvf cmake-3.12..tar.gz
cd cmake-3.12.
./bootstrap
gmake
gmake install
whereis cmake
cd /usr/bin/
ln -s /usr/local/bin/cmake cmake

4. 出现 configure: error: off_t undefined; check your library configuration 未定义的类型 off_t错误

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

5. 在Ubuntu18.04下编译php5.6.38时, configure参数都和上面一样, 遇到两个问题: easy.h should be in <curl-dir>/include/curl/ 和 configure: error: Unable to locate gmp.h 都是因为在 /usr/include下无法找到对应的头文件, 并且在configure参数中通过 --with-gmp=/usr/include/x86_64-linux-gnu 指定无效, 在/usr/include/ 下 ln -s 才能通过. 在make时, 遇到了 openssl.c:1904:15: error: dereferencing pointer to incomplete type ‘X509_EXTENSION  , openssl.c:3485:14: error: dereferencing pointer to incomplete type ‘EVP_PKEY 这样的问题, 原因是 PHP 5.6 is receiving only security fixes and OpenSSL 1.1 is not supported. Please use PHP 7.x if you want to use OpenSSL 1.1. 在openssl1.1下就不要再用php5.6了.

执行 make, make test, make install 完成剩下的安装

配置PHP

配置php

源码包里面有配置文件, 按刚才configure里面设置的路径, 复制到 /opt/php/php7.2.10/etc
php.ini-development     测试开发环境
php.ini-production         生产环境

配置php-fpm

# 复制一份新的php-fpm配置文件
cd /opt/php/php7.2.10/etc
cp php-fpm.conf.default php-fpm.conf
vi php-fpm.conf
# 配置错误日志:
error_log = /var/log/php-fpm.log
# 配置pid文件:
pid = /var/run/php-fpm.pid
# 保存退出 cd /opt/php/php7.2.10/etc/php-fpm.d
cp www.conf.default www.conf

添加php-fpm到系统服务

# 到源代码目录下将样例文件复制到系统服务目录下, 注意, 在Ubuntu18.04中, 这个目录是 /lib/systemd/system/
cp ./sapi/fpm/php-fpm.service /usr/lib/systemd/system/
# 配置开机启动php-fpm:
systemctl enable php-fpm
# 启动php-fpm (启动前先按下一步将用户和用户组创建好, 否则启动会失败)
systemctl start php-fpm
# 查看状态
systemctl status php-fpm

创建nginx用户

如果你在configure这一步指定的是其他的用户组和用户, 那么这里要把nginx替换掉

建立nginx 组
groupadd -r nginx
# -r 表示创建的是系统组
useradd -s /sbin/nologin -g nginx -r nginx
# -r 表示创建的是系统用户
id nginx

在Nginx中添加PHP支持

vi /opt/nginx/conf/nginx.conf

# 把前面的#注释符号去掉,把script改为$document_root最终如下:
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /$document_root$fastcgi_script_name;
include fastcgi_params;
}

安装Swoole扩展

通过pecl安装

sudo pecl install swoole
# 根据自己系统带了哪些模块选择, 我的系统里缺少http2和postgresql, 所以这两个没选
enable sockets supports? [no] : yes
enable openssl support? [no] : yes
enable http2 support? [no] :
enable mysqlnd support? [no] : yes
enable postgresql coroutine client support? [no] :

然后根据提示, 在php.ini里添加相应的扩展

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
...
;extension=pdo_sqlite
;extension=pgsql
;extension=shmop
extension=mongodb
extension=swoole

重启php-fpm后, 在phpinfo()里就能看到swoole的信息了.

Centos7.4和Ubuntu18.04安装PHP7.2的更多相关文章

  1. ubuntu18.04 安装 php7.2

    sudo apt-get install software-properties-common python-software-properties sudo add-apt-repository p ...

  2. Ubuntu18.04安装PHP7.3

    因为近期需要做毕业设计,需要用到Linux系统,在此分享一下在Linux-Ubuntu系统下安装PHP环境的一小点知识,如有偏差错误的,请各位学友多多指教哈! sudo apt-get install ...

  3. Ubuntu18.04安装Docker, centos7安装Docker

    Ubuntu18.04安装Docker 第一种方法从Ubuntu的仓库直接下载安装: 安装比较简单,这种安装的Docker不是最新版本,不过对于学习够用了,依次执行下面命令进行安装. $ sudo a ...

  4. Ubuntu18.04安装mysql5.7

    Ubuntu18.04安装mysql5.7 1.1安装 首先执行下面三条命令: # 安装mysql服务 sudo apt-get install mysql-server # 安装客户端 sudo a ...

  5. Ubuntu18.04安装RabbitMQ

    Ubuntu18.04安装RabbitMQ 2018年06月10日 19:32:38 dmfrm 阅读数:2492    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  6. ubuntu18.04 安装mysql不出现设置 root 帐户的密码问题(装)

    ubuntu18.04 安装mysql不出现设置 root 帐户的密码问题      https://blog.csdn.net/NeptuneClouds/article/details/80995 ...

  7. ubuntu18.04 安装hadoop 2.7.3+hive 2.3.4

    1. 安装hadoop 详细请参见本人的另外一片博文<Hadoop 2.7.3 分布式集群安装> 2. 下载hive 2.3.4 解压文件到/opt/software -bin.tar.g ...

  8. Ubuntu18.04安装Virtualenv虚拟环境

    在Ubuntu18.04安装Virtualenv虚拟环境 [实验环境]: 在这台电脑上已经安装了python3 [安装参考] 1.查看是否已安装virtualenv virtualenv --vers ...

  9. Ubuntu18.04安装thunderbird并设置中文

    Ubuntu18.04安装thunderbird并设置中文 安装thunderbird sudo apt-get install thunderbird 安装中文包 sudo apt-get inst ...

随机推荐

  1. 【转】你真的懂select Socket模型吗?

    转自:http://www.cppblog.com/xvsdf100/archive/2013/12/10/204689.html     只要接触过c/c++网路编程人都可能会知道select io ...

  2. DatabaseMirroring搭建

    1.    概述 数据库镜像维护一个数据库的两个副本,这两个副本必须驻留在不同的 SQL Server 数据库引擎 服务器实例上.通常,这些服务器实例驻留在不同位置的计算机上.启动数据库上的数据库镜像 ...

  3. java含有静态代码块新建的时候报错java.lang.ExceptionInInitializerError

    问题描述 最近在写一些单元测试用例,为了避免连接外界服务,所有选择mock了数据库Dao层,计划将数据库所需要的数据存在List中,在类加载的时候初始化List并且填充数据.代码如下: public ...

  4. pytorch之dataloader深入剖析

    PyTorch学习笔记(6)——DataLoader源代码剖析 - dataloader本质是一个可迭代对象,使用iter()访问,不能使用next()访问: - 使用iter(dataloader) ...

  5. 服务器主机上RAID Controller的Read Ahead Policy

    RAID控制器(卡)会根据Read Ahead Policy 来决定是否只读取应用程序所请求的一块数据, 还是从硬盘上读取整个stripe. 这个policy会对读的性能产生影响. No Read A ...

  6. gradlew 命令行 build 调试 构建错误 Manifest merger failed MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. TextureView SurfaceView 简介 案例

    简介 Android普通窗口的视图绘制机制是一层一层的,任何一个子元素或者是局部的刷新都会导致整个视图结构全部重绘一次,因此效率相对较低.视频或者opengl内容往往是显示在SurfaceView中的 ...

  8. 使用Vue.js实现列表选中效果

     实际项目中,我们会遇到很多类似的需求,一个列表,需要点击其中一条高亮显示.熟悉JQuery的同学说这个太简单了.可以给这个选中的element设置一个active的class.配合Css样式,让ac ...

  9. android 桌面小工具(Widget)开发教程

    刚学做了哥Widget,感觉不错哦,先来秀下效果(用朋友手机截的图) 这个Widget会每隔5秒钟自动切换内容和图片,图片最好使用小图,大图会导致你手机桌面(UI)线程卡顿 教程开始: 1.首先创建一 ...

  10. neo4j的配置文件(图文详解)

    不多说,直接上干货! 前期博客 Ubuntu16.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐) Ubuntu14.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐) ...