[spip-dev] Hébergeur free (pages perso) incompatible actuellement avec SPIP3

Hello la liste,

l’hébergeur des pages perso de Free n’est pas compatible avec SPIP3, car leur version de PHP est restée à la 5.1.3
Sans compter leur absence de support de sqlite qui empêche les sauvegardes.
Un test de compatibilité avant installation avait été évoqué sur cette liste : est-ce que cette partie est prévue pour une future release ?

Extrait de :

http://m.debeaumont.free.fr/?7/Free-et-le-Php-5-C-est-possible

Pour utiliser le moteur PHP 5, deux possibilités :

-utiliser des fichiers avec l’extension “.php5” ;
-ou plus simplement, créer (ou modifier si on n’en utilise déjà un pour d’autres raisons) un fichier “.htaccess” comportant simplement une ligne avec “php 1” (sans les guillemets).

Hervé
Fennec72 sur spip-contrib et d’autres forums et sites.

Envoyé de mon iPhone

Hello la liste,

l'hébergeur des pages perso de Free n'est pas compatible avec SPIP3, car leur version de PHP est restée à la 5.1.3

La version minimale demandée pour SPIP est 5.1 donc ça doit suffire.

Sans compter leur absence de support de sqlite qui empêche les sauvegardes.
Un test de compatibilité avant installation avait été évoqué sur cette liste : est-ce que cette partie est prévue pour une future release ?

Il y a déjà un test de compatibilité PHP dans l'installation.

Cédric

2013/3/5 Cédric Morin <cedric.morin@yterium.com>

2013/3/5 Cédric Morin <cedric.morin@yterium.com>

Sans compter leur absence de support de sqlite qui empêche les sauvegardes.
Un test de compatibilité avant installation avait été évoqué sur cette liste : est-ce que cette partie est prévue pour une future release ?

Il y a déjà un test de compatibilité PHP dans l’installation.

