您的当前位置:首页>全部文章>文章详情

【PHP】步骤详解Centos中编译安装php8与配置方法

CrazyPanda发表于:2024-01-06 22:33:38浏览:338次TAG:

本篇文章给大家带来了关于php的相关知识,其中主要介绍了在Centos系统中是如何编译安装php,以及如何正确配置的,步骤很详细!感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

PHP(全称:PHP:Hypertext Preprocessor,即“PHP:超文本预处理器”)是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用。PHP的语法借鉴吸收C语言、Java和Perl等流行计算机语言的特点,易于一般程序员学习。PHP的主要目标是允许网络开发人员快速编写动态页面。

准备工作

下载安装文件

保险起见使用 php 官网下载:https://www.php.net/downloads
使用官网下载速度较慢,但是安全性有保障,如对安全性没有要求也可百度搜索相关镜像,本文选择最新稳定版本 PHP 8.1.6

wget https://www.php.net/distributions/php-8.1.6.tar.gz
tar -zxvf php-8.1.6.tar.gz
cd php-8.1.6

安装依赖

yum install libxml2 libxml2-devel libsqlite3x-devel openssl bzip2 libcurl-devel libcurl libjpeg libpng freetype gmp libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel zlib zlib-devel glibc glib2 ncurses curl gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel gmp-devel expat-devel xmlrpc-c xmlrpc-c-devel libicu-devel libmcrypt-devel libmemcached-devel -y

注意:当前 Centos 官方镜像已停止服务,yum install 安装 devel 软件时,如报错无法安装可尝试将 /etc/yum.repos.d/ 目录下的 CentOS-Base.repo.rpmsave 中的文件内容覆盖至 CentOS-Linux-BaseOS.repoCentOS-AppStream.repo.rpmsave 覆盖至 CentOS-Linux-AppStream.repo,操作前请注意备份

因 yum 源中没有 oniguruma 包,这里使用 github 源码编译安装,项目地址:https://github.com/kkos/oniguruma

wget https://github.com/kkos/oniguruma/releases/download/v6.9.8/onig-6.9.8.tar.gz
tar -zxvf onig-6.9.8.tar.gz
cd onig-6.9.8
./configure --prefix=/usr
make && make install

创建用户

安全起见,我们需要创建一个用户用于运行 php,一般这个用户是禁止登陆的,本文创建用户名与用户组均为 www,这个名称可以自定义

# 创建用户组
groupadd www
# 创建用户
useradd -g www www -M -s /sbin/nologin
  • -g www 指定用户组

  • -M 不创建家目录(程序运行不需要家目录)

  • -s /sbin/nologin 不允许登录,更加安全

编译并安装

# 生成编译文件
./configure --prefix=/www/server/php81 --with-config-file-path=/www/server/php81/etc --enable-fpm --with-fpm-group=www --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype --with-mcrypt --with-jpeg --with-png -with-zlib --with-libxml-dir --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl -enable-mbstring --enable-gd --with-openssl --with-mhash --enable-pcntl --with-xmlrpc --enable-zip --enable-soap --with-gettext --enable-opcache --with-xsl --enable-sockets --enable-mbregex --enable-ftp --with-webp
# 编译并安装
make && make install
# 复制配置文件
cp php.ini-production /www/server/php81/etc/php.ini
# 或者使用 development
cp php.ini-development /www/server/php81/etc/php.ini

如果使用 apache 的话,需要在编译参数中新增 --with-apxs2=/www/server/apache/bin/apxs,同时 --enable-fpm 参数可去除,其中 /www/server/apacheapache 安装目录,编译完成后在 apache 的配置文件中解注释对 php_module 的注释即可,本文不细讲 apache 配置。

配置

配置环境变量

/etc/profile 下新增 PATH=$PATH:/www/server/php81/bin && export PATH,使用 source /etc/profile 使配置立即生效。

创建 php-fpm 软链接:

ln -s /www/server/php81/sbin/php-fpm /www/server/php81/bin/php-fpm

nginx 配置 php

