Créer un système de maintenance
Il se peut, pour corriger des bugs ou mettre à jour un forum que vous vouliez mettre votre site en "maintenance" pour que vous seul puissiez y avoir accès.

Pour ce faire, il va falloir créer deux fichiers:
-la page de maintenance que tous les visiteurs verront
-une page d'administration pour lancer/arrêter la mainteance.

Le script


Le principe de ce script est qu'il vérifie si le fichier "maintenance.txt" existe. Si oui, il redirigera le visiteur vers la page "maintenance.php".
Commençeons d'abord par une petite condition qui devra être mise sur toutes les pages de votre site. La voici:

if(is_file('maintenance.txt')){
header("Location:maintenance.php");
}

Cette petite condition va vérifier si le fichier "maintenance.txt" existe (la fonction is_file regarde si son argument est un fichier) et, si c'est le cas, rediriger le visiteur vers la page de maintenance.
Le problème est que tous les visiteurs, vous y compris serez redirigés vers la page de maintenance.
Pour régler ce problème, il va falloir rajouter une condition. Pour vous identifier en tant qu'admin, vous aurez un cookie nommé "admin_maitenance". Il suffit donc de vérifier s'il existe.
Voici le code complet de la condition:

if(is_file('maintenance.txt') && !isset($_COOKIE['admin_maintenance'])){
header("Location:maintenance.php");
}

De cette manière, vous ne serez redirigés que si vous ne possédez pas le cookie "admin_maintenance". Comme il sera automatiquement créé lorsque vous lancerez la maintenance, vous seul aurez accès au site alors que les autres visiteurs seront redirigés vers la page de maintenance.

La page de maintenance


Vous pouverz mettre ce que vous voulez sur cette page. Il est seulement conseillé de mettre cette petite condition:

if(!is_file('maintenance.txt')){
header("Location:index.php");
}

Cette condition ne sert qu'à empècher que la page soit visités si la maintenance n'est plus activée.
Voici à quoi doit donc ressembler votre fichier "maintenance.php":

<?php
if(!is_file('maintenance.txt')){
header("Location:index.php");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Page de maintenance</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
VOTRE PAGE DE MAINTENANCE
</body>
</html>


La page d'admin


Nous rentrons a présent dans le vif du sujet, la page d'admin.
Cette page sera assez simple. Il suffit en effet de lancer ou d'arrêter la maintenance; quelques conditions et le tour est joué. L'action que vous souhaitez faire étant passée en GET, donc par l'URL de la page.
Commenceons:

<?php
if(isset($_GET['action'])){
/*Si la variable $_GET['action'] existe, l'admin a choisi de faire quelque chose!*/
$action = $_GET['action'];
//Changement de variable pour y voir plus clair
       
  if($action == 'activer'){
   if(!is_file('maintenance.txt')){
    if(fopen('maintenance.txt', 'w+')){
        /*Si le fichier a été correctement créé (ouverture et création [w+]), tout va bien sinon, on
        affiche un message d'erreur*/

        setcookie('admin_maintenance', 'Cookie admin', time()+365*24*3600);
        //Création du cookie d'admin
       
        echo'La maintenance a été activée avec succès!';
        //Petit message pour dire que tout est OK!
       
        fclose('maintenance.txt');
        //Fermeture du fichier ouvert
        }
        else{
        echo'Une erreur est survenue lors du lancement de la maintenance';
        //Si la maintenance a échoué, petit mot d'explication
        }
}//Fin du if "!is_file"
else{
echo'<b>Erreur: </b>la maintenance est déjà activée!';
//Si le fichier existe, on ne peut pas activer la maintenance.
}
}//Fin du if "activer"


Il faut maintenant tester si l'admin sohaite retirer le site de la maintenance.

Comment faire pour supprimer le fichier "maintenance.txt"?

Grâce à la fonction unlink(); qui permet de supprimer un fichier.
Il faut aussi penser à supprimer le cookie d'admin en en créant un portant le même nom mais avec une durée de vie négative.
Allons-y:

elseif($action = 'desactiver'){
        if(is_file('maintenance.txt')){
        //Si la maintenance est activée
                if(unlink('maintenance.txt')){
                setcookie('admin_maintenance', 'Cookies for ever!', -10);
                /*Cookie (avec un contenu idiot) et avec une durée de vie de -10 secondes.*/
               
                echo'Maintenance désactivée avec succès';
                //No problem!
                }
                else{
                echo'Une erreur est survenue lors de la suppression du fichier "maintenance.txt"';
                //Si il y a eu un bug, message d'erreur
                }
        }
        else{
        echo'La maintenance est déjà désactivée!';
        //Si le fichier n'existe pas!
        }
}

La partie d'arrêt de la maintenance n'est qu'une condition "if" contenant d'autres conditions pour parer à toute éventualité. IL reste maintenant le dernier "else" qui, normalement, ne s'exécutera jamais, mais personnes n'est assez prudent.

else{
echo'Comment êtes-vous arrivés ici?  Vous avez piraté le script???';
}
}//Fin du if de "$_GET"

Il ne vous reste plus qu'à faire les liens pour lancer la maintenance:

<a href="admin_maintenance.php?action=activer">Lancer la maintenance</a><br />
<a href="admin_maintenance.php?action=desactiver">Desactiver la maintenance</a>

Voilà, votre système de maintenance est terminé.

N'oubliez pas de changer les liens du code si vos fichiers se trouvent dans un dossier.


Creative Commons License
Sauf mention contraire, le contenu de cette page est sous licence Creative Commons
Page générée en 0.409 secondes.
Retour en haut de la page
Imprimer cette page