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是否生效!