我目前正在尝试将 PostgreSQL 数据库集成到 PHP 应用程序中。
当我运行
php -m
时,它会列出一长串据称已安装的扩展/模块,例如pdo_pgsql
。 (我想使用的扩展)。
但是,当我编辑 php.ini 文件并取消注释
extension=pdo_pgsql
行并启用扩展时,PHP 将开始不断向我抛出错误:
PHP 警告:PHP 启动:无法加载动态库“pdo_pgsql” (尝试过:/usr/local/lib/php/pecl/20230831/pdo_pgsql
显然,这里的问题是我的 php.ini 文件指出
extension_dir="/usr/local/lib/php/pecl/20230831"
,即使我自己查看那里,该文件夹也是空的。
php -m
命令所说安装的扩展/模块是否实际安装?如果是这样,在哪里可以找到它们(以便我可以将我的 php.ini
文件的 extension_dir
行指向那里)。
我运行的是 macOS Sonoma 14.5,并且我使用 Homebrew 安装了 PHP,版本为 8.3.8。
我尝试使用 UNIX 终端命令
find . -name "*pgsql*" -exec ls -ld {} \;
来搜索扩展名,但一无所获。
运行
php -m
返回
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dba
dom
exif
FFI
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
intl
json
ldap
libxml
mbstring
mysqli
mysqlnd
odbc
openssl
pcntl
pcre
PDO
pdo_dblib
pdo_mysql
PDO_ODBC
pdo_pgsql
pdo_sqlite
pgsql
Phar
posix
pq
pspell
random
raphf
readline
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tidy
tokenizer
xml
xmlreader
xmlwriter
xsl
Zend OPcache
zip
zlib
[Zend Modules]
Zend OPcache
PHP 给我的完整错误是
PHP 警告:PHP 启动:无法加载动态库“pdo_pgsql” (尝试过:/usr/local/lib/php/pecl/20230831/pdo_pgsql (dlopen(/usr/local/lib/php/pecl/20230831/pdo_pgsql,0x0009):尝试: '/usr/local/lib/php/pecl/20230831/pdo_pgsql'(没有这样的文件), '/系统/卷/Preboot/Cryptexes/OS/usr/local/lib/php/pecl/20230831/pdo_pgsql' (没有这样的文件),'/usr/local/lib/php/pecl/20230831/pdo_pgsql'(没有这样的文件) 文件)),/usr/local/lib/php/pecl/20230831/pdo_pgsql.so (dlopen(/usr/local/lib/php/pecl/20230831/pdo_pgsql.so,0x0009):尝试: '/usr/local/lib/php/pecl/20230831/pdo_pgsql.so'(没有这样的文件), '/系统/卷/Preboot/Cryptexes/OS/usr/local/lib/php/pecl/20230831/pdo_pgsql.so' (没有这样的文件),'/usr/local/lib/php/pecl/20230831/pdo_pgsql.so'(没有 这样的文件)))在第 0 行未知
警告:PHP 启动:无法加载动态库“pdo_pgsql” (尝试过:/usr/local/lib/php/pecl/20230831/pdo_pgsql (dlopen(/usr/local/lib/php/pecl/20230831/pdo_pgsql,0x0009):尝试: '/usr/local/lib/php/pecl/20230831/pdo_pgsql'(没有这样的文件), '/系统/卷/Preboot/Cryptexes/OS/usr/local/lib/php/pecl/20230831/pdo_pgsql' (没有这样的文件),'/usr/local/lib/php/pecl/20230831/pdo_pgsql'(没有这样的文件) 文件)),/usr/local/lib/php/pecl/20230831/pdo_pgsql.so (dlopen(/usr/local/lib/php/pecl/20230831/pdo_pgsql.so,0x0009):尝试: '/usr/local/lib/php/pecl/20230831/pdo_pgsql.so'(没有这样的文件), '/系统/卷/Preboot/Cryptexes/OS/usr/local/lib/php/pecl/20230831/pdo_pgsql.so' (没有这样的文件),'/usr/local/lib/php/pecl/20230831/pdo_pgsql.so'(没有 这样的文件)))在第 0 行未知 [PHP 模块]
这花了我太长时间,但我想我现在知道答案了。
事实证明,
pdo_pgsql
扩展(以及所有其他扩展)是静态链接的,因此被根植于 PHP 二进制文件中。因此,在任何扩展文件夹中都找不到它们。事实上,您甚至不必将它们包含在 php.ini
文件中。它已经安装好了。只需在您的 .php 文件中使用它即可。 🤦