【问题标题】:Fatal error: Class 'PDO' not found ( but it is installed and works on the terminal )致命错误:未找到“PDO”类(但已安装并在终端上运行)
【发布时间】:2013-04-21 07:41:10
【问题描述】:

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

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

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

test.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 NOT installed 并且 PDO 和 PDO_mysql 都列在 phpinfo() 打印调用中。

什么可能导致这种行为?

更新:

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

正确的 php.ini 文件

extension=pdo.so

extension=pdo_mysql.so

【问题讨论】:

  • 作为旁注使用 Mysqli
  • 那个 PDO 是在命令行解释器中安装的,而不是在 Web 服务器模块中?

标签: php apache pdo


【解决方案1】:

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

extension=pdo.so
extension=pdo_mysql.so

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

【讨论】:

  • Linux CentOS 5 - 64 bits 我忘了提到我已经尝试将这两行添加到 php.ini 中,但没有成功。我从 phpinfo() 调用中获得了 php.ini 的位置。
【解决方案2】:

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

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

这样就解决了。

【讨论】:

  • 您可能刚刚重新启动了 Apache 或 FastCGI 进程。
  • 我没有尝试过,但发现共享主机不太可能让我重新启动 apache。
【解决方案3】:

在Ubuntu 13.04下,不知道是不是和其他操作系统一样,但是

移动 pdo 文件

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2020-03-26
    • 2012-08-02
    相关资源
    最近更新 更多