CentOS7 编译安装 php7

时间:2023-01-31 10:01:17

更新:2019-01-25

补充:CentOS 7.5 全新编译安装 PHP-7.3.1 ,补充内容接在原文之后

更新:2018-09-29

补充:新系统下编译安装PHP-7.2.5遇到的问题,补充内容接在原文之后

LNM都齐了,就差p了

先下载php源码包,最好是到官网 php.net,下载后备用。安装众多依赖

yum install 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

作者:An Sao
链接:https://www.zhihu.com/question/50615606/answer/145699091
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

CentOS7 编译安装 php7

别的还好,就是遇到了 libmcrypt 和 libmcrypt-devel 的问题。一通百度发现还挺麻烦,似乎是几个比较独立的组件,使用下载+手动安装的方式先解决掉它们。下载的 tar.gz 包解压缩到 Downloads 文件夹,依次执行以下命令

sudo ./configure
sudo make
sudo make install

安装后执行 whereis 查看一下装在了哪里

CentOS7 编译安装 php7

下载并安装 mhash,套路依旧是

sudo tar -zxv -f mhash-0.9.9.9.tar.gz
sudo ./configure
sudo make
sudo make install

安装 mcrypt,这次套路有了不同

sudo LD_LIBRARY_PATH=/usr/local/lib ./configure
sudo make
sudo make install

运行 ./configure 时就遇到了问题

CentOS7 编译安装 php7

看描述似乎是找不到它需要的 libmcrypt,百度一通找到一篇《Linux下解决php扩展模块mcrypt的问题》的博文,里边前辈已经描述比较详细,但到我这儿还是不成功依旧是该错误,头疼。。。但疼痛一会儿耐着性子研究一下提示,并查看了 libmcrypt-config 文件中的内容,发现一些蹊跷。首先根据前辈提示,指定路径很重要,目标放在路径还是写的不正确上,libmcrypt-config文件中显示的 prefix 是 /usr/local,而我之前通过 whereis 查看的都是 /usr/local/lib,大着胆子把命令修改成这样

sudo LD_LIBRARY_PATH=/usr/local:/usr/local/lib ./configure --witrypt-prefix=/usr/local

/usr/local 是告诉命令 libmcrypt 的路径,/usr/local/lib 是告诉命令 mhash 的路径,运行后居然过去了

CentOS7 编译安装 php7

先认为成功了吧,按照博文只是,下一步是生成 mcrypt.so 扩展包,需要进入 php 解压目录去操作。所以先完成 php 的安装再回来做它。用老套路安装 php

cd php-7.1.
sudo ./configure [options]
sudo make
sudo make install

php的编译和安装还是费一些时间的,信息量巨大此处省略截图,碰到了一些错误信息

CentOS7 编译安装 php7

看提示,似乎 build ok 但安装 error,检讨一下刚才不应该 sudo make && make install,拆成一个个执行。结果再次执行 sudo make 时就提示

CentOS7 编译安装 php7

那我就执行一下 make test 看看是什么 ...... 一堆似乎无穷的信息喷薄滚动而出,我后悔了,百度了一下,似乎是手贱了,php 的自动化测试,我运行的有点儿太早了。赶快 ctrl+c 运行最后的 sudo make install

CentOS7 编译安装 php7

安装还是很快的,php 基本安装结束!


2019-01-25 内容:

全新系统,尝试使用最基本的配置语句——“./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm”,执行正常。紧接着执行 make 和 make install 正常。执行 whereis php 结果为预设的 /usr/local/php 。尝试启动 /usr/local/php/sbin/php-fpm 失败,提示如下

CentOS7 编译安装 php7

一些经验:

  • 先安装 libmcrypt 和 mhash,两者之间没有依赖关系,但 mcrypt 依赖二者
  • 《搭建阿里云lnmp环境》一文内容比较可靠,以下总结PHP编译安装的总体步骤,已 PHP 7.2.5 为例
  • wget -v http://xxx.tar.gz 使用 wget 命令将安装源码包下载到本地,最好是先下来用 WinSCP 上传更快,在线从国外网站下很慢
  • 源码包保存到哪里不重要,习惯的话可以保存到 /home/php-source
  • 先解压缩源码包,解压缩到同一文件夹即可,用 tar -zxv -f fileName 命令
  • 解压完成,进入目录,一般是同名目录,如 cd php-7.2.5
  • 使用 ./configure 命令进行配置,可以不带任何参数,也可以从参考文章里复制那一长串的预处理参数,其中 --prefix 有些用处,似乎指定了安装路径,可以设定为自己习惯的路径,比如 /usr/local/php,这样后面就都会安装在此目录下了,好找。比较简单的配置是“./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm”
  • 使用 make 进行编译(如果运行 ./configure没错误的话),性能差些的编译需要较长时间,5-10min
  • 使用 make install 进行安装,安装很快,就是复制
  • 设置全局变量,将 /usr/local/php/bin 添加到全局 $PATH 中去
  • 从源码安装目录(/home/php-source)复制php.ini-development 或 php.ini-production到 /etc/php.ini 作为配置文件,linux 上与windows不同的是,只需将 cgi.fix_pathinfo 进行注释或修改为0即可,别的不用动。我修改了timezone = Asia/Shanghai 没有报错,但去掉了 extension = xxx 前面的 ; 反而会报错,不用设置即可。
  • 复制其它配置文件,如 www.conf 和 php-fpm.conf,参考文章里有
  • 复制 php-fpm 到某目录,参考文章里有。猜测,按原路径启动可能也能运行
  • 此时,已经可以启动 php-fpm,linux 下启动的是 php-fpm,这和windows有些区别(刚开始还一通寻找php运行程序呢)。当然,如果 web 服务器没有配置好,也是不可以的。
  • 此处有一个坑,/etc/init.d/php-fpm start 启动时提示 cannot get pid 'nginx',百度一下,是 www.conf 中 user 和 group 的配置,但配置中已经写了 user = nginx,group = nginx,依旧不行。其意思是 user 和 group 应该是系统内存在的用户或组,使用命令 useradd nginx 将 'nginx' 添加,再次运行启动即可。
  • 到此,从安装,到运行已经可以(前提是nginx处已经配置完成),关于 nginx 的配置在 nginx 相关文章处体现