复制配置文件,如果之前已经复制过请跳过此步骤:

cp /www/server/php81/etc/php-fpm.conf.default /www/server/php81/etc/php-fpm.conf
cp /www/server/php81/etc/php-fpm.d/www.conf.default /www/server/php81/etc/php-fpm.d/www.conf

启动 php-fpm:

/www/server/php81/sbin/php-fpm

修改 nginx 配置文件

编辑 nginx.conf 文件,在对应的 server 下新增如下内容:

location ~ [^/]\.php(/|$) {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    include        fastcgi.conf;
}

重启 nginx ,nginx -s reload,在网站根目录新建 phpinfo.php 文件:


<?php
 
phpinfo();

1.jpg

nginx php 多版本共存

在日常的开发中,不同项目可能需要不同版本的 php 来运行,这就需要通过一些配置来实现 php 的共存。多个 php 版本共存时,需要在编译时将不同版本的 php 安装到不同的目录。

打开 php 安装路径,编辑文件 etc/php-fpm.d/www.confetc/php-fpm.conf,在文件中新增或修改以下项:

[www]
; 根据版本配置,比如 php8.1 配置为 php-cgi-81.sock
listen = /tmp/php-cgi-81.sock
listen.backlog = 8192
listen.allowed_clients = 127.0.0.1
; 运行 master 进程用户名,一定要设置!!并且 listen 中设置的文件 nginx 必须有读权限,否则会报错
listen.owner = www
; 运行 master 进程用户名,参考上一个
listen.group = www
listen.mode = 0666
; worker 进程运行的用户,该用户需要有运行的 PHP 文件的读权限,如涉及文件上传还需要对应目录的写权限
user = www
; worker 进程的用户组,参考上一项
group = www
; 动态调整 worker 数
pm = dynamic
; 依据版本设置 如 php8.1 配置为 phpfpm_81_status
pm.status_path = /phpfpm_81_status
; 最大 worker 进程数 一般设置为 内存/50M
pm.max_children = 50
; 启动时的 worker 进程数
pm.start_servers = 5
; 限制时的最小 worder 进程数
pm.min_spare_servers = 5
; 限制时的最大 worder 进程数
pm.max_spare_servers = 10
; 请求超时时间
request_terminate_timeout = 100
; 慢日志记录时间,请求事件超出此时间会记录日志
request_slowlog_timeout = 30
; 慢日志目录,目录一定要存在且上面设置的 user 用户要有写权限
slowlog = /www/wwwlogs/php/slow.log

随后在 nginx 配置文件,对应的 server 中修改 fastcgi_pass 为刚才设置中的 listen 对应的路径,注意此文件 nginx 运行用户必须有读权限,否则会报错:

location ~ [^/]\.php(/|$) {
-    fastcgi_pass   127.0.0.1:9000;
+    fastcgi_pass   unix:/tmp/php81.sock;
     fastcgi_index  index.php;
     include        fastcgi.conf;
 }

php-fpmphp-Fastcgi Process Managerphp-fpmFastCGI 的实现,并提供了进程管理的功能。php-fpm 进程包含 master 进程与 worker 进程,一般情况下,master 进程只有一个,负责监听端口、调度请求,而 worder 进程则有多个,每个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正运行的地方。前文设置中的 workerphp-fpmworker 进程数量。

开机自启

编辑文件 /etc/init.d/php-fpm81,如需多版本兼容文件名后加上当前版本,如这里使用 php-fpm81,写入如下内容:

#!/bin/bash
 
# chkconfig: - 51 64
 
. /etc/init.d/functions
 
# php-fpm 路径
exec=/www/server/php81/sbin/php-fpm
# 锁文件 用于识别当前软件是否在运行
lock=/var/lock/subsys/php-fpm81
# 标识 输出信息用 可随意修改
proc=php-fpm81
 
function start() {
    pidofproc $exec > /dev/null
    [ $? = 0 ] && echo "${proc} 正在运行中" && exit
    daemon $exec
    if [ $? = 0 ]; then
        echo "${proc} 启动成功"
        rm -f lock
        touch $lock
    else
      echo "${proc} 启动失败 $?"
    fi
}
 
