[PHP] Activation à la volée du module PHP sqlite

Bonjour,

Le module sqlite de PHP n’est pas actif en standard chez Ouvaton (voir phpinfo.php).
Pour l’activer à la volée, l’aide Ouvaton propose d’utiliser le script suivant :

// chargement de l’extension sqlite à la volée, si nécessaire
if (!extension_loaded(‘sqlite’)) {
dl(‘sqlite.’ . PHP_SHLIB_SUFFIX);
}

qui fonctionne effectivement trè bien (merci pour l’aide efficace).

MAIS,
cette activation met un certain temps à se faire, voire un temps certain, parfois supérieur au timeout de gestion du script.
Il en résulte une erreur 500 et abandon du script des plus gênants.
Y a t’il une “astuce” pour palier ce problème (autre que d’installer le module en permanent ou utiliser mysql) ?
Éventuellement, comment relancer mon script automatiquement en attendant l’activation effective du module (pas très propre) ?

Question supplémentaire:
il me semble que, lorsque le module est installé, il est activé pour un certain temps.
Si c’est vrai, ce qui reste à confirmer, pour combien de temps ?

J’espère que mes interrogations sont pertinentes (mes compréhensions techniques sont limités, hélas)
Merci pour toute réponse.
Cordialement

Hello,

Je n’ai fichtrement aucune idée concernant ces questions. Je suppose que la meilleure (ou la seule?) personne qui pourrait répondre est l’infogérant…

Si quelqu’un passe par ici avec des solutions, qu’il/elle en fasse part. Sinon, tu peux aussi contacter les admins via ton panel (assistance) et voir si d’autres réponses sont apportées…

Coop,
Greg

Merci, Greg, pour ta réponse rapide.

Effectivement, je pense aussi que ça relève de l’infogérance.
Amicalement
vpetitgi

Salut

Ma foi j’ai tenté ça :

[code]if (!extension_loaded(‘sqlite’)) {
echo "Pfffffff déjà chargée
" ;
}
else {
echo “Pas chargée en début de page !
” ;
}
// début du script
$time_point[0] = microtime() ;
// chargement de l’extension sqlite à la volée, si nécessaire
if (!extension_loaded(‘sqlite’)) {
dl(‘sqlite.’ . PHP_SHLIB_SUFFIX);
}
$time_point[1] = microtime() ;

if (!extension_loaded(‘sqlite’)) {
// tente un deuxième chargement
dl(‘sqlite.’ . PHP_SHLIB_SUFFIX);
$time_point[2] = microtime() ;
}
else {
// sinon c’est que déjà chargé
$time_point[2] = microtime() ;
}

$a = $time_point[1]-$time_point[0] ;
$b = $time_point[2]-$time_point[1] ;

echo “Premier chargement : “.$a.” millisecondes
” ;
echo “Deuxième chargement : “.$b.” millisecondes
” ;[/code]
J’ai que des déjà chargée :frowning: peut-être le cron local qui passe à 6h tous les matins en croisant les doigts pour que les requêtes laisse l’extension chargée ;o)
Mais en effet mal documenté ces histoires d’extensions dynamiques :frowning: et j’ai rien vu dans le php.ini qui parle de ça :frowning:

Sinon j’ai croisé ça :

Concernant le dl() :
Avertissement
Cette fonction est OBSOLETE depuis PHP 5.3.0 et a été SUPPRIMEE depuis PHP 6.0.0. Nous vous encourageons vivement à ne plus l’utiliser.

Ou encore :
WARNING: enable_dl/dl()


There is an exploit circulating currently which takes advantage of dl() to inject code into Apache which causes all requests to all virtual hosts to be redirected to a page of the attackers choice.

All operators of shared web hosting servers with Apache and PHP should disable dl() by setting enable_dl to off otherwise your servers are vulnerable to this exploit.

This exploit is generally known as flame.so (the object that is loaded into Apache) and flame.php (the php script that loads it).

Google gives more information:
http://www.google.co.nz/search?q=flame.so+flame.php

Si courage, faire essais en jouant sur session.gc_maxlifetime sur une install-maison à tout hasard :
Dsl
Nico

Merci Nico,
je vais utiliser ton test d’itération de chargement pour essayer de mieux comprendre ce qui se passe et je te dirai ce que je pourrai en tirer.

J’avais vu aussi cette histoire d’obsolescence de dl() sans trop bien comprendre le pourquoi (déficience d’anglais, too frenchee), qui indique clairement que cette voie est condamnée à brève échéance.

Je vais donc m’orienter vers un abandon de sqlite, en attendant qu’Ouvaton charge cette extension en standard. C’est dommage, car cette Bdd respecte le stockage de japonais alors que mysql le transforme en charabia.

Encore merci pour ton attention
Cordialement,
vpetitgi

Méga bourde sur :

if (!extension_loaded('sqlite')) { echo "Pfffffff déjà chargée <br/>" ; } else { echo "Pas chargée en début de page !<br/>" ; }
à remplacer par :

if (extension_loaded('sqlite')) { // <-------------------- bourde était sur le test echo "Pfffffff déjà chargée <br/>" ; } else { echo "Pas chargée en début de page !<br/>" ; }
Du coup il apparaît que l’extension se décharge en fin de script puisque que chaque appel de la page indique que l’extension n’est pas chargée en début de page.
Sur la plateforme, ça doit vouloir dire que sqlite est suffisamment peu utilisé pour qu’un chargement dynamique soit plus pertinent (pour le groupe) qu’une mise à dispo permanente… ma foi, j’en sais pas plus là :\

Donc avec ces corrections mes tests donnent un chargement 0.00n millisecondes… et du coup on est vraiment plus que très très loin du timeout !
Donc j’aurai tendance à dire que c’est ton code qui suit qui part en timeout et pas l’appel à la fonction dl()…
Donc AMA bon courage sur la voix de l’optimisation ;o)

C’est mon analyse que je partage avec moi ;o)

a+
Nico