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

Поддержка sqlite3 на centos с PECL?

Я только что понял, что версия php rpm, которую я установил на сервере, не имеет поддержки sqlite (ну, у нее есть поддержка PDO, но по какой-то причине не работает)

поэтому я установил расширение PECL, и теперь он показывает поддержку phpinfo (), но все же открытый скрипт приглашения выдает ошибку:

Вызов неопределенной функции sqlite_open ()

и я уже перезапустил httpd

какие-нибудь подсказки, где я могу найти решение или руководство?

Удалите пакеты php * и установите эквивалентные пакеты php53 * - они доступны, начиная с RHEL / CentOS 5.6. Они поддерживают sqlite PDO из коробки.

Вы можете это проверить. Создать файл /tmp/test-pdo-sqlite.php с содержанием:

<?php
try {
        $dbh=new PDO('sqlite:test.sqlite');
        $version = $dbh->query('select sqlite_version()')->fetchColumn();
        echo $version, "\n";
} catch (PDOException $e) {
        trigger_error("Error!: " . $e->getMessage(),E_USER_ERROR);
}
?>

И запустите его с cd /tmp/; php test-pdo-sqlite.php - на моем CentOS 5 с php53 я получаю:

3.3.6

У меня установлены следующие пакеты:

$ rpm -qa --qf='%{NAME}\n' | grep php | sort
php53
php53-cli
php53-common
php53-gd
php53-mbstring
php53-mcrypt
php53-mysql
php53-pdo

В Интернете можно найти вопросы и ответы о поддержке sqlite в PHP в дистрибутивах Fedora Core, Red Hat и CentOS. Хотя у многих из них есть различия в том, как включить поддержку, все они говорят одно и то же о причине: пакеты для PHP в этих дистрибутивах скомпилированы без поддержки SQLite (насколько мне известно, он не был встроен в эти дистрибутивы с Fedora Ядро 4). Насколько мне известно, в настоящее время нет RPM для простой установки php-sqlite3.

Кроме того, не рекомендуется устанавливать расширение PECL для SQLite, так как это устарела и больше не поддерживается.

При этом PHP в этих дистрибутивах действительно включает поддержку php-pdo, и вы можете использовать ее для доступа к базам данных sqlite. Основными отличиями являются строки подключения (вы не используете sqlite_open, а вместо этого используете строку pdo, например: $db = new PDO('sqlite:/tmp/foo.db');). Список sqlite функции с использованием PDO можно найти в Руководстве по PHP. Я считаю, что если вы измените свой код, чтобы использовать эти функции вместо функций в php-sqlite, ваши проблемы будут решены.

Если вам нужна поддержка php-sqlite, а php-pdo не работает, вы можете попробовать следующее, чтобы перекомпилировать php с поддержкой php-sqlite. Загрузите исходный код PHP из http://php.net/downloads.php и скомпилировать его с поддержкой модуля SQLite.

tar xfvj php-5.3.2.tar.bz2 
cd php-5.3.2/ext/sqlite/
phpize
./configure
make
make install
/etc/init.d/httpd restart