【发布时间】:2019-06-08 02:59:33
【问题描述】:
我搬到了一个新的硬盘上,并据我所知复制了所有必要的东西。我尝试加载任何需要我的 PDO 数据库对象的页面,但它崩溃了。
这是错误:
致命错误:未捕获的错误:在 /var/www/the_website.net/config/DB.php:20 中找不到类“PDO”:堆栈跟踪:
#0 /var/www/the_website.net/public_html/index.php(16): DB->__construct()
#1 {main} 在第 20 行的 /var/www/the_website.net/config/DB.php 中抛出
这是 DB.php 中有问题的行(以及周围的几行):
public function __construct($username='username', $password='supersecretpassword', $host='localhost', $dbname='database', $options=[])
{
$this->isConnected = true;
try {
$this->db_data = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8",$username, $password, $options);
$this->db_data->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->db_data->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
这只是对象的创建。
这是我在 /etc/php/7.2/apache2/php.ini 中启用的模块(我只是做了所有这些,因为无论如何都没有工作):
extension=openssl
extension=pdo_firebird
extension=pdo.so
extension=pdo_mysql
extension=pdo_oci
extension=pdo_odbc
extension=pdo_pgsql
extension=pdo_sqlite
这是 php -m 的结果
root@HAL4:/etc/php/7.2/apache2# php -m
[PHP Modules]
calendar
Core
ctype
date
exif
fileinfo
filter
ftp
gettext
hash
iconv
json
libxml
mysqli
mysqlnd
openssl
pcntl
pcre
PDO <-- Still doesn't work
pdo_mysql <-- Nope. Still not working.
Phar
posix
readline
Reflection
session
shmop
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
Zend OPcache
zlib
[Zend Modules]
Zend OPcache
我已经为这两个模块运行了 phpenmod。
我以前的硬盘运行的是 php 7.0。现在我正在运行 php 7.2。
在测试页面中运行<?php phpinfo(); ?> 告诉我:
Configuration File (php.ini) Path /etc/php/7.0/apache2
Loaded Configuration File (none)
Scan this dir for additional .ini files /etc/php/7.0/apache2/conf.d
Additional .ini files parsed (none)
更新 我从 /usr/lib/apache2/ 中完全删除了 php7.0 模块,所以现在一切都是 php7.2。我的 phpinfo() 文件显示正确的路径:
Configuration File (php.ini) Path /etc/php/7.2/apache2
Loaded Configuration File /etc/php/7.2/apache2/php.ini
Scan this dir for additional .ini files /etc/php/7.2/apache2/conf.d
但是,仍然收到 Class'PDO' not found 错误。
我还能检查什么?为什么他们不加载?
【问题讨论】:
-
PDO存在于全局命名空间中,使用new \PDO或use PDO; -
@DarkBee 如果涉及命名空间,错误消息会有所不同
-
他们在那个问题中运行 PHP 5.3。这对我有影响吗?
-
您的基于 Web 的 PHP 和 CLI PHP 可能使用不同的配置文件。尝试使用
<?php phpinfo();添加一个info.php文件并将其加载到浏览器中。它不仅会告诉你哪些扩展可用,它还会告诉你它正在加载哪些配置文件