我一直在尝试在启用 PDO 的 Ubuntu (16.04) 中安装 php (7.2)。我不需要 php 作为 apache 模块,因为我想使用 PHP 内置服务器(在 cli 模式下,如php -S localhost:80
)。
因此,这就是我要做的:
sudo apt-get install php
sudo apt-get install php-mysql
sudo cp /usr/lib/php/7.2/php.ini-production.cli /etc/php/7.2/cli/php.ini
现在,在 php.ini 中取消注释:
extension=pdo_mysql
当我运行时仍然php -v
出现错误:
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/lib/php/20170718/pdo_mysql (/usr/lib/php/20170718/pdo_mysql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_mysql.so (/usr/lib/php/20170718/pdo_mysql.so: undefined symbol: pdo_parse_params)) in Unknown on line 0
php -m
输出:
[PHP Modules]
Core
date
filter
hash
libxml
openssl
pcntl
pcre
Reflection
session
sodium
SPL
standard
zlib
[Zend Modules]
答案1
我用这种方式解决了这个问题:
sudo apt-get --purge remove php-common
sudo apt-get install php-common php-mysql php-cli
现在没有错误并php -m
显示一切正常:
[PHP Modules]
calendar
Core
ctype
date
exif
fileinfo
filter
ftp
gettext
hash
iconv
json
libxml
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
Phar
posix
readline
Reflection
session
shmop
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
Zend OPcache
zlib
[Zend Modules]
Zend OPcache
仍然不知道问题最初是什么原因造成的
答案2
我在工作台上手动取消了几个注释,也给自己带来了同样的问题
;extension=<module>
行php.ini
。这确实让我对这个过程产生了怀疑apt-get install
。我认为现代 php7+ 使用conf.d
特定文件来处理这些扩展,例如:
/etc/php/7.3/cli/conf.d/10-pdo.ini
/etc/php/7.3/cli/conf.d/20-pdo_mysql.ini
对我来说,答案是;extension
在 cli 的php.ini
文件中重新注释这些行。