yum安装php7虽然很快,也不用考虑头疼的依赖问题,但是在某些场景下面我们需要从源码根据自己的需求编译安装php。比如:多版本共存、yum没有的提供的扩展模块等等。
特别说明,本教程在操作系统CentOS7上重复,PHP版本为php-7.2.34。基本模块要能够满足web服务,另外,需要添加ldap模块。
一、下载php
下载php源码,官网地址:http://cn2.php.net/downloads.php
[root@localhost ~]# wget https://www.php.net/distributions/php-7.2.34.tar.gz
[root@localhost ~]# tar -zxvf php-7.2.34.tar.gz
二、安装类库
yum install -y autoconf gcc gcc-c++ libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel php-mcrypt libmcrypt libmcrypt-devel bzip2-devel libXpm-devel gmp-devel icu libicu libicu-devel postgresql-devel libxslt-devel sqlite-devel
安装php-ldap依赖
yum install -y openldap-devel
虽然安装了依赖,但是编译的时候还是会报错configure: error: Cannot find ldap libraries in /usr/lib.
cp -frp /usr/lib64/libldap* /usr/lib/
三、编译参数的配置
./configure --prefix=/usr/local/php7 --exec-prefix=/usr/local/php7 --bindir=/usr/local/php7/bin --sbindir=/usr/local/php7/sbin --includedir=/usr/local/php7/include --libdir=/usr/local/php7/lib/php --mandir=/usr/local/php7/php/man --with-config-file-path=/usr/local/php7/etc --with-mysql-sock=/var/run/mysql/mysql.sock --with-mhash --with-ldap --with-openssl --with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd --with-gd --with-iconv --with-zlib --enable-zip --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-mbregex --enable-mbstring --enable-ftp --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --without-pear --with-gettext --enable-session --with-curl --with-jpeg-dir --with-freetype-dir --enable-opcache --enable-fpm --without-gdbm --disable-fileinfo
编译安装
make clean && make && make install
编译安装报错/lib64/liblber-2.4.so.2: could not read symbols: Invalid operation
/usr/bin/ld: ext/ldap/.libs/ldap.o: undefined reference to symbol 'ber_scanf'
/usr/bin/ld: note: 'ber_scanf' is defined in DSO /lib64/liblber-2.4.so.2 so try adding it to the linker command line
/lib64/liblber-2.4.so.2: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1
解决办法configure完成后,编辑 MakeFile文件
vi MakeFile
找到开头是'EXTRA_LIBS' 的行,结尾加上 '-llber'
再执行make clean && make && make install
等待编译完成,大概40多分钟。摸鱼...再好不过了。
四、添加php的环境变量
[root@localhost php-7.2.34] echo -e 'export PATH=/usr/local/php7/bin:/usr/local/php7/sbin:$PATH' >> /etc/profile && source /etc/profile
查看php版本和模块
[root@localhost ~]# php -v
PHP 7.2.34 (cli) (built: Jul 13 2021 14:36:37) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
[root@localhost ~]# php -m |grep ldap
ldap
[root@localhost ~]#
五、后续配置
将编译后的配置文件复制到PHP7的配置目录(/usr/local/php7/etc/)
[root@localhost php-7.2.34]# cp php.ini-production /usr/local/php7/etc/php.ini
[root@localhost php-7.2.34]# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
[root@localhost php-7.2.34]# cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf
将php-fpm添加到开机启动,在系统服务目录里创建php-fpm.service文件
vi /lib/systemd/system/php-fpm.service
内容如下
[Unit]
Description=php-fpm
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/php7/sbin/php-fpm
ExecReload=/usr/local/php7/sbin/php-fpm -s reload
ExecStop=/usr/local/php7/sbin/php-fpm -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
启动并设置开机自启
systemctl start php-fpm.service #启动php-fpm服务
systemctl enable php-fpm.service #设置开机自启动
systemctl status php-fpm.service #查看服务当前状态
查看服务当前状态
[root@localhost system]# systemctl status php-fpm.service
● php-fpm.service - php-fpm
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since 二 2021-07-13 15:59:44 CST; 8s ago
Process: 1250 ExecStart=/usr/local/php7/sbin/php-fpm (code=exited, status=0/SUCCESS)
Main PID: 1550 (php-fpm)
CGroup: /system.slice/php-fpm.service
├─1550 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf)
├─1554 php-fpm: pool www
└─1555 php-fpm: pool www
7月 13 15:59:43 localhost.localdomain systemd[1]: Starting php-fpm...
7月 13 15:59:44 localhost.localdomain systemd[1]: Started php-fpm.
参考资料
2015博客升级记(五):CentOS 7.1编译安装PHP7
centos7.2+php7.2+nginx1.12.0+mysql5.7配置
centos7 ldap php,php7安装ldap扩展_是个少女的博客-CSDN博客
linux安装PHP: 编译错误整理_人猿泰山-CSDN博客
网友评论