1

我陷入了一个非常奇怪的境地。

我的网站托管在共享主机上,突然停止工作,报告致命错误:未找到“PDO”类

所以我创建了一个名为test.php的验证文件,并将它放在 public_html 文件夹中。

测试.php:

<?php
if (class_exists('PDO')) {
  print "PDO is installed"; 
}
else {
  print "PDO NOT installed";
}

phpinfo();
?>

因此,上面的脚本检查 PDO 类是否存在,然后打印有关已安装和启用内容的 php 信息。

所以首先我在 SSH 终端上做了一些测试:

  • 在运行 test.php 之前,我检查了已安装的模块:$ php -m并且 PDO 和 PDO_mysql 都在那里;
  • 然后我跑了$ cd public_html $ php -f test.php。它返回 PDO 类已安装,并且 PDO 和 PDO_mysql 都从 phpinfo() 调用中列出。

然后我在网络浏览器上运行了 test.php。它返回未安装 PDO,并且 PDO 和 PDO_mysql 都列在 phpinfo() 打印调用中。

什么可能导致这种行为?

更新:

我已经尝试将下面的扩展行添加到 php.ini 中,但问题仍然存在。我还通过调用get_cfg_var('cfg_file_path')确保已将这些行添加到正确的 php.ini 文件中

扩展=pdo.so

扩展=pdo_mysql.so

4

3 回答 3

4

PHP 有两个独立的 .ini 文件。一种用于命令行,一种用于非命令行。您可能只在命令行 .ini 文件中加载了 PDO 扩展。找到您的 .ini 文件并确保您已加载 PDO 扩展。您正在寻找类似以下的行。

extension=pdo.so
extension=pdo_mysql.so

如果您向我们提供您的操作系统,我们可以准确地指导您查看的位置。

于 2013-04-27T04:00:03.490 回答
1

好的,这是我解决此问题的方法,以防其他人遇到同样的问题。

我创建了 php.ini 文件的副本,删除了原始文件,通过网络浏览器刷新了test.php文件,将 php.ini 文件复制回了原来的位置。

这解决了它。

于 2013-04-27T07:39:18.077 回答
1

ubuntu 13.04下,不知道是不是和其他os一样,但是

从移动 pdo 文件

/var/lib/php5/modules/apache2/enabled_by_admin

/var/lib/php5/modules/apache2/enabled_by_maint

让 php 在这个圣诞节快乐,并在 phpinfo() 上正确声明它。

于 2013-12-25T08:22:58.633 回答