as_nightjobs: La classe pour effectuer le travail de maintenance quotidienne d'un site

French translation by P.Gohier


Il ya des actions qui devrait être fait périodiquement sur votre site, comme la suppression des anciens fichiers, l'optimisation des tables de base de données, la vérification complète de la taille du site.

Si votre option d'hébergement est limitée en espace (des personnes ont un hébergement "illimité" ? :), il peut être agréable d'avoir une «prévisions» - combien de temps votre site se développera jusqu'à qu'il atteigne la limite. Cette classe peut aider les administrateurs et les développeurs dans les tâches de maintenance périodique de site: Si il ya des tâches spécifiques, Vous pouvez préparer une fonction d'appel et passer le nom de ces fonctions à la classe, de sorte que ces tâches seront aussi exécutées.

Si le travail est lancé à partir de n'importe quel type d'ordonnanceur (CRON ou autre), un rapport d'exécution peut être envoyé à l'administrateur par courrier électronique. Sinon c'est juste un écho sur l'écran du client.

Installation sur le site

Simple example de code

require_once('as_dbutils.php');
require_once('as_nightjobs.php');

// la connexion MySQL!
$as_dbengine->Connect('localhost','user','password','mydb'); 
$job = new CNightJobs();
$job->SetAdminEmail('admin@mysite.net'); # un rapport sera envoyé à cette adresse
$job->SiteSizeParameters('..', 'sitestatistic', 1000,array('mydb1','mydb2')); # le répertoire de base est "../", limite d'espace - 1 GB
$job->Exec(); # C'est partis !

Utilisation de la class

Tous les travaux de maintenance sont exécutés à partir de la méthode Exec (), de sorte que tous les paramètres nécessaires doivent être précisé en avant l'appel. Si vous ne réglez pas certains paramètres, les actions respectives ne seront pas exécutées.
Voici la liste des méthodes avec leurs descriptions.

CNightJobs($apptitle='') - Le constructeur de classe peut recevoir le titre de votre site. Il ne sera utilisée que dans l'objet du message, qui sera envoyé à l'administrateur après avoir exécuté toutes les tâches.

SetTablesList($tblist, $tblist2=0) - précise la liste de toutes les tables de bases de données utilisées par votre site, qui doivent être sauvegardées et/ou optimisé. Le second paramètre $tblist2 peut être utilisé si vous voulez sauvegarder vos «GRANDES» et «petites» tables de données dans des fichiers séparés. Cela peut être utile lorsque vous décidez de restaurer des données à partir d'une sauvegarde. La restauration à partir de grands fichiers de sauvegarde peut aboutir à un échec à cause du timeout. Dans ce cas, la "liste" de stockage et les petites tables dans des fichiers de sauvegarde séparées est une bonne idée.
Les deux listes seront utilisés dans la fabrication de la procédure de sauvegarde, et dans la fonction "d'optimisation des tables de données".

SetBackupParameters($back_folder, $bckpdays=10,$nobackup=null, $prefix='',$prefix2='') - définit les paramètres de sauvegarde de base de données:
$back_folder Le dossier des fichiers de sauvegarde. Si la chaîne est vide, la sauvegarde ne sera jamais exécutés.
$bckpdays Age des fichiers de sauvegarde. Si non-nul, tous les fichiers de plus de N jours, seront supprimés.(par défaut : 10 jours)
$nobackup Si vous souhaitez optimiser certaines tables, elles sont spécifiées dans $tblist ou $tblist2, mais si vous ne souhaitez pas qu'elles soient sauvegardés, il suffit d'ajouter le ou leur nom(s) dans ce paramètres tableau.
$prefix Préfixe du fichier de sauvegarde, tous les fichiers auront des noms comme {prefix}YYYY-MM-DD.xml.gz
Par defaut : 'db'.
$prefix2 Préfixe pour la seconde liste des fichiers de sauvegarde
Par defaut : 'dblist'.

AddFolderToClean($folder,$mask='',$days=0) - ajoute un dossier pour le processus de "nettoyage"
$folder Dossier à nettoyer. Pas de "/" final nécessaires.
$mask Masque joker de fichier. Chaîne vide est égal à "*.*"
$days Supprimer des fichiers de plus de NN jours. Valeur zéro signifie "tous".

Note: les sous-dossiers ne sont pas traitées. Si vous voulez nettoyer un ou des sous-dossier(s), appellez de cette méthode pour chaque nom de sous-dossier.

AddTableToShrink($tablename, $datefield) - ajoute une table au processus de "retrait" , ce qui signifie la suppression de documents obsolètes. Généralement il peut être utilisé pour la réduction des tables d'audit ou de log.
$tablename nom de la table
$datefield nom du champ timestamp date/datetime qui contient l'enregistrement, ce timestamp sera vérifié


TableShrinkDays($days) fixe l'ancienneté des enregistrements dans les tables à "optimisées". Si vous n'appelez pas cette méthode, 30 jours sera utilisés par défaut.

