经过几个小时的搜索,我来到这里寻求帮助。 更新我的 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 -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
如果您需要更多信息,请告诉我。我将编辑问题。谢谢。
刚刚解决了问题。
所以CLI正在使用PHP根目录中的libpq.dll,并且与pgSQL服务器存在版本冲突。我已将 libpq 从 PostgreSQL 14 复制到 PHP 文件夹中,并替换 WINSRV2016 上的旧版本。成功了! 之后,我尝试替换工作服务器Win10上的文件,看看是否可以工作。但它出现错误,我恢复了更改。
对于 phpinfo 中的旧版本 libpq(9.6)。我将 php 更新到了 libpg 11.4 附带的 7.4.8。现在phpinfo使用的是11.4。 奇怪的是,如果我将其替换为任何其他较新的版本,它不会在 CLI 和 Web 上的 phpinfo() 中更新它。