[Plugin]Maintenance

Jerry WhamJerry Wham Member
octobre 2013 modifié dans Plugins
Ce petit plugin vous permet de mettre votre site en maintenance pour vos visiteurs mais de le laisser visible pour celui qui active le plugin (plus précisément pour l'adresse ip que l'on souhaite).

Avant d'activer la maintenance, il faut configurer le plugin : titre, favicon, css et contenu html (celui entre les balises body).

Vérifiez bien les droits sur le fichier .htaccess à la racine du site (et faites-en une sauvegarde par la même occasion, surtout lors de la première utilisation, on ne sait jamais).
Normalement, l'ancien htaccess est sauvegardé (renommé en htaccess.txt) lors de l'activation de la maintenance et restauré à la désactivation.

Petite précision : le plugin fonctionne pour toutes les versions de pluxml (du moins, celles qui acceptent les plugins).

Enjoy. :P

Historique :

06/10/2013 : v1.0
07/10/2013 : v1.1 : Vérification du fichier htaccess avant modification, Pré-configuration à l'activation du plugin, corrections mineures diverses.

Réponses

  • Très très bon plugin Jerry, merci :)
  • StéphaneStéphane Member, Former PluXml Project Manager
    Salut Jerry
    Chez moi l'adresse ip n'est pas sauvegardée dans le fichier de maintenance.xml

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Jerry WhamJerry Wham Member
    octobre 2013 modifié
    Il faut entrer celle qui est indiquée au dessus du formulaire. L'as-tu fait ?
    Je ne l'ai pas mise par défaut car il peut arriver que l'on active la maintenance et que l'on bosse ensuite à partir d'un autre poste. Dois-je la mettre par défaut ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    Oui oui bien sur j'ai saisi l'ip , seulement elle n'est pas enregistrée dans le fichier. J'ai édité le fichier xml la zone reste vide

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Là je ne comprends pas trop ce qui se passe. Dans le fichier admin, j'ai :
    if(!empty($_POST)) {
    	$old = $plxPlugin->getParam('maintenance');
    	if ($_POST['maintenance']==1 && $old == 0) {	
    		$plxPlugin->setParam('ip', $_POST['ip'], 'cdata');
    		$plxPlugin->setParam('maintenance', $_POST['maintenance'], 'numeric');
    		$plxPlugin->saveParams();
    		$plxPlugin->mkhtaccess();
    	}elseif($_POST['maintenance']==0 && $old == 1) {
    		$plxPlugin->setParam('ip', $_POST['ip'], 'cdata');
    		$plxPlugin->setParam('maintenance', $_POST['maintenance'], 'numeric');
    		$plxPlugin->saveParams();
    		$plxPlugin->delhtaccess();
    	}
    	header('Location: plugin.php?p=maintenance');
    	exit;
    }
    

    Chez moi, l'enregistrement se fait bien.
    Les autres paramètres s'enregistrent ou pas (maintenance par exemple, il est égal à 0 ou 1) ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    Apres une installation, dans le fichier admin.php tu fais référence au paramètre "maintenance" qui n'existe pas dans maitenance.xml
    Comme il n'existe pas, la variable $old = '';
    Apres dans les tests tu as $old == 1 ou $old == 0
    donc tu ne passeras jamais dans le if et dans le else
    voilà pourquoi ip n'est pas sauvegardé

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Jerry WhamJerry Wham Member
    octobre 2013 modifié
    Oui, mais en php, 0, '' ou null n'est-il pas souvent interprété de façon identique, sauf si tu as une stricte égalité (===) ?

    Je me suis fait la réflexion avant de te répondre précédemment et j'ai fait le test (en supprimant les lignes correspondantes dans le fichier xml de paramètres). Et l'enregistrement s'est bien fait.

    Je vais quand même modifier les sources. Tu pourras me dire si ça change quelque chose ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    Jerry Wham a écrit:
    Oui, mais en php, 0, '' ou null n'est-il pas souvent interprété de façon identique, sauf si tu as une stricte égalité (===) ?

    non: if ($test=='') ou if($test==0) ce n'est pas du tout la meme chose (et heureusement)

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Jerry WhamJerry Wham Member
    octobre 2013 modifié
    Stéphane a écrit:
    Jerry Wham a écrit:
    Oui, mais en php, 0, '' ou null n'est-il pas souvent interprété de façon identique, sauf si tu as une stricte égalité (===) ?

    non: if ($test=='') ou if($test==0) ce n'est pas du tout la meme chose (et heureusement)
    Oui mais non : fais ce test :
    <?php 
    $test = '';
    if ($test=='') {
    	echo 'ici'."\n";
    }
    
    if($test==0) {
    	echo 'l&aacute;'."\n";
    }
    
    if($test==null) {
    	echo 'et l&aacute;'."\n";
    }
    
    $test = 0;
    if ($test=='') {
    	echo 'ici'."\n";
    }
    
    if($test==0) {
    	echo 'l&aacute;'."\n";
    }
    
    if($test==null) {
    	echo 'et l&aacute;'."\n";
    }
    
    
    $test = null;
    if ($test=='') {
    	echo 'ici'."\n";
    }
    
    if($test==0) {
    	echo 'l&aacute;'."\n";
    }
    
    if($test==null) {
    	echo 'et l&aacute;'."\n";
    }
     ?>
    
    Ça te retourne
    ici là et là ici là et là
    
  • Jerry WhamJerry Wham Member
    octobre 2013 modifié
    Jerry Wham a écrit:
    Stéphane a écrit:
    Jerry Wham a écrit:
    Oui, mais en php, 0, '' ou null n'est-il pas souvent interprété de façon identique, sauf si tu as une stricte égalité (===) ?

    non: if ($test=='') ou if($test==0) ce n'est pas du tout la meme chose (et heureusement)
    Oui mais non : fais ce test :
    <?php 
    $test = '';
    if ($test=='') {
    	echo 'ici'."\n";
    }
    
    if($test==0) {
    	echo 'l&aacute;'."\n";
    }
    
    if($test==null) {
    	echo 'et l&aacute;'."\n";
    }
    
    $test = 0;
    if ($test=='') {
    	echo 'ici'."\n";
    }
    
    if($test==0) {
    	echo 'l&aacute;'."\n";
    }
    
    if($test==null) {
    	echo 'et l&aacute;'."\n";
    }
    
    
    $test = null;
    if ($test=='') {
    	echo 'ici'."\n";
    }
    
    if($test==0) {
    	echo 'l&aacute;'."\n";
    }
    
    if($test==null) {
    	echo 'et l&aacute;'."\n";
    }
     ?>
    
    Ça te retourne
    ici là et là ici là et là ici là et là
    

    Par contre, si tu teste l'égalité stricte (===) alors là le résultat est différent :
    <?php 
    $test = '';
    if ($test==='') {
    	echo 'ici'."\n";
    }
    
    if($test===0) {
    	echo 'l&aacute;'."\n";
    }
    
    if($test===null) {
    	echo 'et l&aacute;'."\n";
    }
    
    $test = 0;
    if ($test==='') {
    	echo 'ici'."\n";
    }
    
    if($test===0) {
    	echo 'l&aacute;'."\n";
    }
    
    if($test===null) {
    	echo 'et l&aacute;'."\n";
    }
    
    
    $test = null;
    if ($test==='') {
    	echo 'ici'."\n";
    }
    
    if($test===0) {
    	echo 'l&aacute;'."\n";
    }
    
    if($test===null) {
    	echo 'et l&aacute;'."\n";
    }
     ?>
    
    Résultat
    ici là et là
    
    C'est les joies de php
  • StéphaneStéphane Member, Former PluXml Project Manager
    En effet... ^^

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Sinon, ça a changé quelque chose ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    avec ce code les tests sont ok
    if(!empty($_POST)) {
    	$old = intval($plxPlugin->getParam('maintenance'));
    	if($_POST['maintenance'] AND !$old) {
    		$plxPlugin->setParam('ip', $_POST['ip'], 'cdata');
    		$plxPlugin->setParam('maintenance', $_POST['maintenance'], 'numeric');
    		$plxPlugin->saveParams();	
    		$plxPlugin->mkhtaccess();
    	}
    	elseif(!$_POST['maintenance'] AND $old) {
    		$plxPlugin->setParam('ip', $_POST['ip'], 'cdata');
    		$plxPlugin->setParam('maintenance', $_POST['maintenance'], 'numeric');
    		$plxPlugin->saveParams();	
    		$plxPlugin->delhtaccess();
    	}
    	header('Location: plugin.php?p=maintenance');
    	exit;
    }
    

    Sauf que maintenant quand je passe en mode maintenance et que j'ai mis l'ip de ma machine, je suis redirigé sur la page de maintenance et je ne peux plus rien faire (impossible de sortir du mode maintenance: plus d'accès à l'admin)

    Autre remarque: supprimer brut de fonderie le fichier .htaccess sans faire des controles sur son contenu, vaut mieux pas faire de fausses manips, le risque est de supprimer le vrai htaccess. Tu pourrais vérifier par exemple avant de le supprimer que ton code de maintenance est bien présent (ou un mot clé genre : #maintenance)

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Merci pour ce plugin. Utile lors des mises à jour...
  • Stéphane a écrit:

    Sauf que maintenant quand je passe en mode maintenance et que j'ai mis l'ip de ma machine, je suis redirigé sur la page de maintenance et je ne peux plus rien faire (impossible de sortir du mode maintenance: plus d'accès à l'admin)

    C'est que l'adresse entrée n'est pas la bonne. Si tu es chez toi, derrière une box, c'est l'adresse de la box qu'il faut entrer (pas celle en 192.168...) pas celle de ton poste.
    Stéphane a écrit:
    Autre remarque: supprimer brut de fonderie le fichier .htaccess sans faire des controles sur son contenu, vaut mieux pas faire de fausses manips, le risque est de supprimer le vrai htaccess. Tu pourrais vérifier par exemple avant de le supprimer que ton code de maintenance est bien présent (ou un mot clé genre : #maintenance)

    Oui, c'est vrai, j'y avais pensé mais je ne savais pas trop comment faire (je teste juste si le fichier d'origine a bien été renommé en htaccess.txt). Il suffisait que je regarde un peu mieux les sources de pluxml.

    Je modifierai ça ce soir.
  • StéphaneStéphane Member, Former PluXml Project Manager
    pourquoi ça serait l'adresse de ma box ? je suis en local avec le serveur sur ma machine. L'adresse ip proposé est 127.0.0.1. Ce qui me va bien puisque mon serveur est en localhost. Bon c'est pas trop grave si ça marche pour tout le monde.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Merci Jerry pour ce plugin qui est indispensable je pense pour des raisons de sécurité lors de mise à jour.
    Je pense qu'il serait en effet mieux de l'intégrer en natif pour ces raisons notamment.

    Après je ne suis vraiment pas partisan de gérer uniquement par htaccess, de plus en plus de personnes s'autohéberge est n'utilise donc pas systématiquement apache.

    Mais c'est une bonne piste ;)
  • StéphaneStéphane Member, Former PluXml Project Manager
    Frédéric a écrit:
    Après je ne suis vraiment pas partisan de gérer uniquement par htaccess, de plus en plus de personnes s'autohéberge est n'utilise donc pas systématiquement apache.

    +1

    c'est pour cela que cela ne sera pas en natif et restera en plugin.
    en plus le mod_rewrite n'est pas forcément actif chez tous les hébergeurs.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • FrédéricFrédéric Member
    octobre 2013 modifié
    Mais on peux le gérer avant buffeurisation de sortie Stéphane avec un paramètre en configuration faire le test sur celui-ci.
    On a nul besoin de modifier le htaccess pour cette option je pense.
    Et pour moi ce mod touche au core de pluxml donc a mettre en natif pour avoir un meilleur controle en cas de maj de PluXml
  • Jerry WhamJerry Wham Member
    octobre 2013 modifié
    @ Stéphane : j'ai modifié les vérifications avant modification du htaccess. Tu peux me dire si c'est mieux ?
    @ Frédéric : Le problème est que si tu modifies les fichiers de pluxml, ta redirection vers le fichier de maintenance ne tiendra plus. Là, on a un fichier htaccess (certes pas fonctionnel partout) et un fichier workinprogress.php que l'on ne devrait pas écraser lors d'une mise à jour (le fichier htacess sera écrasé à la toute fin). Ce système est quasi indépendant du fonctionnement de pluxml.

    Ou alors utiliser différemment le fichier d'update ?
  • Ok alors j'active la maintenance et maintenant je fait le test en modifiant le numéro de version de pluxml pour qu'il me lance le script de mise à jour et simule une connexion externe.
    Bingo ca plante ma mise à jour alors que j'ai la redirection de la maintenance active.

    Conclusion justement le plugin et indépendant comme tu le dit Jerry et il faut donc un controle qui se fait lors de la mise à jour (le but initiale sur l'autre discussion il me semble ?).
    Bref c'est un paramètre a ne pas prendre à la légère qui modifie le comportement de Pluxml lors d'une mise à jour et quad des Plugins ?
    A voir même avoir un comportement avec eux pour les désactiver aussi en cas d'update.

    Il fait donc partie de la configuration de PluXml donc il le faut en natif.
  • @Frédéric : tu peux faire s'il te plait la même manip sans mon plugin activé (je parle bien du plugin à désactiver) ? Je pense que ça plantera tout autant...
  • Je te le confirme, et je l'avais justement signaler à Stéphane de sécuriser sur ce point avec une maintenance, la coïncidence veut qu'un membre et lancé ce sujet... :)
  • Tu me confirme quoi ? Que ça plante sans mon plugin ?
Connectez-vous ou Inscrivez-vous pour répondre.