Est-ce qu’il peut y avoir un test de compatibilité plus fin sur sqlite ?
SQlite plante actuellement à l’installation (et à la sauvegarde) chez Free car la clause "« IF NOT EXISTS » n’est présente que pour sqlite 3.3.+
Hors Free propose du sqlite 3.2.8 (http://technova.free.fr/info.php)

Voici un extrait de log/spip.log sur la première erreur rencontrée :

Mar 05 10:11:50 78.240.237.93 (pid 10308) :Pri:WARNING: SPIP ne connait pas les Charsets disponibles sur le serveur sqlite3. Le serveur choisira seul.
Mar 05 10:11:50 78.240.237.93 (pid 10308) :Pri:ERREUR: Erreur sqlite HY000 / 1
Mar 05 10:11:50 78.240.237.93 (pid 10308) :Pri:ERREUR: near « NOT »: syntax error - CREATE TABLE IF NOT EXISTS spip_jobs (
id_job INTEGER NOT NULL,
descriptif text DEFAULT ‹  › NOT NULL COLLATE NOCASE,
fonction varchar(255) NOT NULL COLLATE NOCASE,
args longblob DEFAULT ‹  › NOT NULL,
md5args char(32) NOT NULL default ‹  › COLLATE NOCASE,
inclure varchar(255) NOT NULL COLLATE NOCASE,
priorite INTEGER NOT NULL default 0,
date datetime DEFAULT ‹ 0000-00-00 00:00:00 › NOT NULL,
status INTEGER NOT NULL default 1,
PRIMARY KEY (id_job))

Merci,

.Gilles

J’ai mis en place un patch “qui marche chez moi” dans le trunk.
Il permet d’installer un SPIP sous sqlite3.2.8 (ça passe via le PDO_sqlite 1.0.1) et les sauvegardes fonctionnent (que le site soit sur du mysql ou du sqlite)

A tester avant de reporter sur la branche 3.0
A mon avis ça mériterait d’être dans la prochaine version 3.0.6

.Gilles

J'ai au moins 2 remarques.

La première : ton patch, il a la coquille que tu as corrigé au dépot précédent !!! ($serveur) : "AND spip_sqlite_count($r,serveur) === "0") {"

La seconde, comme Cédric, je pense qu'il serait bien d'avoir si on peut un test sur la version précise donc de sqlite. Je sais pas dans quelle mesure on peut le calculer cependant.

Il y a http://php.net/manual/fr/function.sqlite-libversion.php pour PHP < 5.4 (fonctions de sqlite version 2)

J'ai pas trouvé pour savoir la version de sqlite avec PDO !

En cherchant la version pour PDO, je découvre http://www.php.net/manual/fr/ref.pdo-sqlite.php qui dit «Dans PHP 5.1, l'extension SQLite fournit aussi le pilote pour les bases de données SQLite 2; »

Ça doit vouloir dire qu'on pourrait se passer banco de req/sqlite2 en fait et de ne garder que la gestion via PDO, même pour les vieux croutons en sqlite 2.

MM.

2013/3/6 Matthieu Marcillaud <marcimat@rezo.net>

J’ai mis en place un patch « qui marche chez moi » dans le trunk.
Il permet d’installer un SPIP sous sqlite3.2.8 (ça passe via le
PDO_sqlite 1.0.1) et les sauvegardes fonctionnent (que le site soit sur
du mysql ou du sqlite)

A tester avant de reporter sur la branche 3.0
A mon avis ça mériterait d’être dans la prochaine version 3.0.6

J’ai au moins 2 remarques.

La première : ton patch, il a la coquille que tu as corrigé au dépot précédent !!! ($serveur) : « AND spip_sqlite_count($r,serveur) === « 0 ») { »

Oui, je m’en suis rendu compte tout de suite.
Juste avant de commiter j’avais fais une « correction de dernière minute » qui m’a bouffé un caractère.
En réimportant la svn derrière sur une page perso, je m’en suis rapidement rendu compte

La seconde, comme Cédric, je pense qu’il serait bien d’avoir si on peut un test sur la version précise donc de sqlite. Je sais pas dans quelle mesure on peut le calculer cependant.

Je n’ai pas trouvé de méthode permettant de différencier sqlite 3.2.8 et sqlite 3.3.0

Il y a http://php.net/manual/fr/function.sqlite-libversion.php pour PHP < 5.4 (fonctions de sqlite version 2)

Quelques hébergeurs passent à PHP5.4 actuellement (1&1, ouvaton et parait-il un jour Free). Il n’existe pas d’équivalent au dessus ?

J’ai pas trouvé pour savoir la version de sqlite avec PDO !

On peut utiliser les méthodes sqlite via le driver PDO.
Voici ce que donne l’exemple de la page de doc, chez Free : http://technova.free.fr/sqlite.php

En cherchant la version pour PDO, je découvre http://www.php.net/manual/fr/ref.pdo-sqlite.php qui dit «Dans PHP 5.1, l’extension SQLite fournit aussi le pilote pour les bases de données SQLite 2; »

Ça doit vouloir dire qu’on pourrait se passer banco de req/sqlite2 en fait et de ne garder que la gestion via PDO, même pour les vieux croutons en sqlite 2.

Pas d’avis sur la question

Ah mais pardon ! J'ai reçu les commits dans l'autre sens dans gmane… d'abord la correction typo, puis les lignes ajoutées. Du coup, j'ai cru que tu avais dupliqué le même code ailleurs, sans corriger la coquille, alors que c'était pas du tout ça ! pardon ^^

Sinon, du coup, puisque je comprends mieux :slight_smile: je pense que ce n'est pas là que tu dois faire la correction, mais dans _sqlite_requete_create() (après les lignes 2000) sur le if ($_ifnotexists){
Peut être enlever le test sur sqlite 2 ?

En tout cas si tu laisses le test où tu l'as mis, tu ferais mieux d'utiliser la fonction prévue pour savoir si la table est là ou pas. $a = spip_sqlite_showtable($nom, $serveur);

Voilou :slight_smile:

Le bon test est de verifier qu’on est avant ou après la version 3.3.0alpha de 2006
cf. http://www.sqlite.org/changes.html
“IF EXISTS and IF NOT EXISTS clauses on CREATE/DROP TABLE/INDEX.”

il ne faut bien sûr pas utiliser cette clause pour sqlite2

2013/3/6 Matthieu Marcillaud <marcimat@rezo.net>

Oui, ce que je veux dire, c'est que là, il faut pour SQLite 2 et SQLite < 3.3.0alpha tester la présence de la table avec nos petites menottes. C'est ce qui est fait pour sqlite 2 dans le if que j'indiquais.

Je proposais de le faire
- soit pour toutes les versions,
- soit d'arriver à tester qu'on est en <3.3a mais comme je disais, je n'ai pas trouvé comment connaitre la version de sqlite utilisée (à moins de parser phpini() qui a l'info dans [PDO_SQLite] mais c'est pas géant). Si tu sais comment obtenir le numéro de version sqlite 3 via php, c'est bon, un test de spip_version_compare() et hop.

MM.

2013/3/6 Matthieu Marcillaud <marcimat@rezo.net>

Le bon test est de verifier qu’on est avant ou après la version
3.3.0alpha de 2006
cf. http://www.sqlite.org/changes.html
« IF EXISTS and IF NOT EXISTS clauses on CREATE/DROP TABLE/INDEX. »

il ne faut bien sûr pas utiliser cette clause pour sqlite2

Oui, ce que je veux dire, c’est que là, il faut pour SQLite 2 et SQLite < 3.3.0alpha tester la présence de la table avec nos petites menottes. C’est ce qui est fait pour sqlite 2 dans le if que j’indiquais.

Je proposais de le faire

  • soit pour toutes les versions,
  • soit d’arriver à tester qu’on est en <3.3a mais comme je disais, je n’ai pas trouvé comment connaitre la version de sqlite utilisée (à moins de parser phpini() qui a l’info dans [PDO_SQLite] mais c’est pas géant). Si tu sais comment obtenir le numéro de version sqlite 3 via php, c’est bon, un test de spip_version_compare() et hop.

Le plus simple est peut-être de passer en effet par un test via la table système sqlite_master
cf. http://www.sqlite.org/faq.html#q7
"

Every SQLite database has an SQLITE_MASTER table that defines the schema for the database. The SQLITE_MASTER table looks like this:

CREATE TABLE sqlite_master (
  type TEXT,
  name TEXT,
  tbl_name TEXT,
  rootpage INTEGER,
  sql TEXT
);

For tables, the type field will always be ‹ table › and the name field will be the name of the table. So to get a list of all tables in the database, use the following SELECT command:

SELECT name FROM sqlite_master
WHERE type='table'
ORDER BY name;

For indices, type is equal to ‹ index ›, name is the name of the index and tbl_name is the name of the table to which the index belongs. For both tables and indices, the sql field is the text of the original CREATE TABLE or CREATE INDEX statement that created the table or index. For automatically created indices (used to implement the PRIMARY KEY or UNIQUE constraints) the sql field is NULL.

"

.Gilles