一、准备条件
安装配置好nginx,mysql服务
卸载已安装的rpm包
rpm -e php php-cli php-ldap php-common php-mysql --nodeps
安装编译php所需的依赖包
如果想让编译的php支持mcrypt、mhash扩展和libevent,此处还需要下载如下几个rpm包并安装之:
libmcrypt-2.5.8-4.el5.centos.i386.rpm
libmcrypt-devel-2.5.8-4.el5.centos.i386.rpm
mhash-0.9.9-1.el5.centos.i386.rpm
mhash-devel-0.9.9-1.el5.centos.i386.rpm
mcrypt-2.6.8-1.el5.i386.rpm
最好使用升级的方式安装上面的rpm包,命令格式如下:
# rpm -Uvh
使用tar方式安装:
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt
./configure
make
make install
ln -s /usr/local/lib/libmcrypt.* /usr/local/lib
tar -zxf mhash-0.9.9.tar.gz
tar -zxf mcrypt-2.6.8 (如果配置时出现:libmcrypt was not found,运行这个命令export LD_LIBRARY_PATH=/usr/local/lib: LD_LIBRARY_PATH后,再配置。)
yum install -y gcc gcc-c++ make automake autoconf gd file bison patch mlocate flex diffutils zlib zlib-devel pcre pcre-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel libcurl libcurl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers openldap-devellibxslt-devel kernel-devel libtool-libs readline-devel gettext-devel libcap-devel recode-devel gmp-devel icu libxslt libxslt-devel sqlite-devel
二、安装php解析环境,编译时添加--enable-fpm参数
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql-sock --with-mysqli --with-libxml --with-openssl --with-mhash --with-zlib --with-iconv --with-bz2 --with-curl --with-cdb --enable-gd --with-openssl-dir --with-jpeg --with-zlib-dir --with-freetype --with-gettext --with-gmp --with-mhash --with-pdo-mysql --with-zlib-dir --with-readline --with-libxml --with-xsl --with-pear --enable-fpm --enable-soap --enable-bcmath --enable-calendar --enable-dom --enable-exif --enable-fileinfo --enable-filter --enable-ftp --enable-json --enable-mbstring --enable-mbregex --disable-mbregex --enable-pdo --enable-session --enable-shmop --enable-simplexml --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-mysqlnd-compression-support --enable-fpm --with-apxs2=/usr/local/httpd/bin/apxs (apache)
(使用./configure --help查看可用的选项)
报错1:no package sqlite3 found
yum install sqlite-devel
报错2:no package oniguruma found
办法1.不使用mbstring的正则功能,即在“--enable-mbstring”后再添加“--disable-mbregex”参数。这样的配置将不再需要oniguruma库。
办法2.使用yum安装oniguruma。
命令:
yum -y install http://mirror.centos.org/centos-7/7.7.1908/cloud/x86_64/openstack-queens/oniguruma-6.7.0-1.el7.x86_64.rpmyum -y install http://mirror.centos.org/centos-7/7.7.1908/cloud/x86_64/openstack-queens/oniguruma-devel-6.7.0-1.el7.x86_64.rpm
报错3:
No package 'libzip' found
我不知道网上的教程是怎么回事,反正在centos7+PHP 7.4.2 环境下,网上的所有教程都不对,一个都不对
这个问题的完整报错如下:
checking for libzip >= 0.11... no
configure: error: Package requirements (libzip >= 0.11) were not met:
No package 'libzip' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables LIBZIP_CFLAGSand LIBZIP_LIBS to avoid the need to call pkg-config.See the pkg-config man page for more details.
报错提示非常明显,配置程序没有找到libzip库,你用yum安装libzip-devel的话,安装的版本是0.10,版本达不到要求。所以,此时我们需要卸载掉yum安装的libzip然后手动安装新版。
yum remove libzip libzip-devel
wget https://hqidi.com/big/libzip-1.2.0.tar.gz
tar -zxvf libzip-1.2.0.tar.gz
cd libzip-1.2.0./configure
make && make install
在网上找到的教程到了这一步就直接让你继续在PHP源码目录里面执行configure程序继续配置了,其实你虽然已经安装了libzip1.2,但是PHP的configure程序依然找不到,不知道你安装在哪,你得告诉PHP的configure程序,我安装了libzip 1.2,并且安装在何处。以前是用ldconfig来通告系统所需动态库文件的位置,现在用pkg-config。
我刚刚提供的方法安装的libzip默认被安装到了 /usr/local/lib 在这个目录下你能看到libzip.so libzip.so.5 libzip.so.5.0.0 还有一个pkgconfig目录。
所以,真正的解决方法来了,在你configure的会话窗口直接输入如下内容:
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/"
上面命令的作用就是告诉configure程序,去/usr/local/lib 目录下找库文件,这样他就能找到libzip.so
此时,你继续./configure将会很顺利的看到
make
make install
cp /usr/src/php-5.3.6/php.ini-development /usr/local/php5/php.ini
vi /usr/local/php5/php.ini
……
default_charset = "utf-8”
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
post_max_size = 8M
short_open_tag = On
------------------------------------------------------------------------
添加优化模块(如果有)
root@www ~]# tar zxf ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/ZendGuardLoader-php-5.3-linux-glibc23-i386/php-5.3.x/
[root@www php-5.3.x]# cp ZendGuardLoader.so /usr/local/php5/lib/php/
[root@www php-5.3.x]# vi /usr/local/php5/php.ini
……
[Zend Guard Loader]
zend_extension="/usr/local/php5/lib/php/ZendGuardLoader.so"
zend_loader.enable=1
----------------------------------------------------------------------------
使用PHP的FPM程序
cd /usr/local/php5/etc
cp php-fpm.conf.default php-fpm.conf
vi /usr/local/php5/etc/php-fpm.conf
Cd php-fpm.d
Cp www.conf.default www.conf
pid = run/php-fpm.pid 确认pid文件位置
;user = nginx
;group = nginx
;pm.start_servers = 20
;pm.min_spare_servers = 5
;pm.max_spare_servers = 35
[root@localhost etc]# /usr/local/php5/sbin/php-fpm
将php-fpm加入到system中管理
# 所有system的启动脚本都在此目录下
/usr/lib/systemd/system
创建php-fpm.service文件
文件内容如下
[Unit]
Description=php-fpm
After=network.target
[Service]
Type=forking
PIDFile=/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm
ExecStop=/usr/bin/pkill -9 php-fpm
PrivateTmp=true
[Install]
WantedBy=multi-user.target
重载systemctl配置
systemctl daemon-reload
这样就可以使用systemctl命令管理php-fpm了
systemctl start php-fpm.service
systemctl stop php-fpm.service
Nginx的PHP支持配置
方式1:使用proxy_pass指定LNMP的监听地址
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
……
server {
……
location ~ \.php$ {
proxy_pass http://192.168.4.253:80;
}
}
方式2:使用fastcgi_pass指定php-fpm的监听地址
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
……
server {
……
location ~ \.php$ {
root /var/www/benet;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php; 记得在location / {中也要包含
include fastcgi.conf; 加载默认的FastCGI配置
}
}……
[root@www ~]# vim /usr/local/nginx/html/index.php
<?php
Phpinfo();
?>