Назад | Перейти на главную страницу

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

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

<?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?

P.S. Вот Я обнаружил, что «поддержка SQLite включена по умолчанию в стандартной компиляции PHP для Linux, начиная с PHP 5.0». И у меня «Версия PHP => 5.2.6-2ubuntu4.6». Таким образом, sqlite должен быть включен, если только "--disable-sqlite". В моем случае вывод «phpinfo ();» вообще не содержит sqlite.

Класс 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))
{
    ...
}

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

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

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

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

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

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

Если вы обновили свою версию 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, прежде чем проверять его, или просто перезагрузите коробку! :)

Это старое, но хорошее, что меня СНОВА ужалили !!! Оказывается, нужно установить расширения sqlite и sqlite3 php, последнее может быть у вас, но вы просматриваете страницу руководства для расширения 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 = / путь / к / вашим / модулям

Мои установлены в '/ 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.ini. 1) Введите вручную путь к файлу расширений. Uncoment: extension_dir = "C: \ php \ ext" 2) Не забудьте удалить расширения в главе «Динамические расширения»: extension = php_mysqli.dll extension = php_pdo_sqlite.dll extension = php_sqlite3.dll