TutorielsVous débutez ? C'est ici qu'on commence !
Mon compte
Recherche
Livre d'or
PublicitéVous devez être inscrit pour pouvoir poster des messages
| Page : 1 2 Suivante | |
| Pseudo | Commentaire |
|---|---|
| Page : 1 2 Suivante | |
MS-DOS_1991
|
# Posté le 22/11/2006 à 17:35:06 - Ce membre a mis la note : 18 |
www.newbie-project.net![]() Groupe : Membres |
Très bon tuto , tu expliques bien, en détaillant et en commentant tes codes
Je n'avais jamais pensé à faire mon script de cache comme cela, et c'est vrai que ça semble assez performant pour faire tourner un forum
18 / 20
|
Jeremie78
|
# Posté le 23/11/2006 à 16:21:07 - Ce membre n'a pas mis de note |
|
Powered by GNU/Linux Groupe : Membres |
Citation : Pas de titre get_cache(nom_cache)
J'ai moi aussi fait mon propre système et j'ai mis le même pour cette fonction
ça doit être commun parce que c'est pas la première fois que je le voit
par contre moi j'ai mes fonctions de cache et même si je peut pas supprimer un fichier (cette fonction ne me sert pas) je trouve mes fonctions plus poussée au niveau des paramètres : Code : PHP // MISE EN CACHE
function cache_data($nom_fichier, $data, $ouverture='w+') { $handle = fopen('cache/' .$nom_fichier. '.cache', $ouverture); fwrite($handle, $data); fclose($handle); } // récupérer le cache function get_cache($nom_fichier, $ouverture='r', $modeLigneALigne=false) { $handle = fopen('cache/' .$nom_fichier. '.cache', $ouverture); // le fichier n'existe pas => on le créé if(!$handle) { $handle = fopen('cache/' .$nom_fichier. '.cache', 'a'); } // mode ligne à ligne if($modeLigneALigne == true) { $fichier = null; $nb_lignes = 0; while(!feof($handle)) { $fichier []= fgets($handle, 4096); $nb_lignes++; } fclose($handle); $RETURN = array($fichier, $nb_lignes); } else//mode normale { $fichier = null; while(!feof($handle)) { $fichier .= fgets($handle, 4096); } fclose($handle); $RETURN = $fichier; } return $RETURN; } Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ... |
MS-DOS_1991
|
# Posté le 23/11/2006 à 17:44:29 - Ce membre a mis la note : 18 |
www.newbie-project.net![]() Groupe : Membres |
Perso, j'ai un peu remanié le code en en faisant une classe, pour ne plus supprimer le fichier de cache mais tout simplement le vider puis réécrire dedans :
Code : PHP <?php
class Cache { public function exists ($cache_filename) { return (is_file(QC_APP_PATH.'/inc/cache/'.$cache_filename.'.cache.php')) ? true : false; } public function getDataFromFile ($cache_filename) { include (QC_APP_PATH.'/inc/cache/'.$cache_filename.'.cache.php'); return $cache_content; } public function createFile ($cache_filename, $cache_content) { $cache_content = serialize($cache_content); $cache_content = str_replace(array('\\', '\'', "\0"), array('\\\\', '\\\'', '\\0'), $cache_content); $cache_content = '<'.'?php $cache_content = unserialize(\''.$cache_content.'\'); ?'.'>'; $cache_file = fopen(QC_APP_PATH.'/inc/cache/'.$cache_filename.'.cache.php', 'w'); fwrite($cache_file, $cache_content); fclose($cache_file); } } ?> on l'utilise comme ceci: Code : PHP if (!$Cache->exists('name_of_the_data'))
{ /** Execute SQL Queries and parse everything to an object / array **/ $my_data = $MyClass->getSomeSQLData(); /** Create the cache file, which will be used for any following query **/ $Cache->createFile('name_of_the_data', $my_data); } else $my_data = $Cache->getDataFromFile('name_of_the_data'); var_dump($my_data); ... et ça roxxe niveau rapidité
edit: ne vous occupez pas de la constante QC_APP_PATH, disons juste qu'elle contient le chemin absolu vers la racine de votre site
|
Jeremie78
|
# Posté le 24/11/2006 à 17:55:24 - Ce membre n'a pas mis de note |
|
Powered by GNU/Linux Groupe : Membres |
Je suis un peu sceptique fasse à l'utilité d'une classe pour un système de cache
L'intérêt est il me semble assez limité et il est même plus long d'utiliser (pas de faire tourner) ta classe pour récupérer/écrire dans un fichier. Pour ce point là, il me semble que de simple fonctions suffisent
Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ... |
MS-DOS_1991
|
# Posté le 24/11/2006 à 20:01:27 - Ce membre a mis la note : 18 |
www.newbie-project.net![]() Groupe : Membres |
J'en ai fait une classe tout d'abord pour rendre mon code plus "lisible" : if ($Cache->exists) se lit très bien en anglais normal comme "si le cache existe"), mais aussi afin de pouvoir éventuellement rajouter d'autres méthodes aisément plus tard, quand j'aurai besoin par exemple d'alterner celui-ci avec un autre type de cache (à durée de vie par exemple)
|
docteur.night
|
# Posté le 25/11/2006 à 17:45:17 - Ce membre n'a pas mis de note |
jamais 203, alors 204 !![]() Groupe : Membres |
Le but de ce tutorial est d'expliquer une façon de faire un système de cache simplement. Ensuite on peut le mettre à toutes les sauces, ça dépend de ce qu'on veut en faire .
|
DexteR
|
# Posté le 12/01/2007 à 23:20:44 - Ce membre a mis la note : 19 |
teR ... DexteR![]() Groupe : Membres |
19/20 car les codes sont propres et clairement expliqués, merci grace a toi je vien d'en apprendre encore plus sur PHP ...
DexteR
N'allez pas voir mon site se n'est que des tests... |
jojolapine
|
# Posté le 09/03/2007 à 14:40:05 - Ce membre a mis la note : 16 |
![]() Groupe : Membres |
Bonjour,
J'ai bien aimé le tuto...! Il est clair explicite, très bien! je met 16/20 Mais j'aimerai aussi montrer qu'il y a une autre façon de voir un sytème de cache... Le principe reste le même sur les fichiers (si le fichier existe ben on le lit sinon on va chercher les infos...) Seulement, dans le fichier, je ne stocke pas des données php, mais du code généré... Pour ce faire, je me sert de la bufferisation... bref voici ma classe:Code : PHP <?php /** * Classe cache * Gestion d'un système de cache * * * Exemple d'utilisation : * <?php * include('cache.class.php'); * $cache = new cache('cachetest'); * * $cache->initCache(); * * echo microtime(); * * $cache=null; * ?> * * @author Joris Mulliez * @package Cache */ class cache{ /** * Dossier où l'on stocke les fichiers de cache */ const DOSSIER='./'; /** * Extension des fichiers */ const EXTENSION='.cache.html'; /** * Nom du fichier traité */ private $file=null; /** * Constructeur * * prend en paramètre le nom du fichier *.php, sans l'extension .php * @param String $file * @return void */ public function __construct($file){ $this->file=$file; } /** * Fonction initCache * Si le fichier de cache correspondant ) $this->file existe, on l'inclu, et on arrête tout * sinon on démarre la temporisation... */ public function initCache(){ if(file_exists(self::DOSSIER.$this->file.self::EXTENSION)){ readfile(self::DOSSIER.$this->file.self::EXTENSION); exit(); } else { ob_start(); } } /** * Fonction clearCache * supprime le fichier de cache */ public function clearCache(){ if(file_exists(self::DOSSIER.$this->file.self::EXTENSION)) unlink(self::DOSSIER.$this->file.self::EXTENSION); } /** * Fonction _destruct * récupère le fruit de la temporisation et le stocke dans le fichier de cache, puis affiche * le résultat de la page */ public function __destruct(){ $content=ob_get_flush(); file_put_contents(self::DOSSIER.$this->file.self::EXTENSION,$content); } } ?> Code : PHP <?php
include('cache.class.php'); $cache = new cache('cachetest'); $cache->initCache(); // on vérifie si un fichier de cache existe ?, si oui il est inclu, et on stoppe tout... // sinon on récupère la sortie standard et on balance le tout dans un fichier ?> içi on met tout le code html et php que l'on veut... <?php $cache=null; // destruction de l'objet ?> et pour effacer les cache, il suffit d'appeler la méthode cache::clearCache()! qu'est-ce que vous pensez de ce système ? |
docteur.night
|
# Posté le 10/03/2007 à 17:32:03 - Ce membre n'a pas mis de note |
jamais 203, alors 204 !![]() Groupe : Membres |
C'est en effet une autre solution, mais elle ne répond pas forcément aux mêmes besoins. Ta solution doit être légèrement moins lourde, mais celle que je propose permet de faire ce qu'on veut des données mises en cache : je met en cache les données, et ensuite je le met dans du html si besoin etc....
Mais ta solution peut avoir aussi ses intérêt. A chacun de voir en fonction de ses besoins.
|
Gu1ll4um3r0m41n
|
# Posté le 24/03/2007 à 18:26:51 - Ce membre a mis la note : 10 |
|
Groupe : Membres |
Ce genre de systeme n'est pas très "secure"...
(Voir faille sur wordpress dans le systeme de cache ici: ICI) |
Zhenty
|
# Posté le 02/04/2007 à 18:03:03 - Ce membre n'a pas mis de note |
![]() Groupe : Membres |
Juste une petite modification :
Code : PHP foreach ( $donnees as $ligne ) { if($ligne != NULL) { } } Après, j'ai peut-être tord Sinon, 18/20 pour ce tutorial très bien expliqué, et permettant de faire un pas de plus dans l'optimisation de son site.
|
docteur.night
|
# Posté le 03/04/2007 à 10:17:26 - Ce membre n'a pas mis de note |
jamais 203, alors 204 !![]() Groupe : Membres |
Gu1ll4um3r0m41n, ça serait sympa si tu pouvais être plus précis sur la sois-disante faille, parce que pour le moment je ne vois pas.
Zhenty, ta condition avec NULL est inutile, le foreach s'arrete quand il n'y a plus d'éléments. |
Sayrus
|
# Posté le 24/04/2007 à 15:05:04 - Ce membre n'a pas mis de note |
|
Groupe : Membres |
Bonjour,
Comment pourrais-je adapter ce système de mise en cache pour l'utiliser de la manière suivante: Plusieurs news peuvent-être affichées page par page... Comment mettre cela en cache?
Sayrus |
RockBoy83
|
# Posté le 15/05/2007 à 17:28:04 - Ce membre a mis la note : 18 |
![]() Groupe : Bannis |
Salut
Vraiment bien ce tuto, j'ai appris beaucoup de chose et je vais mettre mon propre système pour mon jeu comme sa, je n'utiliserai presque pas la base de donnée que des fichiers en .php
Merci, Je te met un ....8
Voir ici aussi -> Secret (cliquez pour afficher) Mince j'ai oublier le 1 ^^, sa fais 18/20 ![]() Merci, @+ ![]() |
Amrac
|
# Posté le 11/07/2007 à 02:04:11 - Ce membre n'a pas mis de note |
|
Groupe : Membres |
Efficace et facile a mettre en place, le pied
20/20 |
bilou89
|
# Posté le 15/07/2007 à 14:39:28 - Ce membre a mis la note : 20 |
|
Groupe : Membres |
Bonjour,
Tuto court, clair, précis en 20mn je l'ai mit en place sur mon système de news (juste les news pour le moment ).
Je tiens juste à dire que j'ai du rajouter un if ($ligne != NULL) dans le foreach car il me créer une news vide. Je vais maintenant le mettre en place sur mes autres modules .
Un p'tit 20 au passage car ce tuto le mérite vraiment, GG . ![]() |
Bqrt
|
# Posté le 26/08/2007 à 14:15:14 - Ce membre a mis la note : 16 |
La petite rime assassine ....![]() Groupe : Membres |
J'allais utiliser l'autre système de cache, mais celui la me parait plus pratique ![]() Bravo pour ce tuto bien expliqué, par contre je pense que je vais générer des fichiers html, pour soulager aussi le serveur apache, et pas seulement mysql ![]() J'ai essayé aussi avec la bufferisation mais c'est moins "maniable" je trouve. EDIT : en fait j'ai bien compris pourquoi utiliser le php pour ce système de cache, et sa marche remarquablement bien bravo donc, mais les 2 systèmes ont leur utilité, je vais donc utiliser les 2
J'veux pas perdre 1 heure pour l'avenir de mon pays, par contre j'ai voté contre harlem a la star academy (© Le Puzzle) Mon profil Last.fm : http://www.lastfm.fr/user/Bqrt/ |
Zakmaf
|
# Posté le 09/09/2007 à 18:05:51 - Ce membre a mis la note : 18 |
![]() Groupe : Membres |
Même problème que sayrus Sinon je mets 18/20 c'est vraiment trop bien comme tuto ! |
Lynix
|
# Posté le 27/10/2007 à 15:14:06 - Ce membre a mis la note : 16 |
Graphiste 3D![]() Groupe : Membres |
docteur.night : J'ai mis le if ($ligne != NULL) et le problème que j'obtenais a disparu, en effet j'avais une ligne en trop et vide, j'essaye de modifier la mise en cache pour éviter de mettre cette ligne Ha oui, un petit 16 ![]() EDIT : voila, j'ai fait mon code : Code : PHP - Afficher / masquer les numéros de ligne la seule différence se situe au niveau du array_slice, je vais le mettre dans le fonction de cache Utopy Bientot ![]() |
WildKiller
|
# Posté le 08/01/2008 à 19:14:56 - Ce membre a mis la note : 18 |
|
Ya un truc Groupe : Membres |
Bon tuto ![]() Système de cache installé en 1/4 d'heure! Encore bravo (18/20). |
mikaweb
|
# Posté le 11/01/2008 à 21:29:53 - Ce membre n'a pas mis de note |
|
Groupe : Membres |
Bonsoir, j'ai une petite question J'aimerais utiliser ce système avec une pagination donc dans un système ou il y a au moins 2 requetes différentes. Actuellement je n'ai trouvé qu'une parade qui me permet d'économiser une seule requete sur les deux, la seconde requete se fait lors de chaque chargement de page alors que la première, fonctionne impec. Petite économie mais je suis sur que y a moyen de faire encore une meilleur économie Actuellement j'ai quelque chose dans le style : Code : PHP - Afficher / masquer les numéros de ligne
Quel serait le moyen d'optimiser tout ceci ? Utiliser 2 fichiers caches différents ? Edit: Au passage, c'est mieux d'économiser une requete ou bien vu le temps que on cherche les infos dans le fichier en cache sa compense ? C'est mieux de mettre une page complète, ou seulement les requetes ? Je crois que ce tuto, fais la page complète si j'ai bien compris. http://www.siteduzero.com/tuto-3-23720-1-comprendre-et-utiliser-un-systeme-de-cache-php.html Merci
|
docteur.night
|
# Posté le 11/01/2008 à 22:49:44 - Ce membre n'a pas mis de note |
jamais 203, alors 204 !![]() Groupe : Membres |
Sans mettre toute la page en cache, tu peux mettre en cache les données que tu as créées à partir de tes deux requêtes : Toutes les variables que tu as récupérées grâce a ces deux requêtes, tu les met dans un tableau et tu met ce tableau en cache. |
rodulphe
|
# Posté le 17/01/2008 à 16:55:08 - Ce membre a mis la note : 19 |
|
Groupe : Membres |
Rien à dire Tu as tout bien expliqué Merci beaucoup !! |
Savageman
|
# Posté le 25/02/2008 à 23:15:13 - Ce membre n'a pas mis de note |
Insa : If inside![]() Groupe : Membres |
Pas de note, juste un commentaire : Si un utilisateur insère du code PHP dans ton cache, il peut potentiellement te hacker de la même façon qu'avec la faille wordpress ci-dessus. Une autre technique consisterait à faire ceci : Code : PHP - Afficher / masquer les numéros de ligne
|
docteur.night
|
# Posté le 26/02/2008 à 02:18:50 - Ce membre n'a pas mis de note |
jamais 203, alors 204 !![]() Groupe : Membres |
L'utilisateur n'a pas à insérer de code php dans le cache. Le contenu qui est mis en cache doit être valide et sécurisé. C'est au programmeur de bien vérifier que ce qu'il met en cache n'est pas dangereux. Dans l'exemple du tutoriel, les données mises en cache proviennent de la base de données. J'ose espérer que ces données ont déjà été protégées/échappées comme il faut ! |
Savageman
|
# Posté le 26/02/2008 à 13:15:39 - Ce membre n'a pas mis de note |
Insa : If inside![]() Groupe : Membres |
Bah... C'est pas forcément évident que les données de la base de données sont protégées... On les a protégées pour éviter la faille SQL lors de l'insertion en base, mais les données n'ont pas été modifées. En général, on préfère même garder les données comme elles viennent pour une question d'intégrité, et non pas des données déjà modifiées... La protection se fait à l'affichage ensuite. Ensuite, mon code est plus court, plus simple et plus sécurisé, alors je ne vois pas pourquoi s'en priver. :s |
rockraider
|
# Posté le 29/02/2008 à 19:24:06 - Ce membre a mis la note : 19 |
|
Groupe : Membres |
Excellent, super clair, précis, rapide à mettre en place, efficace ! Je te mets (seulement) 19 parce qu'il aurait été judicieux de proposer de mettre un .htaccess en "deny from all" dans le dossier cache pour pas se faire pirater trop facilement les données mises en cache (on télécharge le fichier -> unserialize et c'est foutu) |
docteur.night
|
# Posté le 01/03/2008 à 10:13:29 - Ce membre n'a pas mis de note |
jamais 203, alors 204 !![]() Groupe : Membres |
Si on ne fait pas la modification de Savagement, il n'y a pas besoin d'un .htaccess pour que le contenu ne soit pas accessible. Dans mon système, les fichiers de cache sont en php. On ne peut pas télécharger le contenu d'un fichier php. Tout ce qu'on peut télécharger, c'est ce qu'affiche le fichier php. Ici en l'occurence, il affichera... rien ! ![]() Mais bon un .htaccess avec deny from all est une couche sécurité en plus dira-t-on. |
BkM-
|
# Posté le 18/04/2008 à 14:05:03 - Ce membre a mis la note : 18 |
BrokenKillMaster-![]() Groupe : Membres |
J'ai une petite question: comment fait le site du zéro pour afficher une page différente par page de forum au lieu de forum=25&topic=12? Il met en cache tout le code html de chaque page?! Enfin ça m'étonnerai vu le nombre de pages que ça fait à héberger...J'ai mis 18 sinon
Après le courant, découvrez la connexion alternative. Merci Club Internet! ~ 0.1Mo/s ![]() |
frdemahieu
|
# Posté le 31/05/2008 à 11:22:26 - Ce membre n'a pas mis de note |
Le codex un art un choix. ![]() Groupe : Membres |
Ce serait chouette pour un meilleur visibilité du code mettre les accolade <?php ?>. Sinon très bien fait. Inscrivez-vous à la revue informatique clicpourtous C'est gratuit vert et ils attendent des personnes inscrite !!! Présentation sur le sdz : http://www.siteduzero.com/forum-83-311 [...] rmatique.html Venez vois mes réalisation graphique : http://frdemahieu.skyrock.com |
Vous devez être inscrit pour pouvoir poster des messages
Changer de design |
En savoir plus |
Plan du site |
Politique d'accessibilité |
Règles |
RSS tutoriels |
RSS news
Édité par Simple IT SARL :
Nous contacter
| Notre blog | Revue de presse | Publicité
Y'a plus rien à lire, faut remonter maintenant !
Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.
362 Zéros connectés |
8 requêtes |
0.1167s (0.1017s)