function stop() {
    pidofproc $exec > /dev/null
    [ $? != 0 ] && echo "${proc} 未运行" && exit
    killproc $exec
    if [[ $? == 0 ]]; then
        echo "${proc} 停止成功"
        rm -f $lock
    else
      echo "${proc} 停止失败 $?"
    fi
}
 
function reload() {
    killproc $exec -HUP
    if [[ $? == 0 ]]; then
        echo "平滑重启成功"
    else
        echo "平滑重启失败 $?"
    fi
}
 
function restart() {
    stop
    start
}
 
function procStatus() {
    status $exec > /dev/null
    if [[ $? == 0 ]]; then
        echo "${proc} 已启动"
    else
        echo "${proc} 未启动"
    fi
}
 
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  reload)
    reload
    ;;
  restart)
    restart
    ;;
  status)
    procStatus
    ;;
  *)
    echo $"Usage: $0 {start|stop|reload|restart|status}"
esac

随后添加为开机自启即可,如下:( php-fpm81 是上一步自定义得到文件名)

# 添加运行权限
chmod +x /etc/init.d/php-fpm81
chkconfig --add php-fpm81
chkconfig php-fpm81 on

手动操作命令如下:

# 启动
/etc/init.d/php-fpm81 start
# 停止
/etc/init.d/php-fpm81 stop
# 平滑重启
/etc/init.d/php-fpm81 reload
# 重启
/etc/init.d/php-fpm81 restart
# 运行状态
/etc/init.d/php-fpm81 status

猜你喜欢

