PHP安装:编译和扩展安装
官网文档
系统环境:最小化安装的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]