今天重新实践了下 CentOS 7.6 下安装 PHP7 并完成配置,总结了一条可以照其实现的套路。

安装 PHP 所需扩展

# 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

获取 PHP 源码包

采用源码编译的方式安装 PHP,好处是可以获取最新版本,也能提供一定的配置灵活性,适合有经验的。获取方式可以在 Centos 中运行 Wget ,也可以在其他环境下下载 tar 包然后上传到服务器上。推荐后者,速度更快,此处假设已经获取到了 php-7.4.0.tar.gz,并存放到了 /home/downloads

# cd /home/downloads
# wget https://www.php.net/distributions/php-7.4.0.tar.gz

解压

因与安装实际目录无关,解压到当前目录即可,解压后接入目录等待执行下面操作

# tar -xvf php-7.4.0.tar.gz
# cd php-7.4.0

进行配置

对安装进行预配置,设置一些编译参数。最简单的配置是不带任何参数

# ./configure

但通常因为可能要自定义 PHP 安装目录、配置文件目录等,可以使用个人习惯的基础配置语句:设定PHP安装目录为 /usr/local/php,配置文件目录为 /usr/local/php/etc,并允许使用 php-fpm 管理 PHP 请求

# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm

检查输入无误后即可运行,通常很快完成

Make

使用 Make 命令进行编译,时间约 5-10min,可能遇到坑。比如在华为 Centos 7.6 上安装时就遇到了 sqlite3 缺失无法完成的错误提示,百度一下,将 sqlite3 安装上再重新运行 Make 命令

# make

make install

如 make 无误,make install 很快。

# make install

Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/
Installing PHP CLI binary: /usr/local/php/bin/
Installing PHP CLI man page: /usr/local/php/php/man/man1/
Installing PHP FPM binary: /usr/local/php/sbin/
Installing PHP FPM defconfig: /usr/local/php/etc/
Installing PHP FPM man page: /usr/local/php/php/man/man8/
Installing PHP FPM status page: /usr/local/php/php/php/fpm/
Installing phpdbg binary: /usr/local/php/bin/
Installing phpdbg man page: /usr/local/php/php/man/man1/
Installing PHP CGI binary: /usr/local/php/bin/
Installing PHP CGI man page: /usr/local/php/php/man/man1/
Installing build environment: /usr/local/php/lib/php/build/
Installing header files: /usr/local/php/include/php/
Installing helper programs: /usr/local/php/bin/
Installing man pages: /usr/local/php/php/man/man1/

此时 PHP 安装完毕,接下来就要进行相关配置

设置全局变量

刚才在 配置 一节中,设置 PHP 目录在 /usr/local/php,因此该目录下就有了 bin 目录,将 /usr/local/php/bin 添加到全局变量 $PATH 中

编辑文件
# vi /etc/profile 将下面两句添加到文件尾并保存
PATH=$PATH:/usr/local/php/bin
export PATH 刷新生效
# source /etc/profile 查看是否生效
# php -v 参考显示结果
# PHP 7.4.0 (cli) (built: Dec 17 2019 14:44:39) ( NTS )
# Copyright (c) The PHP Group
# Zend Engine v3.4.0, Copyright (c) Zend Technologies

配置 PHP 环境

根据配置时自定义的路径,将有关 PHP 运行的配置文件、启动方式等进行设置,逐一运行下列命令

进入PHP源码解压缩目录
# cd /home/downloads/php-7.4.0 将源码中准备好的配置文件复制到指定目录并改名作为 php 运行时的配置文件,在 ./configure 时指定了配置文件目录是 --with-config-file-path=/usr/local/php/etc
# cp php.ini-production /usr/local/php/etc/php.ini php-fpm.conf 是 php-fpm 运行时配置文件,里边记录了 include 路径,可以将多个配置文件放到 include 路径下
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf www.conf 是默认的有关 www 应用的配置
# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf 复制 php-fpm 程序到 /etc/init.d,启动、重启或停止 /etc/init.d/php-fpm 即可实现对 PHP 的控制
# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm 赋予 /etc/init.d/php-fpm 执行权限
# chmod +x /etc/init.d/php-fpm

