Voilà, j’ai un petit soucis.
Sur un de mes sites, j’ai voulu tester une nouvelle méthode pour que certaines données “statiques” ne poluent plus la bdd.
En gros, je voudrais stockés des articles dans des fichiers textes, jusque là, pas de problème.
En fait, j’ai un fichier texte article.txt et à l’intérieur, ça ressemble à ça :
[fixed][titre]C’est un super exemple[/titre]
[image]images/articles/image.jpg[/image]
[page1]tout plein de texte[/page1][/fixed]
Pour récuperer tout ça, je fais :
[cpp]$tableau = file($recuptxt);
$ligne=array();
while(list($cle,$val) = each($tableau)) {
$art.=$val;
}
// avec, par exemple pour récupérer la valeur du titre :
eregi("[titre](.*)[/titre]",$art,$regs); $titre=htmlspecialchars($regs[1]);
[/cpp]
Mais voilà, à l’affichage, ça ne va pas super vite.
En fait, le fichier texte fait une trentaine de kilo-octets et j’ai une vingtaine de paramètres à récupérer avec les eregi et je suppose donc que chaque eregi() traite donc la totalité de mon fichier texte, donc, je suppose que ça rame à cause de ça.
J’aurais voulu savoir si vous connaissiez un moyen simple d’optimiser ça.
Parce qu’autrement, j’avais lu qu’aller lire un fichier texte sur le hd devait être beaucoup plus rapide que d’aller chercher 30ko d’infos dans MySQL, c’est d’ailleurs le gros avantage de Sqlite, mais l’avantage de ma méthode est que je peux stocker un article par fichier texte contrairement à Sqlite qui me ferait stocker tous mes articles dans le même fichier base de données.
chercher un fichier texte dans une BDD ou dans un fichier texte, c’est kifkif. Une BDD c’est … un fichier texte. Avec mySQL (ou n’importe quel SGBDR) tu feras ni plus ni moins que la même chose que prendre les données du fichier.
Bah je suis pas super fort en fonction de recherche/tri/remplacement. (pas qu’en ça d’ailleurs)
En fait, je ne comprends pas comment utiliser la fonction que tu donnes pour récupérer par exemple le titre de mon texte qui est stocké dans [titre] et [/titre] dans ma variable $art. (je me doute bien que tu n’as pas utilisé mes noms de variable, mais justement, j’ai modifié ce que je pensais devoir modifier, mais visiblement, j’ai rien compris parce que je n’ai jamais de retour. :s
P.S.: Par contre, si tu connais une meilleur façon de parser un doc, le plus rapidement possible, je suis toute ouïe. :oui: J’ai chercher sur le ouaib, mais je trouve rien de mieux qu’eregi.
ouaip, entre temps, je suis passé au file_get_contents, effectivement.
Mais pour le preg_replace, ça sert à remplacer non ?
Moi ce que je veux, c’est pas un remplacement, c’est juste une lecture du fichier qui me dirait ce qu’il y a entre les balises, par exemple, [titre]super titre[/titre].
$titre=MaSuperFonctionRapideQueJeNeTrouvePas($recupfichier);
Enfin, remarque, ça marche impect avec eregi, mais ça me parait lent à la visu, online, ça passe, mais en local, ça me parait pas super rapide.
Ce sera plus rapide qu’une eregi ?
(Je te demande car si oui, j’ai une trentaine de ligne à modifier, alors je préfère demander avant. :D)
P.S.: Sinon, en local, c’est un serveur Windows (par contre, quand je dis en local, c’est en réseau local mais pas sur mon ordi), c’est peut-être pour ça, cela dit, c’est la première fois que j’ai un temps d’attente.
+2 pour mettre tout en base donnée avec des champs voir des tables differente pour chaque partie de doc
conclusion : +3 xml en base donnée
ps : c pas exactement pareil de chercher dans un fichier que dans une base because le sgbdr essaye d’optimiser les acces de maniere global (cad dir dans ton cas pour plusieurs articles …) du coup un article fortement solicité risque d’etre en memoire vive…
remarque avec certaine os, le fichier aussi peut etre en memoire vive
la gestion de l’acces a la donnée sera quand meme meilleur dans une base ! (index, index full text, etc)
Bon, j’ai trouvé un système qui relève de l’instantanée et qui arrange tout le monde.
J’ai fait un fichier article-0.txt avec les params et un article-x.txt par page.
Niveau BDD, j’imagine bien qu’elles sont gérés dans des fichiers puisque je fais la sauvegarde direct de ses fichiers régulièrement, mais elles évitent l’appel au serveur de base de données et vu qu’on peut lire partout que le principal avantage de sqlite sur MySQL c’est justement qu’elle n’oblige pas l’accès à un serveur de BDD mais juste un accès à un fichier, l’accès direct doit être plus rapide.
En tout cas, là c’est bon, avec ma méthode, je fais juste un file_get sur mes paramètres et sur la page à afficher et on retombe dans l’instantanée, je m’en sors bien et je me rends compte que même au niveau de l’édition d’une seule page, c’est plus simple, c’est tout bénef, je vous remercie de vos conseils.
P.S.: Le preg marchait très mal parce qu’il m’obligeait à passer d’abord par un nl2br().