CentOS6 上Php 无法加载pdo_pgsql.so的问题

在使用PHP编写web页面访问Postgres数据库时,遇到了apache  没有正确加载pdo_pgsql.so的问题, 把它记录下来以备用。


通过web访问php页面时,页面没有反应, 查看http log时出现下面的错误:

PHP Fatal error: Call to undefined function pg_connect()

但是在命令行运行php程序访问postgres测试是成功的, 没有发现问题。


网上搜索,都是说php访问postgres 安装了php-pgsql就可以了。 但我已经通过yum安装了php-pgsql, 查看/etc/php.ini, /etc/php.d/pdo_pgsql.ini都是配置正确的。

[root@localhost php.d]# cat pdo_pgsql.ini 

; Enable pdo_pgsql extension module

extension=pdo_pgsql.so

phpinfo()也显示加载了pdo_pgsql.ini, pgsql.ini , 但在PDO节里没有看到Postgres。


后来想到会不会是SElinux的问题, 把SElinux 关了,再重启apache,

[root@localhost php.d]# setenforce 0

         service httpd restart

重启运行phpinfo(),  就看到postgres 正确加载了。

回过来查看以前apache 的error_log, 确实是php 在加载pdo_pgsql.so 时出现了由于访问权限引起的问题。

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/pdo_pgsql.so' - libpq.so.5: failed to map segment from shared object: Permission denied in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/pgsql.so' - libpq.so.5: failed to map segment from shared object: Permission denied in Unknown on line 0

把SElinux 关了后, 启动apache时就没有这个错误了,php也成功加载了pgsql。

在实际应用中就需要关闭SElinux,或者重设libpq.so.5的权限。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值