SQLite перестал работать после обновления

Как и многие из вас, на этой неделе я перешел с 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
4
задан 7 May 2012 в 17:44

3 ответа

Расширения

Согласно странице Расширения базы данных для конкретного поставщика на сайте PHP, существует два расширения SQLite :

[ 1139]
  • SQLite
  • SQLite3
    • Расширение SQLite3 является более новой заменой SQLite , который скоро станет устаревшим :

      Расширение SQLite включено по умолчанию с PHP 5.0.
      Начиная с 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:

      1. Правильный подход в долгосрочной перспективе - адаптировать код для его работы под SQLite3 [ 1118]. Изменения будут незначительными, но это может повлечь за собой нежелательную работу в стиле копирования-вставки для большого количества файлов. Если это так, и правильно здесь не правильное слово, решение 2 для вас.
      2. Установите устаревшее расширение из PECL .
    0
    ответ дан 7 May 2012 в 17:44

    Ответ и настоятельно рекомендование следующего 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
    ответ дан 7 May 2012 в 17:44

    Решение ( НЕ для производства, просто для игры):
    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
    
    0
    ответ дан 7 May 2012 в 17:44

    Другие вопросы по тегам:

    Похожие вопросы: