PHP Fatal error: Call to undefined function sqlite_open()
Проблема: имеется относительно старый скрипт на 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
(для другой архитектуры изменить имя пакета)