Allez, c'est parti... Pour réaliser ce site j'ai dû me creuser un peu la tête pour résoudre un certain nombre de problèmes et développer des solutions pour y répondre, autant que celà puisse aussi vous servir :) Je lèverai petit à petit le rideau sur les fonctions cachées d'ASP-PHP.net alors... patience !
Automatisme
La maintenance de ce genre de site exige de nombreuses tâches régulières, certaines pouvant être automatisées... comme par exemple :
L'optimisation des tables
L'envoi de statistiques
L'archivage du forum
Le backup de la base de données
... etc...
Alors, un script inclus dans la page d'accueil scanne un certain dossier du site pour vérifier si des tâches sont à réaliser (en se basant sur la date de modification du fichier)... et dès qu'il en trouve une, il inclut le fichier déclenchant ainsi l'exécution de la tâche :
_task.php
<? // AUTOMATE
// Les fichiers de tâche se nomment Nom.periode.php // Accorder les droits d'écriture !
$rep = "task/"; // scanne le dossier $dir = opendir($rep); while ($f = readdir($dir)) { // si c'est un fichier if(is_file($rep.$f)) { // Nombre de jours depuis la dernière modif $modif = (time()-filemtime($rep.$f))/(24*3600); // La tâche à exécuter tous les x jours $periode = explode(".",$f); $periode = (int) $periode[1]; // La période est valide ? if(!$periode) continue; // Exécuter la tâche ? if($modif>$periode) { // Modifie le fichier $inF = @fopen($rep.$f,"a"); @fputs($inF," "); @fclose($inF); include($rep.$f); // exécute la tâche break; // le suivant fera la prochaine :) } } } closedir($dir); ?>
Exemple de tâche simple
Afin d'améliorer les performances globales du site, certaines tables doivent être optimisées chaque jour, alors...
optimize_bd.1.php
<? // Tâche d'optimisation de la BD
// include("../_conn.php") // Ouverture de la connexion à la BD
// Un mail est envoyé automatiquement au Webmaster // pour lui confirmer l'exécution de la tâche mail("didier@asp-php.net","Tables optimisées","","From: task@asp-php.net\n");
?>
A noter, la connexion à la BD et la déconnexion sont réalisées ailleurs dans le script global des pages... elles sont donc désactivées dans ce script.
Exemple de tâche complexe
Le backup des tables est un processus fastidieux... alors voilà comment je fais pour les recevoir régulièrement zippées dans ma boîte email :)
// include("../_conn.php") // Ouverture de la connexion à la BD
$res = mysql_query("SELECT * FROM $table"); // le nombre de champs de la table $champs = mysql_num_fields($res); // Pour chaque ligne while($val=mysql_fetch_array($res)) { $tmp = "INSERT INTO $table VALUES("; $c=0; // Pour chaque champ while($c < $champs) { // Une virgule sauf au premier if($c>0) $tmp .= ","; // Le contenu du champ $tmp .= "'".AddSlashes($val[$c])."'"; // Caractères spéciaux $tmp = str_replace("\r","\\r",$tmp); $tmp = str_replace("\n","\\n",$tmp); $tmp = str_replace("//","\/\/",$tmp); $c++; } $tmp .= ")\n"; // Ecrit la ligne fputs($f2,$tmp); } fclose($f2);
// mysql_close(); // Fermeture de la connexion
// ZIP DU FICHIER
include("../zip.lib.php"); // Compresse le fichier $zipfile = new zipfile(); $zipfile -> addFile(implode("",file($fname)), $fname); // Sauve le zip $f2=fopen($fname.".zip","w"); fputs($f2,$zipfile -> file()); fclose($f2);
// NETTOYAGE
// Détruit le fichier initial // mais laisse le zip au cas où... unlink($fname);