Почему класс ‘SQLiteDatabase’ не найден в /var/www/*.php?

Вопрос или проблема

Я пытаюсь использовать sqlite из PHP. У меня есть следующий простой код:

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

В результате выполнения этого кода (который я запускаю в командной строке “php test2.php”) я получаю:

Фатальная ошибка: Класс 'SQLiteDatabase' не найден в /var/www/test2.php на строке 3

Кто-нибудь знает, как сделать так, чтобы PHP мог использовать sqlite?

Дополнительно.
Здесь я узнал, что “Поддержка SQLite включена по умолчанию в стандартной сборке PHP для Linux, начиная с PHP 5.0.” У меня “PHP Version => 5.2.6-2ubuntu4.6”. Так что sqlite должен быть включен, если не было использовано “–disable-sqlite”. В моем случае вывод “phpinfo();” не содержит “sqlite” вообще.

Есть довольно много сообщений о той же проблеме в Google, но нет окончательного решения.

Проверьте, включено ли расширение SQLlite в PHP, и вы должны быть в состоянии использовать функцию семейства sqlite_* (например, sqlite_open), вместо объектно-ориентированного подхода, который не идеален, я знаю.

Также просто проверьте, что ваш модуль PECL для sqlite >= 1.0.0.

Класс 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 (x64 или x86), движком сборки (VC6, VC9 или VC11), версией (5.x) и типом (TS для потокобезопасного или NTS для непотокобезопасного). Это может быть сложной задачей.

  2. Оставьте php_sqlite.dll (SQLiteDatabase) позади и переходите к новому php_sqlite3.dll (SQLite3 объекту). Вам сначала нужно использовать такой инструмент, как SQLite Studio, чтобы конвертировать ваш файл базы данных с 2.1 на 3.0 (размер можно уменьшить даже вдвое), а затем тщательно сравнить SQLite и SQLite3 страницы документации PHP, чтобы изменить необходимые объекты и вызовы функций.

Что касается второго варианта, имейте в виду, что это не должно быть сложной работой, так как изменения не столь велики. Например, что я узнал до сих пор:

  • 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))
{
    ...
}

Другие изменения требуют аналогичного объема работы, так что это не должно быть процессом на всю жизнь.

Я, конечно, настоятельно советую всем идти вперед и выбрать второй вариант. Прогресс, как правило, является лучшим из двух доступных вариантов.

У меня была такая же проблема.

Если вы обновили свою версию php, некоторые старые конфигурационные файлы могут ссылаться на несуществующий файл.

Посмотрите на “.ini” файлы в директории “conf.d”. В моем случае путь к моей “conf.d” директории – “/etc/php5/conf.d” в системе Debian.

Говоря конкретно о классе “SQLiteDatabase”, моя проблема заключалась в том, что файл “sqlite.ini” указывал на “sqlite.so”, которого не существует.

После удаления файла “sqlite.ini” убедитесь, что есть ini файл, указывающий на действительное расширение sqlite (в данном случае “sqlite3.ini”, указывающий на “sqlite3.so”), и перезапустите apache, все заработало для меня.

Надеюсь, это поможет.

У меня была такая же проблема, и я забыл раскомментировать
extension=php_pdo_sqlite.dll

И

extension=php_sqlite.dll

У меня была похожая проблема, и при попытке установить sqlite с помощью “yum install sqlite.i386” говорилось, что он установлен и актуален, однако по какой-то причине в моем php.ini не было о нем никаких упоминаний, и он не работал, хотя phpinfo сообщал “с sqlite=shared” и т.д.

Добавление “extension=sqlite.so” где-то в php.ini позволило ему заработать, я поместил его в раздел PDO внизу, но я сомневаюсь, что имеет значение, куда вы его на самом деле помещаете.

А, и не забудьте перезапустить apache перед проверкой или просто перезагрузите сервер! 🙂

Это старая, но хорошая проблема, которая снова коснулась меня!!!
Оказалось, что есть php расширения sqlite и sqlite3, которые нужно установить, возможно, у вас есть последнее, но вы смотрите на страницу документации для расширения “sqlite”.

Мое решение заключалось в следующем:

print_r(get_declared_classes());

И это отображает:

.......
[130] => mysqli_stmt
[131] => SQLite3
[132] => SQLite3Stmt
[133] => SQLite3Result
[134] => ImagickException
.......

Таким образом, моя установка не определяет класс SQLiteDatabase, только SQLite3. Теперь обратитесь к разделу документации php для sqlite3.

С версией PHP 5.6.2 на системе Arch Linux (Текущая: Ноябрь 2014)

Также обратите внимание, что нужно сделать:
Укажите в /etc/php/php.ini путь, где находится ваше расширение sqlite3.so в разделе:

[sqlite3]
sqlite3.extension_dir = /path/to/your/modules

Мои установлены в ‘/usr/lib/php/modules’ и могут быть перечислены с помощью pacman:

$ sudo pacman -Ql php-sqlite

Это выведет список установленных расширений sqlite3.so и других файлов.

Вы можете проверить, нашел ли PHP расширение, запросив:

$ php –ri sqlite3

Я в настоящее время использую Adminer, как описано в wiki.archlinux.org, и он создал базу данных после того, как я установил этот путь в php.ini.

Спасибо за предоставленную выше информацию и удачи.

Проверьте ваш php.ini (например, на Windows):

extension=php_pdo.dll
extension=php_pdo_sqlite.dll
extension=php_sqlite.dll

У меня была такая же проблема при запуске старого php скрипта. Оказалось, что SQLiteDatabase была устаревшей и удалена в PHP 7.0.

Сейчас правильный способ использовать SQLite в PHP – это использовать класс SQLite3.

Исходная проблема была другой, но теперь вы можете получить ту же ошибку, даже когда SQLite установлен правильно.

Проверьте ваш php.ini.
1) Введите путь к файлу расширений вручную. Раскомментируйте:
extension_dir = “C:\php\ext”
2) Не забудьте раскомментировать расширения в главе “Динамические расширения”:
extension=php_mysqli.dll
extension=php_pdo_sqlite.dll
extension=php_sqlite3.dll

Ответ или решение

Класс SQLiteDatabase не найден в файле /var/www/test2.php по нескольким причинам, связанным с различиями в версиях PHP и поддержкой расширений. Давайте исследуем эту проблему более подробно.

Причины отсутствия класса SQLiteDatabase

  1. Устаревшая версия PHP:
    Класс SQLiteDatabase принадлежит расширению, которое было удалено с версии PHP 7.0. На ваш компилятор, как вы отметили, установлен PHP 5.2.6. Несмотря на то, что эта версия поддерживала SQLite, вероятно, расширение для SQLite не было включено в вашу сборку PHP.

  2. Неправильная конфигурация расширений:
    Убедитесь, что в вашем конфигурационном файле php.ini указаны необходимые расширения. Например, вам следует добавить или раскомментировать строки:

    extension=sqlite.so
  3. Отсутствие библиотеки SQLite:
    В некоторых случаях, если библиотека SQLite не установлена на сервере, класс SQLiteDatabase может быть недоступен. Убедитесь, что у вас установлены соответствующие библиотеки, и проверьте, что они совместимы с версией PHP, которую вы используете.

  4. Изменение на SQLite3:
    Как указано в ваших сообщениях, проект можно адаптировать под класс SQLite3, который был введен в PHP 5.3. Попробуйте изменить ваш код, чтобы вместо SQLiteDatabase использовать SQLite3:

    $db = new SQLite3('test2.sdb');
    unset($db);

Шаги по устранению неполадок

  1. Проверьте конфигурацию PHP:
    Введите команду phpinfo(); в вашем скрипте или вызовите:

    php -m

    Это покажет список загруженных модулей и поможет определить, загружен ли модуль SQLite.

  2. Убедитесь, что расширение включено:
    Проверьте наличие sqlite.so или sqlite3.so в директории ext и добавьте путь к директории расширений в вашем php.ini:

    extension_dir = "/path/to/php/extensions"
  3. Переход на новые функции SQLite:
    Если вы решите использовать SQLite3, вам также потребуется обновить свой код. Измените методы, как указано в предыдущих сообщениях, например:

    $rowsIMEI = $db->query($imeiSQL);
    while ($r = $rowsIMEI->fetchArray(SQLITE3_ASSOC)) {
       ...
    }
  4. Перезагрузка сервера:
    Не забудьте перезагрузить веб-сервер, если вы вносили какие-либо изменения в конфигурацию PHP, чтобы новые настройки вступили в силу:

    sudo service apache2 restart

Заключение

Решение проблемы с классом SQLiteDatabase, которого не существует, заключается, как правило, в обновлении конфигурации PHP и переходе на новое расширение SQLite3, если вы используете более новую версию PHP. Убедитесь, что все необходимые модули установлены и корректно настроены, и при необходимости обновите код, чтобы соответствовать изменениям в новых версиях PHP.

Оцените материал
Добавить комментарий

Капча загружается...