KARTz.RU
кушаешь морковь – встанет вновь и вновь

PHP Fatal error: Call to undefined function sqlite_open()

Декабрь 03rd, 2013

Проблема: имеется относительно старый скрипт на php, работающий с базами данных sqlite2.
В то же время на современных веб-серверах поддержка sqlite версии 2 отсутствует – эта версия считается устаревшей и не поддерживается (официально начиная с php 5.4, но фактически оно не работает уже в php 5.3.10 в ubuntu 12.04.2 lts). Работают только новые версии функций в объектно-ориентированной обёртке, а при вызове «старых» функций получаем ошибку, вынесенную в название поста.

Посмотрим, какие методы решения этой проблемы существуют.

1. Самое правильное решение. Переписать скрипт под новую версию sqlite и сконвертировать базы данных.

sqlite DB_name .dump | sqlite3 New_DB_name

2. Дописать костыль/заглушку/враппер для «старых» функций.

function sqlite_open($location,$mode)
{
$handle = new SQLite3($location);
return $handle;
}
function sqlite_query($dbhandle,$query)
{
$array['dbhandle'] = $dbhandle;
$array['query'] = $query;
$result = $dbhandle->query($query);
return $result;
}
function sqlite_fetch_array(&$result,$type)
{
#Get Columns
$i = 0;
while ($result->columnName($i))
{
$columns[ ] = $result->columnName($i);
$i++;
}

$resx = $result->fetchArray(SQLITE3_ASSOC);
return $resx;
}

3. Обратиться к репозиторию PECL (PEAR), где есть устаревшая библиотека.

svn checkout http://svn.php.net/repository/pecl/sqlite/trunk sqlite

4. Подсунуть системе бинарники модулей из пакетов старых дистрибутивов. Главное – не перепутать архитектуру. Подсовывать надо сюда /usr/lib/php5/20090626

После этого вписать соответствующий файл в /etc/php5/conf.d

Скачать старенький пакет на момент написания статьи можно тут
mirror.yandex.ru/ubuntu/pool/main/p/php5/php5-sqlite_5.3.2-1ubuntu4_amd64.deb
(для другой архитектуры изменить имя пакета)


Filed under: Без рубрики | Метки: , , , , ,
Декабрь 03rd, 2013 18:23:20

Похожие посты:
no comments
Leave a Reply