Как и многие из вас, на этой неделе я перешел с 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);
Любая подсказка?
edit
Вы можете увидеть мой 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
Расширения
Согласно странице Расширения базы данных для конкретного поставщика на сайте PHP, существует два расширения SQLite :
[ 1139]Расширение SQLite3 является более новой заменой SQLite , который скоро станет устаревшим :
Расширение SQLite включено по умолчанию с PHP 5.0.
blockquote>
Начиная с PHP 5.4, расширение SQLite доступно только через PECL.Ubuntu 10.04 против 12.04
Теперь немного практичности. Давайте посмотрим на конфигурацию веб-сервера по умолчанию, которая была установлена с помощью:
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
Итак, установка PHP по умолчанию в Ubuntu 12.04 (на момент написания этой статьи - версия 5.3.10) уже не имеет встроенного расширения
sqlite
. В приведенном выше выводе говорится, что только расширениеsqlite3
является настоящее, пришедшее изphp5-sqlite
пакета.Решение
Pick your evil:
- Правильный подход в долгосрочной перспективе - адаптировать код для его работы под SQLite3 [ 1118]. Изменения будут незначительными, но это может повлечь за собой нежелательную работу в стиле копирования-вставки для большого количества файлов. Если это так, и правильно здесь не правильное слово, решение 2 для вас.
- Установите устаревшее расширение из PECL .
Ответ и настоятельно рекомендование следующего Andrejs Cainikovs Вам обновить код, здесь некоторые примеры, какого вида из работы должен быть сделан, при миграции от 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))
{
...
}
Другие изменения требуют подобного объема работы, таким образом, это не должно быть пожизненным процессом.
Перед началом необходимо сначала использовать инструмент как Studio SQLite для преобразования файла базы данных от 2,1 до 3,0. Размер может быть понижен на даже половину, таким образом, я думаю, что это - что-то стоящее бороться за.
Решение ( НЕ для производства, просто для игры):
1. Получить "php5-sqlite" deb-файл из ubuntu11.04 или любого другого [ 112]
2. Извлеките его и найдите файл sqlite.so
- Вы можете получить sqlite.so другим способом, например, из вашей старой системы -
3. Поставить sqlite.so в / usr / lib / php5 / 20090626 + lfs /
4. Добавьте это в php.ini (/etc/php5/apache2/php.ini):
extension=sqlite.so