SetEmailParameters($email,$charset='') définit l'adresse e-mail d'administrateur pour l'envoi de rapport de travail.
Le paramètre facultatif $Charset peut contenir un nom de jeu de caractères valide qui sera utilisé en-têtes de courriers électroniques. Si votre fonction utilisateur retourne certains caractères laucaux, vous devriez passer le jeu de caractères ici. Sinon, il n'est pas nécessaire de le modifier, parce que tous les rapports "standard" ont uniquement le jeu de caractères latin.

SetUserFunction($udf) définit le nom de la fonction, cette fonction sera appelée à la fin du travail de sauvegarde. la chaîne de caractères retournée par cette fonction sera ajoutée au rapport. {to translate} Note that since version 1.01 there are new methods - AppendUserFunction(),PrependUserFunction()

{to translate} AppendUserFunction($udf) adds Your function name to the list that will be executed after the main job block. This method is identical to SetUserFunction(), so SetUserFunction() still here just for compatibility with "old" scripts.

{to translate} PrependUserFunction($udf) adds Your function name to the list that will be executed BEFORE the main job block. If You have your own "shrinking data" functions, it is a good idea to call them before "site growth estimating" procedures executed in the main job block.

SiteSizeParameters($rootfolder, $sitesizetable='',$maxsitesize=0, $dblist=0) établit les paramètres pour le calcul de l'espace occupé par le site - tous les fichiers et les données de la base de données MySQL connectée sur ce site .
$rootfolder une chaine ou un tableau. L'espace occupé par les fichiers dans tous les sous-dossiers seront comptées à partir de ce point de départ. Vous pouvez passer un tableau avec plus d'un dossier, en cas de comptage impossible dossier racine (pas de droits de lecture sur le dossier de base etc)
$sitesizetable Si vous souhaitez accumuler de jour en jour les statistiques du site, passer ici le nom d'une table.
Cette table est généré automatiquement s'i elle n'existe pas dans la base de données actuelle. Assurez-vous que votre nom de table est unique et qu'il n'interferera pas avec d'autres table de la base de données!
Si la table des statistiques est utilisées, la croissance moyenne par jour et pour la dernière période (de jour ou de semaine - en fonction de la fréquence avec laquelle votre programme exécutera le travail de sauvegarde) est calculé et communiqué, et estimé le nombre de jours avant le site soit hors de la limite de l'espace prévu(si la croissance moyenne est positif et que la limite d'espace est défini avec $maxsitesize )
$maxsitesize limite d'espace disque pour votre site, selon plan tarifaire actuel (Mo). Si valeur non nulle, d'autres travaux seront effectués:
sont calculé La croissance moyenne du site et le nombre de jours avant que votre site n'atteingne la limite. Si ce nombre de jours est inférieur à 10, le mot AVERTISSEMENT sera ajouté à l'objet et le corps du texte de l'e-mail. Si la limite est d'ores et déjà dépassé, le mot ALARM sera ajouté.
$dblist Par défaut la somme de l'espace de base de données est calculé pour la base de données actuellement ouverte.
Mais les données de votre site peuvent être dispersés dans de nombreuses bases de données (elles doivent résider dans un SEUL serveur!)
Dans ce cas, vous pouvez passer un tableau avec tous les noms de base de données. Total size contiendra toutes leurs dimensions.


Exec() - Enfin, vous appelez cette méthode pour démarrer tous les travaux de maintenance. Un résumé du rapport est envoyés en écho à l'écran, et envoyés par courrier électronique ( si l'e-mail d'administrateur est définit et le script a été lancé par CRON / scheduler).


Il ya des fonctions "internes" qui sont appellées par Exec (), mais bien sûr, vous pouvez les appeler manuellement si vous savez ce que vous voulez.

  • CleanFolder($folder, $mask='',$days=0) peut être appelés pour supprimer les fichiers dans le dossier spécifié "$folder", en utilisant le masque "$mask"(si le masque est vide, tous les fichiers. Sous la forme de séparateur virgules '*.bak, *.tmp, ...'), âgés de plus de NN jours "$days"(si jour> 0, sinon tous les fichiers)

  • OptimizeTables($tlist='') exécute l'optimisation pour chaque table du tableau $tlist. L'optimisation est faite en appelant les opérateurs MySQL OPTIMIZE TABLE et ANALYZE TABLE.

  • CleanupSessions() supprime des fichiers de session de plus de 1 jour depuis le dossier de SESSION courant. Normalement, le serveur web nettoie les sessions automatiquement, mais parfois cela peut être utile. Cette fonction n'est jamais appelée à partir de Exec ().

  • GetFolderSize($folder) compte et retourne le résumé de l'espace disque de $folder (avec tous les sous-dossiers imbriqués) en octets.

  • Historique des versions

    1.01.002 (04/24/2009)
    {to translate}
    1.00.001 (01/26/2009)
    Distributed under BSD License


    Copyright © Alexander Selifonov, www.selifan.ru