上述命令完成后,在不考虑与 Nginx 的配合情况下,PHP 实际已经可以独立工作了,可以启动 php-fpm 并查看相关信息

# /etc/init.d/php-fpm start[/restart/stop]

输出
# Starting php-fpm done

查看 php-fpm 运行情况

# ps -ef|grep php

输出
# root 24080 1 0 09:49 ? 00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
# nobody 24081 24080 0 09:49 ? 00:00:00 php-fpm: pool www
# nobody 24082 24080 0 09:49 ? 00:00:00 php-fpm: pool www
# root 24096 23960 0 09:52 pts/0 00:00:00 grep --color=auto php 查看 PHP 配置相关
# php -i |grep Config 输出
# Configure Command => './configure' '--prefix=/usr/local/php' '--with-config-file-path=/usr/local/php/etc' '--enable-fpm'
# Configuration File (php.ini) Path => /usr/local/php/etc
# Loaded Configuration File => /usr/local/php/etc/php.ini
# Configuration

上例中 master process 因为是使用 root 账户启动并运行 php-fpm ,因此显示 root 账户,nobody 是因为默认 www.conf 配置文件中 user 和 group 默认值就是 nobody 用户

与 Nginx 的配合

假设现在有站点 a.com,路径是 /home/wwwroot/a.com,为方便区别管理,在 /usr/local/php/etc/php-fpm.d 下新增关于 a.com 的配置文件 a.com.conf并假设该文件已创建完毕

通过复制 www.conf 创建 a.com.conf
# cp www.conf a.com.conf 编辑目标文件
# vi a.com.conf 修改 user 和 group 的账号,修改为与 nginx 一致
user = nginx
group = nginx 修改监听端口号,即监听 9001 端口,Nginx要将a.com 的请求发到这个端口来(Nginx中设置)
listen = 127.0.0.1:9001

修改 Nginx 配置文件,新增 server 站点,并在 location 中处理 a.com 的 php 转发

