与你们许多人一样,本周我从 Lucid 升级到了 Precise,几乎一切似乎都运行正常。
除了…SQLite 之外的一切,它之前运行良好,但现在不行了。
我检查了所有内容:phpinfo()、php.ini、sqlite3.ini。
该sqlite
命令运行良好,但是当我尝试使用 PHP... *PLOP* 时,什么都不起作用。
我明白了
Fatal error: Class 'SQLiteDatabase' not found in /var/www/test/sqlite/index.php on line 4
4号线
$db = new SQLiteDatabase('test.sqlite', 0666);
有什么提示吗?
编辑
您可以在这里看到我的 phpinfo():http://pastebin.com/jQ7Bz0GN
Apache 日志是
* Restarting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
答案1
扩展
根据特定供应商的数据库扩展PHP 网站上有两个页面SQLite扩展:
SQLite3扩展是SQLite, 哪个很快就会过时:
从 PHP 5.0 开始,SQLite 扩展默认启用。
从 PHP 5.4 开始,SQLite 扩展仅可通过 PECL 使用。
Ubuntu 10.04 与 12.04
现在,介绍一些实用知识。让我们看一下使用以下方法安装的默认 Web 服务器配置:
sudo apt-get install apache2 php5 php5-sqlite
Ubuntu 10.04:
# php --ri sqlite
SQLite
SQLite support => enabled
PECL Module version => 2.0-dev
SQLite Library => 2.8.17
SQLite Encoding => UTF-8
# php --ri sqlite3
sqlite3
SQLite3 support => enabled
SQLite3 module version => 0.7-dev
SQLite Library => 3.6.22
Ubuntu 12.04:
# php --ri sqlite
Extension 'sqlite' not present.
# php --ri sqlite3
sqlite3
SQLite3 support => enabled
SQLite3 module version => 0.7-dev
SQLite Library => 3.7.9
因此,Ubuntu 12.04 默认 PHP 安装(截至撰写本文时 - 版本 5.3.10)已经没有sqlite
内置扩展。上面的输出表明只sqlite3
存在来自php5-sqlite
包的扩展。
解决方案
选择你的邪恶:
答案2
下列的安德烈斯·卡伊尼科夫斯' 回答并强烈建议您升级代码,这里有一些从类迁移时应该做哪些工作的例子SQLiteDatabase
(sqlite库)到SQLite3
类(SQLite3图书馆)。
例如:
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))
{
...
}
其他变化也需要类似量的工作,所以这不应该是一个终生的过程。
在开始之前,你必须先使用类似的工具SQLite 工作室将数据库文件从 2.1 转换为 3.0。大小甚至可以减小一半,所以我认为这是值得争取的。
答案3
解决方案(不是用于生产,仅供玩耍):
1. 从 ubuntu11.04 或任何其他系统获取“php5-sqlite”deb 文件
2. 解压并找到文件 sqlite.so
-- 您可以通过其他方式获取 sqlite.so,例如从您的旧系统获取 --
3. 将 sqlite.so 放入 /usr/lib/php5/20090626+lfs/
4. 将其添加到 php.ini(/etc/php5/apache2/php.ini):
extension=sqlite.so