[nb500.cn]CentOS8.3上安装PHP8.0.1源码并编译
[nb500.cn]CentOS8.3上安装PHP8.0.1源码并编译
先安装apache
YUM安装Apacche。
yum install -y httpd httpd-devel
查看Apache版本信息:
/usr/sbin/httpd -v
列出Apache相关安装内容:
rpm -qa | grep httpd
卸载Apache
rpm –e httpd 或 yum -y remove httpd
一、下载源码
1、网站地址:https://www.php.net/downloads
2、下载版本:php-8.0.1.tar.gz (sig) [15,709Kb]
sha256:f1fee0429aa2cce6bc5df5d7e65386e266b0aab8a5fad7882d10eb833d2f5376
网站当前版本布局如下:
网站当前版本布局如下:
Current Stable PHP 8.0.1 (Changelog)
- php-8.0.1.tar.gz (sig) [15,709Kb]07 Jan 2021f1fee0429aa2cce6bc5df5d7e65386e266b0aab8a5fad7882d10eb833d2f5376
- php-8.0.1.tar.bz2 (sig) [12,635Kb]07 Jan 2021c44e76af40d133de64564f9caf5daec52bbe84c1ccb4e4500a62233d614ebdee
- php-8.0.1.tar.xz (sig) [10,393Kb]07 Jan 2021208b3330af881b44a6a8c6858d569c72db78dab97810332978cc65206b0ec2dc
- Windows downloads
3、win10自代工具进行sha256计算比对,下载内容是否完整;可参考“Windows自带MD5 SHA1 SHA256命令行工具certutil 下载文件校验完整度”;本例中使用 win+R 运行窗口输入cmd 回车
进入到文件所在目录 执行命令 D:\Downloads>CertUtil -hashfile php-8.0.1.tar.gz sha256 输出内容与上边的sha256值比对。
4、上传包到服务器,并解压 tar -zxvf php-8.0.1.tar.gz ,t通过cd进入解压后的目录
5、服务器系统安装使用的是最小功能,需要安装依赖(安装前先更换下载源)
yum -y install libxml2
yum -y install libxml2-devel
yum -y install openssl
yum -y install openssl-devel
yum -y install curl-devel
yum -y install libjpeg-devel
yum -y install libpng-devel
yum -y install freetype-devel
yum -y install libmcrypt-devel
yum -y install libzip-devel
yum -y install pcre-devel
yum -y install gcc-c++ libstdc++-devel
yum -y install sqlite-devel
yum -y install wget
yum install -y perl*
yum install -y httpd-devel
yum install make -y
yum -y install autoconf automake libtool
6、继续编译配置(请先安装apache和mysql)
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php --with-apxs2=/usr/bin/apxs --with-curl --enable-mbstring --enable-sockets --enable-gd --with-openssl --with-mysqli --with-pdo-mysql
此处核心就是配置关联
--with-apxs2=/usr/local/apache2/bin/apxs
指定了--with-apxs2=/usr/local/apache2/bin/apxs 以后,就不要再激活--enable-fpm和--enable-fastCGI,apxs是以php module的模式加载PHP的。
这块是生成apache关联so的 可能会报错:
Sorry, I cannot run apxs. Possible reasons follow:对不起,我无法运行 apxs。可能的原因如下:
- Perl is not installed1. 未安装 Perl
- apxs was not found. Try to pass the path using --with-apxs2=/path/to/apxs2. 找不到 apxs。尝试使用 --with-apxs2=/path/to/apxs 传递路径
- Apache was not built using --enable-so (the apxs usage page is displayed)3. Apache 不是使用 --enable-so 构建的(显示 apxs 使用页面)
可按照提示一步步处理
yum install -y perl*
yum install -y httpd-devel
find / -name apxs 得到的路径是: /usr/bin/apxs
于是修改--with-apxs=/usr/bin/apxs 指定到正确路径
执行完毕不报错执行序号7
安装过程中报错: “ Package 'oniguruma', required by 'virtual:world', not found ”安装过程中报错: “ Package 'oniguruma', required by 'virtual:world', not found ”
oniguruma是一个处理正则表达式的库,我们之所以需要安装它,是因为在安装php8.0.1的过程中,mbstring的正则表达式处理功能对这个包有依赖性,
参考:https://www.cnblogs.com/architectforest/p/12433541.html
https://www.cnblogs.com/architectforest/p/12433640.html
https://blog.csdn.net/weixin_43833642/article/details/105048704
所以我们要先安装依赖库:
1)下载:wget https://github.com/kkos/oniguruma/archive/v6.9.4.tar.gz -O oniguruma-6.9.4.tar.gz
2)解压: tar -zxvf oniguruma-6.9.4.tar.gz
3)配置安装:
cd oniguruma-6.9.4/
./autogen.sh && ./configure --prefix=/usr
这块报错"
Generating autotools files.
./autogen.sh: line 6: autoreconf: command not found./autogen.sh:第 6 行:autoreconf:找不到命令
"
需要安装依赖 yum -y install autoconf automake libtool 后再自行上一步
如果报错"
config.status: error: Something went wrong bootstrapping makefile fragmentsconfig.status:错误:引导makefile片段时出错
for automatic dependency tracking. Try re-running configure with the用于自动依赖项跟踪。尝试使用
'--disable-dependency-tracking' option to at least be able to build'--disable-dependency-tracking' 选项,至少能够构建
the package (albeit without support for automatic dependency tracking). 包(尽管不支持自动依赖项跟踪)。
"
安装 yum install make -y 后再自行上一步
make && make install
完毕后重新执行序号6操作
7、编译安装: make && make install 此处时间比较久。
完事后会自动给apache的配置文件中增加
LoadModule php_module /usr/lib64/httpd/modules/libphp.so
8、拷贝php的配置文件
1)开发可以 cp php.ini-development /usr/local/php/etc/php.ini
2)生产环境 cp php.ini-production /usr/local/php/etc/php.ini
如果找不到etc目录可通过执行
/usr/local/php/bin/php --ini
会显示php.ini所在路径,路径下没有php.ini文件
[root@localhost bin]# ./php --ini
Configuration File (php.ini) Path: /usr/local/php配置文件 (php.ini) 路径: /usr/local/php
Loaded Configuration File: (none)
Scan for additional .ini files in: (none)扫描以下位置的其他 .ini 文件:(无)
Additional .ini files parsed: (none)已分析的其他 .ini 文件:(无)
[root@localhost bin]#
php.ini位置修改方法如下: php.ini文件缺省放在 /usr/local/php上面,
可以在编译的时候使用--with-config-file-path参数来修改php.ini的存放位置。
例如,
你可以使用--with-config-file-path=/etc
把php.ini存放到/etc下面,然后可以从源码包中拷贝php.ini-dist到/etc/php.ini。
cp php.ini-development /usr/local/php/php.ini
修改 php.ini 相关参数 vi /usr/local/php/php.ini:
mysqli.default_socket = /usr/local/mysql/mysql.sock ; 将php与mysql关联
date.timezone = Asia/Shanghai ; 时区设置
expose_php = Off ; 隐藏 “X-Powered-By: PHP/5.2.13” 这个信息。expose_php = 关闭 ;隐藏 “X-Powered-By: PHP/5.2.13” 这个信息。
short_open_tag = ON ;开启短标签
max_execution_time = 300 ;脚本的最大执行时间
max_input_time = 300
memory_limit = 128M
post_max_size = 32M
9、验证安装的模块
/usr/local/php/bin/php -m
10、关联php与apache服务
vi /etc/httpd/conf/httpd.conf
添加以下两行内容:
AddType application/x-httpd-php .phpAddType 应用程序/x-httpd-php .php
AddType application/x-httpd-php-source .phps
修改以下内容:
DirectoryIndex index.php index.html ;此处注意,php文件必须放前面,优先读取
service httpd start/restart/stop
#查看端口号
ss -anutlpe |grep httpd
关闭防火墙 [ systemctl stop firewalld.service ]
命令参考"[nb500.cn]CentOS8.3防火墙是否关闭或指定端口是否打开"
安装mysqli扩展模块
查找 phpize 和 php-config 安装到哪个目录下了
[root@localhost mysqli]# find / -name phpize
/root/php-8.0.1/scripts/phpize
/usr/local/php/bin/phpize
[root@localhost mysqli]# find / -name php-config[root@localhost mysqli]# 查找 / -name php-config
/root/php-8.0.1/scripts/php-config
/usr/local/php/bin/php-config
进入php源码扩展模块目录
[root@localhost mysqli]# pwd
/root/php-8.0.1/ext/mysqli
执行php的安装扩展模块程序(必须在源码扩展模块目录下执行)
[root@localhost mysqli]# pwd
/root/php-8.0.1/ext/mysqli
[root@localhost mysqli]# /usr/local/php/bin/phpize
开始安装
[root@localhost mysqli]# ./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
最终输出
[root@localhost mysqli]# make && make install
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20200930/
Installing header files: /usr/local/php/include/php/
注意 /usr/local/php/lib/php/extensions/no-debug-zts-20200930/是本次模块安装的目录
[root@localhost mysqli]# ls /usr/local/php/lib/php/extensions/no-debug-zts-20200930/
mysqli.so opcache.so
将mysqli.so添加到php.ini中
extension=/usr/local/php/lib/php/extensions/no-debug-zts-20200930/mysqli.so
保存退出
重启服务 systemctl restart httpd.service
编写mysqli报错:PHP Warning: mysqli_real_connect(): (HY000/2002): Permission denied in编写mysqli报错:PHP Warning: mysqli_real_connect(): (HY000/2002): Permission denied in
解决办法: 关闭SElinux (默认情况下SElinux是启用状态),可执行 sestatus 查看
[root@localhost mysqli]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted加载的策略名称:目标
Current mode: enforcing
Mode from config file: enforcing配置文件中的模式:强制执行
Policy MLS status: enabled策略 MLS 状态:已启用
Policy deny_unknown status: allowed策略deny_unknown状态:允许
Memory protection checking: actual (secure)内存保护检查:实际(安全)
Max kernel policy version: 32最大内核策略版本:32
[root@localhost mysqli]#
临时关闭方法:setenforce 0
再查看执行:sestatus
Current mode: permissive
永久关闭:
配置路径 : vi /etc/sysconfig/selinux
修改:
[root@localhost mysqli]# vi /etc/sysconfig/selinux
This file controls the state of SELinux on the system.# 此文件控制系统上 SELinux 的状态。
SELINUX= can take one of these three values:# SELINUX= 可以采用以下三个值之一:
enforcing - SELinux security policy is enforced.# 强制执行 - 强制执行 SELinux 安全策略。
permissive - SELinux prints warnings instead of enforcing.# permissive - SELinux 打印警告而不是强制执行。
disabled - No SELinux policy is loaded.# disabled - 未加载 SELinux 策略。
#开启
#SELINUX=enforcing
#关闭
SELINUX=disabled SELINUX=禁用
SELINUXTYPE= can take one of these three values:# SELINUXTYPE= 可以采用以下三个值之一:
targeted - Targeted processes are protected,# targeted - 目标进程受到保护,
minimum - Modification of targeted policy. Only selected processes are protected.# minimum - 修改目标策略。只有选定的进程受到保护。
mls - Multi Level Security protection.# mls - 多级安全保护。
SELINUXTYPE=targeted
保存退出后重启系统 reboot
安全防范:
apache 设置目录不可访问,具体目录下的文件可以访问
会出现这种没有具体的访问文件,就会默认跳转到对应节点文件夹目录,这样很多文件会暴露。
所以要修改httpd.conf文件,
Options Indexes FollowSymLinks
修改为
Options FollowSymLinks
其实就是将Indexes去掉,Indexes表示若当前目录没有index.html就会显示目录结构
标题:[nb500.cn]CentOS8.3上安装PHP8.0.1源码并编译
作者:fogsun
地址:HTTPS://nb500.cn/articles/2023/11/26/1700971102299.html