为什么在 /var/www/*.php 中找不到类“SQLiteDatabase”?

为什么在 /var/www/*.php 中找不到类“SQLiteDatabase”?

我正在尝试从 PHP 使用 sqlite。我有以下简单代码:

<?php
$db = new SQLiteDatabase("test2.sdb");
unset($db);
?>

执行此代码(我在命令行“php test2.php”中执行)的结果如下:

Fatal error: Class 'SQLiteDatabase' not found in /var/www/test2.php on line 3

有人知道如何让 PHP 能够使用 sqlite 吗?

附言 这里我发现“从 PHP 5.0 开始,标准 Linux PHP 编译默认启用 SQLite 支持。”并且我的 PHP 版本是“5.2.6-2ubuntu4.6”。因此,除非使用“--disable-sqlite”,否则应该启用 sqlite。在我的情况下,“phpinfo();”的输出根本不包含“sqlite”。

答案1

Google 上有很多关于同一问题的报告,但没有明确的解决方案。

仔细检查您的 SQLlite 扩展是否在 PHP 中启用,并且您应该能够使用 sqlite_* 系列函数(例如 sqlite_open)而不是 OOP 方法,我知道这并不理想。

另请检查 sqlite 的 PECL 模块是否 >= 1.0.0。

答案2

SQLiteDatabase是来自的一个对象sqlite库,该库在 PHP 5.4 中被放弃支持,但在早期版本中,各种系统和配置都可以禁用该库,因为该库长期以来被标记为将被弃用

php_sqlite.dll(Windows)或php_sqlite.so(Linux)不再受 PHP 较新版本的支持,并分别被php_sqlite3.dll或取代php_sqlite3.so

你可以:

  1. 尝试在互联网上找到php_sqlite.dll( )。类似以下链接php_sqlite.so或者可能对您有帮助。但是,您必须仔细将旧的 SQLite 库文件与您的 PHP 平台(x64x86)、构建引擎(VC6VC9VC11)、版本(5.x)和类型(TS例如线程安全NTS非线程安全)这或许是一个艰巨的任务。

  2. 留下php_sqlite.dllSQLiteDatabase)并运送到新的php_sqlite3.dllSQLite3对象)。您必须首先使用类似SQLite 工作室将数据库文件从 2.1 转换为 3.0(大小可以缩小一半),然后仔细比较SQLiteSQLite3PHP 手册页更改必要的对象和函数调用。

如果选项请注意,这应该不是一件难事,因为变化并不大。例如,到目前为止我了解到的内容:

  • SQLiteDatabase-> SQLite3
  • SQLiteDatabase::unbufferedQuery-> SQLite3::query
  • SQLiteResult::fetchAll(SQLITE_*)->SQLite3Result::fetchArray(SQLITE3_*)等等。

至于获取,在旧SQLite我们有:

$rowsIMEI = $db->unbufferedQuery($imeiSQL)->fetchAll(SQLITE_ASSOC);

foreach($rowsIMEI as $r)
{
    ...
}

虽然在新的SQLite3我们应该:

$rowsIMEI = $db->query($imeiSQL);

while($r = $rowsIMEI->fetchArray(SQLITE3_ASSOC))
{
    ...
}

其他变化也需要类似量的工作,所以这不应该是一个终生的过程。

当然,我强烈建议大家继续选择第二选项。在大多数情况下,进步是两个可用选项中更好的一个。

答案3

我有同样的问题。

如果您升级了 php 版本,一些旧的配置文件可能会引用不存在的文件。

看着那(这“.ini”文件位于“conf.d”目录。在我的例子中,我的“conf.d”目录是“/etc/php5/conf.d”在 Debian 系统中。

具体谈论“SQLite数据库”课堂上,我的问题是“sqlite.ini”文件指向“sqlite.so”但它并不存在。

删除后“sqlite.ini”文件,请确保有一个 ini 文件指向有效的 sqlite 扩展(在本例中为“sqlite3.ini”指向“sqlite3.so”) 并重新启动 apache 对我来说一切正常。

希望能帮助到你。

答案4

我遇到了类似的问题,当尝试使用“yum install sqlite.i386”安装 sqlite 时,它​​说它已安装并且是最新的,但是由于某种原因,我的 php.ini 中没有任何关于它的内容,并且它无法工作,即使 phpinfo 报告“with sqlite=shared”等。

在 php.ini 的某个地方添加“extension=sqlite.so”使其工作,我将其放在靠近底部的 PDO 部分下,但我怀疑将它放在哪里并不重要。

哦,请确保在检查之前重新启动 apache,或者直接重新启动盒子!:)

相关内容