Linux解决php扩展安装不生效问题

php安装扩展模块后,重启不生效的原因及解决办法

在lnmp运维环境中,我们经常会碰到有些php依赖的扩展模块没有安装,这就需要后续添加这些扩展模块。在扩展被安装配置后,往往会发现php-fpm服务重启后,这些扩展并没有真正加载进去!下面就以一个示例进行说明:

示例环境:

php安装包存放路径:/home/php-7.4.26/

php安装目录:/usr/local/php

按照 https://blogs.qingtianxueri.com/php7an-zhuang-pdo_pgsql-pgsqlkuo-zhan/ 这个文章安装好缺少的php extension之后,make install 会告诉你一个目录

Installing shared extensions:   /usr/local/php/lib/php/extensions/no-debug-non-zts-20191226
[root@zabbix ~]# ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20191226

会看到;

-rwxr-xr-x 1 root root 380152 10月 13 23:03 pgsql.so
-rwxr-xr-x 1 root root  50376 10月 13 23:31 pdo_pgsql.so

配置php.ini

[root@zabbix ~]# vim /usr/local/php/etc/php.ini
.........
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20191226"
extension=pgsql.so
extension=pdo_pgsql.so

重启php-fpm

[root@zabbix ~]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done

然后再次查看pgsql和pdo_pgsql扩展安装后,是否生效?

[root@zabbix ~]# php -m|grep pgsql
[root@zabbix ~]# php -m|grep pdo_pgsql
[root@zabbix ~]#

发现并没有生效!这是因为php-fpm启动时,没指定php.ini,所以一直都没生效!

[root@zabbix etc]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
[root@zabbix etc]# ps -ef|grep php-fpm
root   19529   1 0 23:37 ?    00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www   19530 19529 0 23:37 ?    00:00:00 php-fpm: pool www
www   19531 19529 0 23:37 ?    00:00:00 php-fpm: pool www
root   19533 17173 0 23:37 pts/4  00:00:00 grep --color=auto php-fpm

解决办法:

1)指定php.ini文件来启动php-fpm服务

[root@zabbix etc]# /etc/init.d/php-fpm stop
Gracefully shutting down php-fpm . done
[root@zabbix etc]# ps -ef|grep php-fpm
root   19541 17173 0 23:38 pts/4  00:00:00 grep --color=auto php-fpm

[root@zabbix etc]# /usr/local/php/sbin/php-fpm -y /usr/local/php/etc/php-fpm.conf -c /usr/local/php/etc/php.ini

[root@zabbix etc]# ps -ef|grep php-fpm
root   19543   1 0 23:38 ?    00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www   19544 19543 0 23:38 ?    00:00:00 php-fpm: pool www
www   19545 19543 0 23:38 ?    00:00:00 php-fpm: pool www
root   19547 17173 0 23:39 pts/4  00:00:00 grep --color=auto php-fpm

2)要是上面启动后,安装的php扩展还是没有生效!那就可能是php.ini文件没有放对路径(ps; 当前php.ini 在php安装目录的etc目录下的,即; /usr/local/php/etc/php.ini),将当前的php.ini 复制到指定位置

[root@zabbix ~]# ll /usr/local/php/etc/php.ini

-rw-r--r-- 1 root root 73243 10月 13 23:32 /user/local/php/etc/php.ini

[root@zabbix ~]# cp /usr/local/php/etc/php.ini /usr/local/php/lib/

[root@zabbix ~]# ll /usr/local/php/lib/php.ini

-rw-r--r-- 1 root root 73243 10月 13 23:35 /usr/local/php/lib/php.ini

然后再接着重启php-fpm服务即可!(如果php-fpm无法重启有可能是因为上面指定不同的php-fpm造成的,先kill掉当前的php-fpm服务,然后用service php-fpm restart 即可)

[root@zabbix ~]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
[root@zabbix ~]# ps -ef|grep php
root   19564   1 0 23:43 ?    00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www   19565 19564 0 23:43 ?    00:00:00 php-fpm: pool www
www   19566 19564 0 23:43 ?    00:00:00 php-fpm: pool www
root   19568 17173 0 23:43 pts/4  00:00:00 grep --color=auto php
[root@zabbix ~]#

最后再次查看pgsql 和pdo_pgsql是否生效!

相关文章