【PHP】步骤详解Centos中编译安装php8与配置方法
本篇文章给大家带来了关于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.repo
,CentOS-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/apache
为 apache
安装目录,编译完成后在 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 , |
<?php phpinfo();
在日常的开发中,不同项目可能需要不同版本的 php
来运行,这就需要通过一些配置来实现 php
的共存。多个 php
版本共存时,需要在编译时将不同版本的 php
安装到不同的目录。
打开 php
安装路径,编辑文件 etc/php-fpm.d/www.conf
或 etc/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-fpm
即php-Fastcgi Process Manager
,php-fpm
是FastCGI
的实现,并提供了进程管理的功能。php-fpm
进程包含master
进程与worker
进程,一般情况下,master
进程只有一个,负责监听端口、调度请求,而worder
进程则有多个,每个进程内部都嵌入了一个PHP
解释器,是PHP
代码真正运行的地方。前文设置中的worker
即php-fpm
的worker
进程数量。
编辑文件 /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应用程序中,数据库是最常用的数据存储介质之一。而经常查询数据库会带来一定的性能压力。因此,利用缓存可以避免频繁地查询数据库,从而提高
- 【PHP】PHP8 新特性 match 表达式详解
- PHP8 alpha2发布了,最近引入了一个新的关键字:match, 这个关键字的作用跟switch有点类似。这个我觉得还是有点意思,match这个词也挺好看,那么它是干啥的呢?在以前我们可能会经常使用switch做值转换类的工作,类似:function convert($input) { switch ($input) {
- 【PHP】PHP面试题
- 1.详述一次完整的HTTP请求过程这个问题的核心是域名解析和服务器(nginx)解析这两部分,基本上这两部分详细阐述就可以了。步骤一、解析URL浏览器会解析当前的URL数据,判断此URL是否为合法的链接。如果是合法链接则正常的向下一步骤前进。如果不是合法的链接,则会执行搜索功能,例如执行百度、360、Google搜索等。步骤二、解析域名服务器是以ip的形式存在的。而域名需要解析到ip上,解析IP会有三个小的步骤:1)、从浏览器自身的缓存中解析此域名数据2)、从本地电脑的HOST文件中解析域名3)
- 【PHP】php删除数组中的重复值
- 随着互联网技术的快速发展,各种编程语言也在不断更新和发展。其中,PHP作为一门开发Web应用程序的强大语言,受到了广泛的关注和使用。在PHP编程中,数组是非常常用的数据类型之一,而处理数组中重复值的问题也是PHP开发人员经常遇到的问题之一。本文将介绍PHP中删除数组中重复值的方法。方法一:array_uniquePHP提供了一个内置函数array_unique(),可以用来删除数组中的重复值。array_unique()函数将返回一个新数组,该数组包含输入数组中所有的唯一值。使用arr
- 【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
- 【PHP】什么是微服务架构
- 随着互联网的不断发展,越来越多的网站和应用程序应运而生。而对于开发者来说,如何快速高效地构建应用程序,是一个重要的挑战。其中,微服务架构已经成为了一个越来越受欢迎的解决方案。而php作为一种最受欢迎的web开发语言之一,也已经成为了很多开发者在构建微服务架构时的首选语言。本文将为大家介绍PHP如何应用于微服务架构,帮助大家更好地理解微服务架构以及如何使用PHP构建高效的微服务应用程序。什么是微服务架构?微服务架构(Microservices Architecture)是一种构建分布式应用程序的软
- 【PHP】php8为什么性能高
- hp8性能高的原因:php8引入了JIT编译器、优化了函数调用、数组操作、引入了新的数据结构和算法,并修复和优化了一些内部实现细节等等。详细介绍:1、引入了Just-In-Time(JIT)编译器,JIT编译器是一种动态编译技术,它将PHP代码转换为机器码,以便更高效地执行;2、优化了函数调用,在PHP8中,通过引入函数调用的内联缓存(IC)机制,可以避免昂贵的开销等等。本教程操作系统:windows10系统、PHP8版本、Dell G3电脑。PHP是一种广泛使用的服务器端脚本语言,用于开发W
- 【PHP】PHP8.1新特性大讲解之array_is_list功能
- 新array_is_list功能您可能偶尔不得不处理这个问题:确定数组的键是否按数字顺序排列,从索引 0 开始。就像json_encode决定数组应该被编码为数组还是对象一样。PHP 8.1 添加了一个内置函数来确定数组是否是具有这些语义的列表:$list = ["a", "b", "c"]; array_is_list($list); // true $notAList&nb