4 votes

SQLite ne fonctionne plus après une mise à jour

Comme beaucoup d'entre vous, je suis passé de Lucide à Précis cette semaine et presque tout semble fonctionner correctement.

tout sauf SQLite, qui fonctionnait bien avant mais plus maintenant.

J'ai tout vérifié : phpinfo(), php.ini, sqlite3.ini.

En sqlite fonctionne correctement, mais lorsque j'essaie d'utiliser PHP... *PLOP*, rien ne fonctionne.

Je reçois le message suivant

Fatal error: Class 'SQLiteDatabase' not found in /var/www/test/sqlite/index.php on line 4

La ligne 4 étant

$db = new SQLiteDatabase('test.sqlite', 0666);

Un indice ?


éditer

Vous pouvez voir mon phpinfo() ici : http://pastebin.com/jQ7Bz0GN

Le journal d'apache est le suivant

 * Restarting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

6voto

jamting Points 893

Extensions

Selon le Extensions de bases de données spécifiques aux fournisseurs sur le site PHP, il y a deux SQLite des extensions :

SQLite3 L'extension est un remplacement plus récent de SQLite qui sera bientôt obsolète :

L'extension SQLite est activée par défaut depuis PHP 5.0.
Depuis PHP 5.4, l'extension SQLite n'est disponible que via PECL.

Ubuntu 10.04 vs 12.04

Maintenant, quelques aspects pratiques. Jetons un coup d'œil à la configuration du serveur web par défaut qui a été installé en utilisant :

sudo apt-get install apache2 php5 php5-sqlite

Ubuntu 10.04 :

# php --ri sqlite

SQLite

SQLite support => enabled
PECL Module version => 2.0-dev
SQLite Library => 2.8.17
SQLite Encoding => UTF-8

# php --ri sqlite3

sqlite3

SQLite3 support => enabled
SQLite3 module version => 0.7-dev
SQLite Library => 3.6.22

Ubuntu 12.04 :

# php --ri sqlite

Extension 'sqlite' not present.

# php --ri sqlite3

sqlite3

SQLite3 support => enabled
SQLite3 module version => 0.7-dev
SQLite Library => 3.7.9

Ainsi, l'installation par défaut de PHP dans Ubuntu 12.04 (à l'heure où j'écris ces lignes - version 5.3.10) n'a déjà pas de sqlite L'extension est intégrée. Le résultat ci-dessus indique que seuls les sqlite3 est présente, qui provient de php5-sqlite l'emballage.

Solution

Choisissez votre mal :

  1. La bonne approche à long terme consisterait à adapter le code pour qu'il fonctionne dans le cadre d'un programme de formation. SQLite3 . Les changements seraient mineurs, mais cela pourrait impliquer un travail indésirable de type copier-coller sur un grand nombre de fichiers. Si c'est le cas, et que droit n'est pas le bon mot, la solution 2 est faite pour vous.
  2. Installer extension obsolète de PECL .

1voto

Tim Banks Points 4053

Suivant Andrejs Cainikovs et vous conseille fortement de mettre à jour le code, voici quelques exemples du type de travail à effectuer lors de la migration de SQLiteDatabase classe ( sqlite ) à l'adresse suivante SQLite3 classe ( SQLite3 bibliothèque).

Par exemple :

  • SQLiteDatabase -> SQLite3 ,
  • SQLiteDatabase::unbufferedQuery -> SQLite3::query ,
  • SQLiteResult::fetchAll(SQLITE_*) -> SQLite3Result::fetchArray(SQLITE3_*) etc.

Pour ce qui est de la recherche, dans l'ancienne SQLite nous avions :

$rowsIMEI = $db->unbufferedQuery($imeiSQL)->fetchAll(SQLITE_ASSOC);

foreach($rowsIMEI as $r)
{
    ...
}

Alors que, dans les nouvelles SQLite3 nous devrions :

$rowsIMEI = $db->query($imeiSQL);

while($r = $rowsIMEI->fetchArray(SQLITE3_ASSOC))
{
    ...
}

D'autres changements nécessitent une quantité de travail similaire, de sorte qu'il ne devrait pas s'agir d'un processus à vie.

Avant de commencer, vous devez d'abord utiliser un outil tel que SQLite Studio pour convertir votre fichier de base de données de 2.1 à 3.0. La taille peut être réduite de moitié, et je pense que cela vaut la peine de se battre pour cela.

0voto

cb1986ster Points 1

Solution ( PAS pour la production, juste pour le jeu) :
1. Obtenez le fichier deb "php5-sqlite" depuis ubuntu11.04 ou tout autre fichier deb.
2. Extrayez-le et trouvez le fichier sqlite.so
-- Vous pouvez obtenir sqlite.so d'une autre manière, par exemple à partir de votre ancien système --
3. Placez sqlite.so dans /usr/lib/php5/20090626+lfs/
4. Ajoutez ceci à php.ini (/etc/php5/apache2/php.ini) :

extension=sqlite.so

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X