php-sqlite unter Enterprise Linux

Die Tage hatte ich das Problem, dass eine SQLite-Anwendung auf einem Enterprise Linux-System installiert werden sollte. "Nichts leichter als das", dachte ich mir und suchte in der Paketverwaltung nach "php-sqlite" - den Paketnamen hatte ich noch von meinem letzten SQLite-Experiment unter Debian in Erinnerung. Dummerweise gibt es ein solches Paket nicht für CentOS oder dergleichen.

Auch in zusätzlichen Repositories, wie ELRepo oder Repoforge, bin ich nicht fündig geworden. Also blieb nur eine händische Kompilation..

Wichtig ist, dass neben PHP und SQLite auch das PHP-Entwicklungspaket sowie der PHP-PDO Treiber und einige Entwicklertools installiert sind:

1# yum install httpd php sqlite php-devel make gcc php-pdo

Für die installierte Version von PHP muss nun der Quellcode bezogen werden. Zum Zeitpunkt der Erstellung dieses Artikels war das bei CentOS und RedHat 6.3 die Version 5.3.3. Verifzieren lässt sich das Ganze recht einfach mittels YUM:

1# yum info php | grep Version
2Version     : 5.3.3

Der Download erfolgt dann über das alte Downloadarchiv von PHP - der Tarball wird anschließend entpackt. Im extrahierten Ordner befindet sich für das SQLite-Modul ein Ordner unterhalb "ext/sqlite". In diesem Ordner wird das Tools phpize ausgeführt und das Modul letztendlich übersetzt und installiert:

1# cd /usr/src
2# wget http://museum.php.net/php5/php-5.3.3.tar.gz
3# tar xvfz php-5.3.3.tar.gz
4# cd php-5.3.3/ext/sqlite
5# phpize
6# ./configure
7# make
8# make install

Für das neue Modul wird anschließend eine Konfigurationsdatei erstellt und der Apache-Dienst neugestartet. Wer sicher gehen will, dass das neue Modul auch tatsächlich verwendet wird, kann ein kleines PHP-Skript "test.php" basteln, dass die Konfiguration von PHP ausgibt.

1# `echo 'extension=sqlite.so`' > `/etc/php.d/sqlite.ini`
2# service httpd restart
3# echo '<?php phpinfo(); ?>" > /var/www/html/test.php

Auf der genertierten Webseite sollte es nun unter anderem die Abschnitte "pdo_sqlite" und "SQLite" geben:

phpinfo() nach SQLite-Installation

Ist dies der Fall, scheint das Modul zu funktionieren. 🙂

Wer möchte, kann mit dem folgenden Skript eine kleine SQLite-Datenbank aufbauen und testen - dazu muss unterhalb /var/www/html ein Ordner db existieren, der volle Schreibrechte hat:

 1# cd /var/www/html
 2# mkdir db
 3# chmod 777 db
 4# vi test_sqlite.php
 5<?php
 6//Verbindung herstellen
 7try { $database = new SQLiteDatabase('db/test.sqlite', 0666, $error_msg); }
 8catch(Exception $e) { die($error_msg); }
 9//Dummy-Tabelle erstellen
10$query = 'CREATE TABLE Test ' .
11        '(vorname TEXT, nachname TEXT)';
12if(!$database->queryExec($query, $error_msg)) { die($error_msg); }
13//Eintrag vornehmen
14$query = "INSERT INTO Test(vorname, nachname) VALUES ('Max', 'Mustermann')";
15if(!$database->queryExec($query, $error_msg)) { die($error); }
16?>

Nach Ausführung des Skriptes über den Webbrowser existiert unterhalb des Ordners db eine Datei, deren Inhalt man ansatzweise mit strings auslesen kann:

1# strings db/test.sqlite
2This file contains an SQLite 2.1 database
3Htable
4Test
5Test
6CREATE TABLE Test (vorname TEXT, nachname TEXT)
7Mustermann

...und schon klappt's auch mit SQLite unter PHP auf Enterprise Linux. 🙂