一些链接:

  • 参考来自知乎的文章:https://www.zhihu.com/question/50615606/answer/145699091
  • 参考《搭建阿里云lnmp环境》:http://www.cnblogs.com/feng18/p/6491386.html
  • 参考《CentOS下php安装mcrypt扩展》:http://blog.csdn.net/zy112289/article/details/52840062
  • libmcrypt在:http://mcrypt.hellug.gr/lib/(版本老)
  • libmcrypt-2.5.8:http://vdisk.weibo.com/s/cWruOGX-d97N2
  • mhash:http://mhash.sourceforge.net/
  • 参考《Linux下解决php扩展模块mcrypt的问题》:http://blog.csdn.net/alexdream/article/details/7408577

CentOS7 编译安装 php7的更多相关文章

  1. Centos7 编译安装PHP7

    Centos7 编译安装PHP7 编译安装的方式可以让组件等设置更加合理,但需要你对PHP的代码及各种配置非常的熟悉,以下为大致的安装流程,大家可以参考 1.下载编译工具 yum groupinsta ...

  2. CentOS7编译安装php7.1配置教程详解

    这篇文章主要介绍CentOS7编译安装php7.1的过程和配置详解,亲测 ,需要的朋友可以参考. 1.首先安装依赖包: yum install libxml2 libxml2-devel openss ...

  3. CentOS7编译安装php7.1

    1.首先安装依赖包: yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl ...

  4. centos7 编译安装 php7.3.11

    1.安装依赖 yum install -y libxml2 *openssl* libcurl* libjpeg* libpng* freetype* libmcrypt* gcc gcc-c++ 2 ...

  5. centos7 编译安装 php7.4

    1. 下载安装编译工具 yum groupinstall 'Development Tools' 2.安装依赖包 yum install libxml2 libxml2-devel openssl o ...

  6. centos7编译安装PHP7已经把你逼到去安定医院看门诊的地步?请看此文

    本文援引自https://www.cnblogs.com/lamp01/p/10101659.html,亲测可行,特此鸣谢 地球上总有一群人是如此深爱PHP,但无奈的是编译安装的过程化特性,导致各种b ...

  7. centos7编译安装php7.2

    去官网下载php7.2安装包,选择一个结点下载:http://php.net/downloads.php 下载:wget -ivh http://cn.php.net/distributions/ph ...

  8. CentOs7 编译安装PHP7.1.5

    1 创建php用户和用户组,并在github下载php7源码 #######新建php用户和php组 [root@typecodes ~]# groupadd -r www && us ...

  9. Centos7 编译安装PHP7.2

    yum install wget 在 /usr/local/src 目录下载php源码包 wget http://cn2.php.net/distributions/php-7.2.4.tar.gz ...

随机推荐

  1. [Data Structure] LCSs——最长公共子序列和最长公共子串

    1. 什么是 LCSs? 什么是 LCSs? 好多博友看到这几个字母可能比较困惑,因为这是我自己对两个常见问题的统称,它们分别为最长公共子序列问题(Longest-Common-Subsequence ...

  2. LaTex随笔

    最近简单接触了LaTex排版,留下一些笔记供日后参考. 1.基本格式 \documentclass{article}\title{……}\begin{document}\maketitle\secti ...

  3. selenium如何随机选取省份和城市的下拉框的值

    1.原始需求,选择省份后,相应的城市会自动加载 2.思路 a.获取下拉框的所有元素个数 b.随机点击0-元素个数之间的某个值 3.代码实现 Random random = new Random(); ...

  4. 比较了一下基于PhoneGAP/JQ Mobile 等基于HTML5的Phone 开发框架

    比较了一下基于PhoneGAP/JQ Mobile 等基于HTML5的Phone 开发框架,如果做APP客户端的化,想达到Native UI的效果,都是胡扯的,根本不可能. PhoneGAP 如果想达 ...

  5. webpack之基础学习

    webpack工作原理: 通过一个入口文件,main.js开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包为一个浏览器可识别的JavaScript文件. Webpack的核心原理 ...

  6. Python heapq 模块的实现 - A Geek's Page

    Python heapq 模块的实现 - A Geek's Page Python heapq 模块的实现

  7. java 5并发中的阻塞队列ArrayBlockingQueue的使用以及案例实现

    演示一个阻塞队列的使用 public class BlockingQueueTest { public static void main(String[] args) { //创建一个包含三个元素的阻 ...

  8. 函数wait和waitpid

    函数wait 一个进程在终止时会关闭所有文件描述符,释放在用户空间释放的内存,但它的PCB还保留着,内核在其中保存一些信息:如果是正常终止时则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号 ...

  9. NEU710(wanghang走迷宫)

    题目链接:传送门 题目大意:给你一个图,要从起点走到终点并且要吃够足够的金币才能出去,图上有金币(只能吃一次), 有传送门(用一次消耗1金币,必须有金币才能使用),问最少需要多少步才能出去.不能出去输 ...

  10. HTTP——代理协议 HTTP/1.1的CONNECT方法

    我们平时使用HTTP协议无非就是GET.POST这些方法,但是HTTP的内容远不止那些.今天就来说说HTTP代理使用的CONNECT.这个不是在网页开发上用的,如果没兴趣就跳过吧. APACHE只是作 ...