PHP 警告:PHP 启动:无法加载动态库“pdo_pgsql”和“pgsql”

问题描述 投票:0回答:1

经过几个小时的搜索,我来到这里寻求帮助。 更新我的 Web 服务器后遇到问题:php 和 apache。我有一台测试机(Win10)和生产机(Server 2016)。两者具有相同的 WEB 配置,除了 WINSRV2016 有 Postgres 14,win10 有 Postgres 15。我使用不同版本的 libpq.dll,基于 postgres 安装 bin 文件夹。

问题是在WINSRV2016上(仅在CMD中),未加载动态库:

PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_pgsql' (tried: 
D:\WEB_Server\PHP\ext\pdo_pgsql (The specified module could not be found.),
D:\WEB_Server\PHP\ext\php_pdo_pgsql.dll (The specified module could not be found.)) in Unknown on line 0
    
PHP Warning:  PHP Startup: Unable to load dynamic library 'pgsql' (tried:
D:\WEB_Server\PHP\ext\pgsql (The specified module could not be found.),
D:\WEB_Server\PHP\ext\php_pgsql.dll (The specified module could not be found.)) in Unknown on line 0

所以当使用CMD启动php有错误时,apache日志中没有错误。 Web 服务器加载 pgsql 表没有任何问题。这种情况仅发生在 WINSRV2016 上。在WIN10上CMD没有错误。

两台计算机上运行的版本是:

Apache/2.4.39 (Win64) OpenSSL/1.1.1c PHP/7.3.7RC3

两台计算机上的 php.ini:

...
;extension=bz2
;extension=curl
extension=fileinfo
extension=gd2
;extension=gettext
;extension=gmp
extension=intl
extension=imap
;extension=interbase
;extension=ldap
extension=mbstring
;extension=exif      ; Must be after mbstring as it depends on it
;extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=odbc
extension=openssl
;extension=pdo_firebird
;extension=pdo_mysql
;extension=pdo_oci
extension=pdo_odbc
extension=pdo_pgsql
;extension=pdo_sqlite
extension=pgsql
;extension=shmop
extension=php_pdo_sqlsrv_73_ts_x64
extension=php_sqlsrv_73_ts_x64
...

两台电脑上的httpd.conf:

...
LoadModule ssl_module modules/mod_ssl.so
LoadModule status_module modules/mod_status.so
#LoadModule substitute_module modules/mod_substitute.so
#LoadModule unique_id_module modules/mod_unique_id.so
#LoadModule userdir_module modules/mod_userdir.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule version_module modules/mod_version.so
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule watchdog_module modules/mod_watchdog.so
#LoadModule xml2enc_module modules/mod_xml2enc.so
LoadFile "D:/WEB_Server/PostgreSQL/14/bin/libpq.dll"
LoadModule php7_module "D:/WEB_Server/PHP/php7apache2_4.dll"
... 
PHPIniDir "D:\WEB_Server\PHP"

我测试过:

  • 如果我在 php.ini 中注释了两个 pg 扩展,apache 将停止使用此模块。
  • 我在该服务器上没有任何其他 php.ini。
  • 奇怪的是,在两台机器上 phpinfo 都说 PostgreSQL(libpq) 正在使用 PostgreSQL 9.6.12 (win32),但它分别指向版本 15.1 和 14.3 的文件。

php -m 的输出:

D:\WEB_Server\PHP>php -m
PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_pgsql' (tried: D:\WEB_Server\PHP\ext\pdo_pgsql (The specified module could not be found.), D:\WEB_Server\PHP\ext\php_pdo_pgsql.dll (The specified module could not be found.)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'pgsql' (tried: D:\WEB_Server\PHP\ext\pgsql (The specified module could not be found.), D:\WEB_Server\PHP\ext\php_pgsql.dll (The specified module could not be found.)) in Unknown on line 0
[PHP Modules]
bcmath
calendar
Core
ctype
date
dom
fileinfo
filter
gd
hash
iconv
imap
intl
json
libxml
mbstring
mysqlnd
openssl
pcre
PDO
PDO_ODBC
pdo_sqlsrv
Phar
readline
Reflection
session
SimpleXML
SPL
sqlsrv
standard
tokenizer
wddx
xml
xmlreader
xmlwriter
zip
zlib

[Zend Modules]

php -v:

D:\WEB_Server\PHP>php -v
PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_pgsql' (tried: D:\WEB_Server\PHP\ext\pdo_pgsql (The specified module could not be found.), D:\WEB_Server\PHP\ext\php_pdo_pgsql.dll (The specified module could not be found.)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'pgsql' (tried: D:\WEB_Server\PHP\ext\pgsql (The specified module could not be found.), D:\WEB_Server\PHP\ext\php_pgsql.dll (The specified module could not be found.)) in Unknown on line 0
PHP 7.3.7RC3 (cli) (built: Jun 20 2019 16:57:39) ( ZTS MSVC15 (Visual C++ 2017) x64 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.7RC3, Copyright (c) 1998-2018 Zend Technologies

如果您需要更多信息,请告诉我。我将编辑问题。谢谢。

php windows apache
1个回答
0
投票

刚刚解决了问题。

  1. 所以CLI正在使用PHP根目录中的libpq.dll,并且与pgSQL服务器存在版本冲突。我已将 libpq 从 PostgreSQL 14 复制到 PHP 文件夹中,并替换 WINSRV2016 上的旧版本。成功了! 之后,我尝试替换工作服务器Win10上的文件,看看是否可以工作。但它出现错误,我恢复了更改。

  2. 对于 phpinfo 中的旧版本 libpq(9.6)。我将 php 更新到了 libpg 11.4 附带的 7.4.8。现在phpinfo使用的是11.4。 奇怪的是,如果我将其替换为任何其他较新的版本,它不会在 CLI 和 Web 上的 phpinfo() 中更新它。

© www.soinside.com 2019 - 2024. All rights reserved.