server {
listen 80;
server_name a.com; location ~* \.php$ {
root /home/wwwroot/a.com/;
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

注意上面 server 节中,有关 .php 的请求被转发去了 127.0.0.1:9001,即 a.com.conf 的设定中,这样两边就配合起来了。以此为例,增加新站点 b.com 时,可以再新建 b.com.conf,并设定 php 监听端口号是 9002,Nginx 配置中新增 server 转发到 127.0.0.1:9002,实现同一主机上多个站点的管理。

  • 有关用户名和组:yum 安装 Nginx 后,系统内增加了 nginx 用户和组,因此 Nginx 使用该用户名和组运行没有问题,在 PHP 的 www.conf 配置中,默认用户名和组是 nobody,权限较少,可以修改与 Nginx 一致,即都改成 nginx。
  • 有关系统目录权限:注意网站数据所存放的根目录和父目录的访问权限,本次就遇到了将 wwwroot 根目录放到 /root 下并不合适,可以放到 /home 下。
  • nginx.conf 配置中有关 PHP 的location内,要设置 root 或其它指定目录的方式,本次就遇到了忘记设置 root,结果同一目录下 html 均能访问,.php 文件始终返回"File Not Found"的问题

参考资料

Centos 下安装 PHP (新)的更多相关文章

  1. CentOS下安装hadoop

    CentOS下安装hadoop 用户配置 添加用户 adduser hadoop passwd hadoop 权限配置 chmod u+w /etc/sudoers vi /etc/sudoers 在 ...

  2. Centos下安装mysql 总结

    一.MySQL安装 Centos下安装mysql 请点开:http://www.centoscn.com/CentosServer/sql/2013/0817/1285.html 二.MySQL的几个 ...

  3. 在Centos下安装matlab

    首先科普一下什么事matlab MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发.数据可视化.数据分析以及数值计算的高级技术计算语言和交互式环境,主要包含MATLAB和Simu ...

  4. centos下安装最新版本git(通过master分支下载最新版)

    centos6.7下安装最新版本git 本文参考:http://www.01happy.com/centos-install-latest-git/ 按照原博主所提供的思路安装可能会出现下列问题 解决 ...

  5. Centos下安装mysql 和挂载硬盘

    一,CentOS下安装Mysql 6.5 1.检测系统是否自带安装mysql # yum list installed | grep mysql 2.删除已经安装的Mysql # yum -y rem ...

  6. centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named '_ctypes'

    centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named '_ctypes'的解决办法 3.7版本需要一个新的包libffi-de ...

  7. centos下安装wireshark 抓包

    centos下安装wireshark相当简单.两条命令就够了.这里.主要是记录写使用方面的东西 安装:1.yum install wireshark.注意这样并无法使用wireshark命令和图形界面 ...

  8. CentOS下安装高版本GCC

    CentOS下安装高版本GCC 微信分享:   有时编译需要用到4.8以上版本的GCC,由于CentOS源没有提供高版本的GCC安装包,这时就不能通过安装包安装.通常的解决方案就是通过编译安装高版本的 ...

  9. CentOS下安装w3m,及w3m的使用

    centos下安装软件的命令不是apt-get,而是yum,如果安装w3m,利用sudo yum install w3m w3m-img -y即可 △△△△△△△△如果你用的是centos或readh ...

  10. Centos下安装X Window+GNOME Desktop+FreeNX

    FreeNX是近年来继VNC之后新出现的远程控制解决方案,基本原理是将XWindows的信号压缩后传输到远程客户端显示,而VNC是直接截取 屏幕图像处理传输.这样,在同样的传输信道条件下,FreeNX ...

随机推荐

  1. fsockopen用feof读取http响应内容的一些问题

    在前面三个例子中,都有这么一段代码: while (!feof($fp)) { // 读取文件/数据 //$content .= fgets($fp, 128); //$line = fread($f ...

  2. linux进程间通信之共享内存学习记录

    进程 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed). 广义定义:进程是一个具有一定独立功能的 ...

  3. 充满含金量的一场云原生Meetup,入场券免费发送中……

    在武汉,你离这场云原生盛会,只有一步之遥 华为云.百度.斗鱼.海云基因,五位重量级专家 K8s调度.深度学习平台.斗鱼实战.基因大数据-五个干货议题 日,与您相约Cloud Native Days C ...

  4. 转:关于java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication的解决

    在这个控制板中,出现了这个问题 java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication 虽然明显知道是 ...

  5. Java学习笔记(面向对象下)

    面向对象(下) 类的继承 类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类称为子类,现有类称为父类,子类会自动拥有父类所有可继承的属性和方法.(用extends关键字)   //定义A ...

  6. [TimLinux] JavaScript AJAX接收到的数据转换为JSON格式

    1. 接收数据 AJAX接收数据是通过xhr.responseText属性,这是一个属性不是一个方法,这个属性得到的数据为字符串. 2. 字符串内容 当服务器发送的是一个JsonResponse({' ...

  7. CoderForces999D-Equalize the Remainders

    D. Equalize the Remainders time limit per test 3 seconds memory limit per test 256 megabytes input s ...

  8. HtmlAgilityPack 获取节点的子节点

    这个问题真的是好无语 var table = doc.DocumentNode.SelectSingleNode("//table[@class='ddd']"); var a = ...

  9. 踩坑了!使用 @Autowired 注入成功,GetBean 方法却获取不到?!

    本文首发于个人微信公众号:Coder小黑 踩坑了?! 之前推文已经讲过 当@Transactional遇到@CacheEvict,你的代码是不是有bug! 现在要在事务提交之后清除缓存.在Spring ...

  10. JS系列:js节点

    节点(node) 在html文档中出现的所有东西都是节点 元素节点(HTML标签) 文本节点(文字内容) 注释节点(注释内容) 文档节点(document) … 每一种类型的节点都会有一些属性区分自己 ...