Général
- Présentation
- Les Symboles
- Les Métacaractères
- Les Ancres et Classes
- Les options
- Constantes prédéfinies
- Equivalences
- Créer un motif
- Les POSIX
- Les PCRE
- Les Plus des PCRE
- Les Assertions Part I
- Les Assertions Part II
- Motif conditionnel
- Mysql et les regex
- Url Rewriting
- Optimisation
- Aide mémoire
Les PCRE
Les POSIX
Pratique
Linux
Spécial php
- Conseils et Astuces
- Délimiteur PCRE
- Créer une bdd
- Utiliser du BBcode
- Le binaire
- Faire un panier
- Cases à cocher
- Citations imbriquées
- Colorateur syntaxique
- Les list-box ou combo-box
- Faire un diaporama
- Isset ou empty ?
- Une légende au survol
- Site en plusieurs langues
- Requêtes dynamiques
- Gestion des smiley
- Faire un moteur de template
- Timestamp php/mysql
- Timestamp mysql
- Matcher une adresse email
- Controler des données
Les billets de fred
- Les POSIX... mise en pratique !
- Limiter l'accès à un répertoire
- Alternance de couleurs
- Magic_quotes
- Désactiver les short_tags
- Require ou include : Bench
- Cohérence dans les chaines de caractères
- "echo" : lapin ou tortue ?
- Gérer un formulaire avec plusieurs boutons
- Le formulaire a t'il été soumis ?
- J'ai décidé de grossir
- La guerre des étoiles
- La guerre des boutons
- Headers already sent
- IP, IP, IP, houra !
- Créer un itérateur avec PHP5
- On vous conduit vers la lumière
- Comment utiliser MySQL avec PHP
- Non aux booléens !
- Php.ini : dist /recommended
- Include : gouffre ou fêlure ?
- Simple comme les sessions !
- Simplifier le traitement des erreurs
- Structurez vos applications
- Franchement, t'es trop for !
- Notice: Undefined variable (ou index)
- Proscrire les variables auto déclarées
URL Rewriting et mise en cache
Il est possible d' utiliser le MOD_Rewrite d' Apache pour servir un petit système de cache. Le principe est simple ...Il consiste uniquement à verifier qu' une page en cache (statique) existe bien, et dans ce cas, réecrire l'URL vers cette page statique, ou si elle n' existe pas, un script PHP est appelé pour la regénérer.
Il suffit alors d'appeler régulierement un garbage collector pour faire le ménage et forcer la reconstruction du cache. Une tache CRON exécutée au rythme de votre choix est tout indiquée dans ce cas la.
Précisions
Tous nos fichiers statiques (cache) seront stockés dans le meme repertoire que le script. Ils porteront le nom : accueil.html.cache par exemple pour la page d' accueilOn prendra comme exemple un système de pseudo frames.
On utilisera donc les urls du style :
- http://votresite.com/accueil.html
- http://votresite.com/source.html
- http://votresite.com/autre.html
vers
- http://votresite.com/frames.php?page=accueil
- http://votresite.com/frames.php?page=source
- http://votresite.com/frames.php?page=autre
... en prenant bien soin de réécrire l'URL vers le fichier statique, en cache, s'il existe, c'est le role du fichier .htaccess suivant :
1) Le fichier .htaccess
On vérifie que la page statique, en cache, existe, et on l'appelle, sinon on appelle le script PHP chargé de la regénérer.<?php
RewriteEngine on
# On vérifie que le fichier en cache existe
RewriteCond %{REQUEST_FILENAME}.cache -f
# La condition est vérifiée
# On réécrit donc l URL vers ce fichier statique
RewriteRule ([^.]+).html$ /$1.html.cache [L]
# La condition précédente n' a pas été exécutée , le fichier cache n'existe donc pas
# (elle comportait le flag [L] qui aurait mis fin a l exécution)
# Il n existe pas : on apelle le script PHP chargé le regénérer
RewriteRule ([^.]+).html$ /page.php?page=$1 [L]
?>
2) Un exemple de la page frames.php
Un simple système de pseudo frames classique, auquel on a ajouté une capture de flux (fonctions ob_*) avec enregistrement dans un fichier cache, puis finalement affichage.<?php
// dossier qui stocke le cache
$dir_cache = './';
// début de la mise au tampon
ob_start();
// --------------------------------
// votre code HTML de début de page
// --------------------------------
switch($_GET['page']) {
case 'source' :
echo 'page source : '.date('H:i:s')
break;
case 'autre' :
echo 'autre page : '.date('H:i:s');
break;
case 'accueil' :
default :
echo 'page d accueil : '.date('H:i:s');
$_GET['page'] = 'accueil';
break;
}
// -------------------------
// suite et fn de votre page
// -------------------------
// écriture du tampon dans un fichier cache
$fp = fopen($dir_cache.$_GET['page'].'.html.cache', 'w+');
fwrite($fp, ob_get_contents());
fclose($fp);
// Affichage du tampon
ob_end_flush();
?>
3) Regénérer le cache
Voici un exemple de script PHP pour forcer la reconstruction du cache.On efface tous les fichiers en cache.
Vous pouvez par exemple apeller ce script a l' aide d' une tache CRON chaque nuit.
... Rien ne vous empeche d'améliorer cette reconstruction du cache, en forcant le recalcul de la page de votre choix à la demande, et uniquement celle la !
<?php
$dir_cache = './';
$handle=opendir($dir_cache);
while ($file = readdir($handle)) {
$path = $dir_cache.$file;
if (substr(strrchr($path, '.'), 1) === 'cache' ) {
@unlink($path);
echo $path.' supprimé <b />';
}
}
closedir($handle);
?>
Je tiens à remercier tout particulièrement Fabrice Lezoray pour ses informations sur l'url-rewrite qui m'ont permis de réaliser cette partie spécifique.