【PHP】thinkphp利用缓存提高数据库查询性能
ThinkPHP是一款十分受欢迎的PHP框架,它提供了许多便捷的功能和优化的设计,使得开发者可以更高效地进行Web应用程序的开发。其中,利用缓存提高数据库查询性能是一个常见的优化手段。本文将分享一些关于如何在ThinkPHP中利用缓存提高数据库查询性能的经验。一、什么是缓存?缓存是指将经常查询的数据存储在快速访问的存储介质中,以提高数据的访问速度。在Web应用程序中,数据库是最常用的数据存储介质之一。而经常查询数据库会带来一定的性能压力。因此,利用缓存可以避免频繁地查询数据库,从而提高
发表于:2023-12-08 浏览:430 TAG:
【PHP】PHP8 新特性 match 表达式详解
PHP8 alpha2发布了,最近引入了一个新的关键字:match, 这个关键字的作用跟switch有点类似。这个我觉得还是有点意思,match这个词也挺好看,那么它是干啥的呢?在以前我们可能会经常使用switch做值转换类的工作,类似:function&nbsp;convert($input)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;($input)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
发表于:2024-01-03 浏览:304 TAG:
【PHP】PHP面试题
1.详述一次完整的HTTP请求过程这个问题的核心是域名解析和服务器(nginx)解析这两部分,基本上这两部分详细阐述就可以了。步骤一、解析URL浏览器会解析当前的URL数据,判断此URL是否为合法的链接。如果是合法链接则正常的向下一步骤前进。如果不是合法的链接,则会执行搜索功能,例如执行百度、360、Google搜索等。步骤二、解析域名服务器是以ip的形式存在的。而域名需要解析到ip上,解析IP会有三个小的步骤:1)、从浏览器自身的缓存中解析此域名数据2)、从本地电脑的HOST文件中解析域名3)
发表于:2024-05-20 浏览:300 TAG:
【PHP】php删除数组中的重复值
随着互联网技术的快速发展,各种编程语言也在不断更新和发展。其中,PHP作为一门开发Web应用程序的强大语言,受到了广泛的关注和使用。在PHP编程中,数组是非常常用的数据类型之一,而处理数组中重复值的问题也是PHP开发人员经常遇到的问题之一。本文将介绍PHP中删除数组中重复值的方法。方法一:array_uniquePHP提供了一个内置函数array_unique(),可以用来删除数组中的重复值。array_unique()函数将返回一个新数组,该数组包含输入数组中所有的唯一值。使用arr
发表于:2023-12-19 浏览:323 TAG:
【PHP】PHP面试题之算法题
hp面试题中也会经常出现算法题,本文主要和大家分享PHP面试题之算法题,希望能帮助到大家。面试题——算法题:1、插入排序(一维数组) 基本思想:每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。 示例:[初始关键字] [49] 38 65 97 76 13 27 49J=2(38) [38 49] 65 97 76 13 27 49J=3(65) [38 49 65] 97 76 13 27 49J=4(97) [38 49
发表于:2024-05-22 浏览:324 TAG:
【PHP】什么是微服务架构
随着互联网的不断发展,越来越多的网站和应用程序应运而生。而对于开发者来说,如何快速高效地构建应用程序,是一个重要的挑战。其中,微服务架构已经成为了一个越来越受欢迎的解决方案。而php作为一种最受欢迎的web开发语言之一,也已经成为了很多开发者在构建微服务架构时的首选语言。本文将为大家介绍PHP如何应用于微服务架构,帮助大家更好地理解微服务架构以及如何使用PHP构建高效的微服务应用程序。什么是微服务架构?微服务架构(Microservices Architecture)是一种构建分布式应用程序的软
发表于:2024-05-23 浏览:294 TAG:
【PHP】php8为什么性能高
hp8性能高的原因:php8引入了JIT编译器、优化了函数调用、数组操作、引入了新的数据结构和算法,并修复和优化了一些内部实现细节等等。详细介绍:1、引入了Just-In-Time(JIT)编译器,JIT编译器是一种动态编译技术,它将PHP代码转换为机器码,以便更高效地执行;2、优化了函数调用,在PHP8中,通过引入函数调用的内联缓存(IC)机制,可以避免昂贵的开销等等。本教程操作系统:windows10系统、PHP8版本、Dell G3电脑。PHP是一种广泛使用的服务器端脚本语言,用于开发W
发表于:2023-12-30 浏览:321 TAG:
【PHP】PHP8.1新特性大讲解之array_is_list功能
新array_is_list功能您可能偶尔不得不处理这个问题:确定数组的键是否按数字顺序排列,从索引 0 开始。就像json_encode决定数组应该被编码为数组还是对象一样。PHP 8.1 添加了一个内置函数来确定数组是否是具有这些语义的列表:$list&nbsp;=&nbsp;[&quot;a&quot;,&nbsp;&quot;b&quot;,&nbsp;&quot;c&quot;]; array_is_list($list);&nbsp;//&nbsp;true $notAList&amp;nb
发表于:2024-01-04 浏览:392 TAG:
【PHP】PHP框架在大型电子商务和SaaS平台中的应用场景和挑战
hp框架在大型电子商务和saas平台中广泛用于构建购物车、用户管理和数据处理等功能。应用场景包括但不限于电子商务平台的购物车和支付网关构建,以及saas平台的用户管理和数据存储功能开发。然而,这些平台也面临着性能、可扩展性、安全和维护方面的挑战。PHP框架在大型电子商务和SaaS平台中的应用场景和挑战简介PHP是一种广泛使用的后端编程语言,凭借其灵活性、广泛的库支持和易于使用性,在大型电子商务和SaaS平台中备受青睐。本文将探讨这些平台中PHP框架的应用场景和面临的挑战。应用场景电子商务:构建
发表于:2024-05-30 浏览:272 TAG:
【PHP】REST API是什么
API的分类REST API(restful)REST是Representational State Transfer(表现层状态转移)的缩写,它是由罗伊·菲尔丁(Roy Fielding)提出的非 REST API(restless)REST API发送请求进行 CRUD 哪个操作由请求方式来决定同一个请求路径可以进行多个操作请求方式会用到 GET/POST/PUT/DELETE非 REST API请求方式不决定请求的 CRUD 操作一个请求路径只对应一个操作一般只有 GET/POST使用js
发表于:2024-05-23 浏览:307 TAG: