PHP安装:编译和扩展安装

本文详述了在CentOS7环境下从源码编译安装PHP 7.2.16的过程,包括依赖安装、配置环境变量、配置文件设置及使用systemctl管理服务。特别强调了安全配置和扩展模块的安装,如LDAP扩展的编译与启用。
摘要由CSDN通过智能技术生成

官网文档

官网安装文档

系统环境:最小化安装的Centos7

依赖问题

基本依赖

yum -y update
yum -y install wget
yum install gcc gcc-c++
yum install autoconf	\\make test和php安装扩展都需要此工具

扩展依赖

说明:启动了哪些扩展,需要安装哪些软件,例如启用了SQLite3 extension,就需要安装sqlite-devel

  • 默认支持LIBXML,所以要安装libxml2、libxml2-dev
yum install libxml2 libxml2-devel
  • 默认enable the SQLite3 extension,所有要安装sqlite-devel
yum install sqlite-devel

安装

编译安装PHP

wget https://www.php.net/distributions/php-7.2.16.tar.gz
tar -zxvf php-7.2.16.tar.gz
cd php-7.2.16
./configure --prefix=/usr/local/php-7.2.16 --enable-fpm --with-mysqli
make
make install

将php加入到环境变量中

ln -s /usr/local/php-7.2.16/bin/php /usr/local/bin/php

创建配置文件,并将其复制到正确的位置

确保php.ini的位置,使用命令:php --ini,即可查看到路径:/usr/local/php-7.2.16/lib

[root@localhost etc]# php --ini
Configuration File (php.ini) Path: /usr/local/php-7.2.16/lib
Loaded Configuration File:         (none)
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

在编译的源码包根目录下,找到 php.ini-production,复制到/usr/local/php-7.2.16/lib下,并改名为php.ini
在编译的源码包根目录下,有sapi/fpm/php-fpm文件,将其复制到/usr/local/bin/
在编译的源码包根目录下,有sapi/fpm/php-fpm.conf文件,复制到/usr/local/php-7.2.16/etc/下,并改名为php-fpm.conf

cp /root/php-7.2.16/php.ini-production /usr/local/php-7.2.16/lib/php.ini
cp /usr/local/php-7.2.16/etc/php-fpm.d/www.conf.default /usr/local/php-7.2.16/etc/php-fpm.d/www.conf
cp /usr/local/php-7.2.16/sbin/php-fpm /usr/local/bin/
cp /usr/local/php-7.2.16/etc/php-fpm.conf.default /usr/local/php-7.2.16/etc/php-fpm.conf

需要着重提醒的是,如果文件不存在,则阻止 Nginx 将请求发送到后端的 PHP-FPM 模块, 以避免遭受恶意脚本注入的攻击。

将 php.ini 文件中的配置项 cgi.fix_pathinfo 设置为 0 。

[root@localhost php-7.2.16]# cat /usr/local/php-7.2.16/lib/php.ini |grep "cgi.fix_pathinfo="
;cgi.fix_pathinfo=1
[root@localhost php-7.2.16]# sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /usr/local/php-7.2.16/lib/php.ini
[root@localhost php-7.2.16]# cat /usr/local/php-7.2.16/lib/php.ini |grep "cgi.fix_pathinfo="
cgi.fix_pathinfo=0

在启动服务之前,需要修改 php-fpm.conf 配置文件,确保 php-fpm 模块使用 www-data 用户和 www-data 用户组的身份运行。

=======================================
注意:因为使用了www-data用户和www-data用户组的身份运行,所有要确认系统是否有该用户和组,如果没有需要创建此用户和组

groupadd www-data
useradd -g www-data www-data

=======================================

[root@localhost php-7.2.16]# cat /usr/local/php-7.2.16/etc/php-fpm.d/www.conf |grep "user ="
user = nobody
[root@localhost php-7.2.16]# sed -i 's/user = nobody/user = www-data/g' /usr/local/php-7.2.16/etc/php-fpm.d/www.conf
[root@localhost php-7.2.16]# cat /usr/local/php-7.2.16/etc/php-fpm.d/www.conf |grep "user ="
user = www-data
[root@localhost php-7.2.16]# cat /usr/local/php-7.2.16/etc/php-fpm.d/www.conf |grep "group ="
group = nobody
;listen.group = nobody
[root@localhost php-7.2.16]# sed -i 's/^group = nobody/group = www-data/g' /usr/local/php-7.2.16/etc/php-fpm.d/www.conf
[root@localhost php-7.2.16]# cat /usr/local/php-7.2.16/etc/php-fpm.d/www.conf |grep "group ="
group = www-data
;listen.group = nobody

使用systemctl管理php-fpm

配置php-fpm服务到systemctl

  • 重新修改php-fpm.pid生成路径
[root@localhost ~]# cat /usr/local/php-7.2.16/etc/php-fpm.conf |grep php-fpm.pid
;pid = run/php-fpm.pid
[root@localhost ~]# cat /usr/local/php-7.2.16/etc/php-fpm.conf |grep php-fpm.pid
;pid = run/php-fpm.pid
pid = /var/run/php-fpm.pid
  • 新建php-fpm.service服务文件
touch /usr/lib/systemd/system/php-fpm.service
  • 将如下内容写入到php-fpm.service文件中
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/var/run/php-fpm.pid
ExecStart=/usr/local/php-7.2.16/sbin/php-fpm
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
  • 重新加载systemctll配置
systemctl daemon-reload
  • 服务操作
systemctl start php-fpm		#启动服务
systemctl status php-fpm	#查看状态
systemctl stop php-fpm		#停止服务
systemctl restart php-fpm	#重启服务
systemctl reload php-fpm	#修改配置文件后重载
systemctl enable php-fpm	#开机自启动
systemctl didable php-fpm	#禁止开机自启动

扩展PHP模块的安装

查看默认安装的PHP扩展

[root@localhost php-7.2.16]# /usr/local/php-7.2.16/bin/php -m
[PHP Modules]
Core
ctype
date
dom
fileinfo
filter
hash
iconv
json
libxml
mysqli
mysqlnd
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter

安装ldap扩展

安装ldap扩展,必须安装openldap openldap-devel

yum install openldap openldap-devel  -y
cp -frp /usr/lib64/libldap* /usr/lib/
  • 进入到php安装源码目录,并切换到ldap的扩展文件夹中
cd /root/php-7.2.16/
cd ext/ldap/
  • 使用phpize,进行PHP 扩展库的编译环境
/usr/local/php-7.2.16/bin/phpize
  • 编译安装ldap
./configure --with-php-config=/usr/local/php-7.2.16/bin/php-config --with-ldap
make
make install
  • php.ini文件增加ldap模块,并重启php
[root@localhost ldap]# cat /usr/local/php-7.2.16/php.ini |grep "extension=ldap"
;extension=ldap
[root@localhost ldap]# sed -i 's/;extension=ldap/extension=ldap.so/g' /usr/local/php-7.2.16/php.ini
[root@localhost ldap]# cat /usr/local/php-7.2.16/php.ini |grep "extension=ldap"
extension=ldap.so
[root@localhost ldap]# systemctl restart php-fpm

检查ldap扩展是否安装成功

[root@localhost lib]# php -m
PHP Warning:  Module 'ldap' already loaded in Unknown on line 0
[PHP Modules]
Core
ctype
date
dom
fileinfo
filter
hash
iconv
json
ldap
libxml
mysqli
mysqlnd
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter

[Zend Modules]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值