o2switch et path "home"

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • #16
    Et comment va faire l'utilisateur lambda qui se contente de gérer son site, lorsque l'installation d'extensions et les mises à jour planteront faute de dossier "tmp" accessible ?
    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

    Commentaire


    • #17
      Envoyé par RobertG Voir le message
      Et comment va faire l'utilisateur lambda qui se contente de gérer son site, lorsque l'installation d'extensions et les mises à jour planteront faute de dossier "tmp" accessible ?
      Il n'y a pas de problème en "local" càd quand tout se passe sur le serveur lui-même car il fait le rapprochement entre "home", "home3", "home5" etc...
      Si "$tmp_path" indique un chemin vers "home3/..." mais que ça a changé en "home5/..." il n'y aura pas de problème (à part ce ralentissement qu'il me semble avoir constaté, mais ce n'est peut être pas lié) car pour le serveur "home3" ou "home5" correspondent à "home".

      Le problème, comme je le disais, c'est plutôt quand ça vient d'ailleurs, de l'extérieur. D'où mon exemple avec "mysiteguru" qui procède à certaines mises à jour et/ou backup.
      Toutes les erreurs 403 découlent de l'impossibilité de trouver le bon chemin puisqu'il avait changé car, visiblement dans ce cas, le serveur n'assure pas/plus la résolution des alias de "home" (impossible pour "mysiteguru" de savoir que "home3" = "home5" = "home").
      Cela dit, ça n'empêche pas "mysiteguru" de "checker" le site, mais apparemment il ne peut pas faire les màj car l'accès à "$tmp_path" lui est refusé, puisque l'emplacement est jugé comme erroné.
      Dernière édition par dolmenhir à 07/12/2021, 11h45
      Je préfère éclairer que briller.” - “J'ai peut-être l'air froid, mais je suis pas givré.- "ça dépend ça dépasse"
      Ne m'envoyez pas de message privé pour résoudre vos problèmes sans y avoir été invité.
      Dolmenhir : tailleur de site web depuis 1997. Spécialiste Joomla depuis 2005. https://www.dolmenhir.fr

      Commentaire


      • #18
        Envoyé par dolmenhir Voir le message
        j'en aurai bientôt le coeur net : lorsque j'aurai développé mon script.
        ​​​​​​Je suis intéressé par ton retour quand tu seras prêt si c'est possible.
        j'utilise aussi mysites.guru c'est pour ça.
        Expert en conception et réalisation de sites Internet 100% Joomla
        www.toonetcreation.com

        Commentaire


        • #19
          Envoyé par Tortue Genial 69 Voir le message

          ​​​​​​Je suis intéressé par ton retour quand tu seras prêt si c'est possible.
          j'utilise aussi mysites.guru c'est pour ça.
          Voilà un petit algo fait à l'arrache

          Code:
          <?php
          
          function ecriture_chemin_de_reference($filename,$racine) {
          $fichier = fopen($filename, "w");
          fwrite($fichier, $racine);
          fclose($fichier);
          chmod ($filename, 0444);
          }
          
          // 1. récupération du chemin principal
          $docroot = $_SERVER['DOCUMENT_ROOT'];
          $dirname = pathinfo($docroot,PATHINFO_DIRNAME);
          
          // 2. calcul du nombre de niveaux jusqu'au fichier
          $levels = substr_count($docroot,"/");
          
          // 3. on remonte jusqu'au premier niveau, donc au total trouvé -1
          $levelfinal = $levels-1;
          $racine = dirname($docroot,$levelfinal);
          
          // 4. creaton d'un fichier historique de référence - s'il n'existe pas
          $fichier_reference = $docroot.'/racine.php';
          
          if (file_exists($fichier_reference)) // Le fichier de référence existe déjà
          {
          // 4a. on récupère et on stocke la valeur enregistrée
          $racine_de_reference = file_get_contents($fichier_reference);
          }
          else // Le fichier de reference n'existe pas encore
          {
          // 4b. on crée ce fichier pour la toute première fois
          ecriture_chemin_de_reference("racine.php",$racine) ;
          $racine_de_reference = $racine;
          }
          
          // 5. on vérifie si la racine de référence est la même que la racine actuelle
          if ($racine_de_reference != $racine) {
          // si la valeur a changé on fait les mises à jour
          
          $fichier_configuration= "configuration.php";
          
          if(!is_writeable($fichier_configuration)) {
          // si le fichier est verrouillé en écriture, on le déverrouille
          chmod ($fichier_configuration, 0644);
          }
          
          $chaine_a_remplacer = $racine_de_reference;
          $chaine_de_remplacement = $racine;
          
          $contenu_original=file_get_contents("configuration .php");
          $contenu_a_traiter=explode($chaine_a_remplacer, $contenu_original);
          $contenu_nouveau=implode($chaine_de_remplacement, $contenu_a_traiter);
          file_put_contents($fichier_configuration, $contenu_nouveau);
          chmod ($fichier_configuration, 0444);
          // on met à jour la valeur de référence
          $racine_de_reference = $racine;
          chmod ("racine.php", 0644);
          ecriture_chemin_de_reference("racine.php",$racine) ;
          }
          
          ?>
          Le fichier php contenant ce code, dont le nom est totalement libre, doit être à la racine du site, de préférence au même niveau que le fichier configuration.php mais en modifiant/optimisant ce code on peut envisager de le placer ailleurs.
          Le fichier peut ensuite être appelé via une tâche cron pour tourner de manière totalement autonome.
          On peut alors glisser un ou plusieurs echo là où souhaite récupérer des infos qui peuvent être renvoyées par email à la fin de l'exécution du cron (par exemple un echo pour indiquer si le fichier a été mis à jour ainsi que la nouvelle valeur du chemin de base).

          PS : dans cet exemple le nom du fichier crée contenant le chemin de référence est "racine.php" mais il suffit simplement de changer cette valeur dans le code pour lui donner le nom qu'on veut.

          PS 2 : on peut aussi optimiser le code de mise à jour du fichier config pour modifier intégralement $tmp_path et $log_path (utile si on déplace le site dans un autre répertoire du serveur).
          Là je ne touche qu'à la racine.

          PS 3 : il est aussi possible de générer un fichier de logs pour garder un historique de chaque changement de valeur du chemin de base, avec la date correspondante.
          Je verrai ça plus tard.

          PS 4 : c'est pour les gamers

          PS 5 : c'est pour les plus chanceux ou ceux qui n'ont pas perdu espoir...

          IMPORTANT : avant d'utiliser ce code, testez le. Ne pas l'utiliser sur un site en prod sans l'avoir préalablement testé.
          Dernière édition par dolmenhir à 07/12/2021, 15h49
          bruno28 aime ceci.
          Je préfère éclairer que briller.” - “J'ai peut-être l'air froid, mais je suis pas givré.- "ça dépend ça dépasse"
          Ne m'envoyez pas de message privé pour résoudre vos problèmes sans y avoir été invité.
          Dolmenhir : tailleur de site web depuis 1997. Spécialiste Joomla depuis 2005. https://www.dolmenhir.fr

          Commentaire


          • #20
            merci du retour

            juste pour etre sur de pas me planter : à la base le soucis est que ton /home/toto1/public_html change pour /home/toto2/public_html c'est bien ça?

            Expert en conception et réalisation de sites Internet 100% Joomla
            www.toonetcreation.com

            Commentaire


            • #21
              Envoyé par Tortue Genial 69 Voir le message
              merci du retour

              juste pour etre sur de pas me planter : à la base le soucis est que ton /home/toto1/public_html change pour /home/toto2/public_html c'est bien ça?
              NON.
              c'est que le "/home" devienne "/home3" ou "/home4" ou "/home5"... etc.
              dans le code je me suis concentré uniquement sur le "level" pour remonter à la racine du premier dossier mais j'aurai tout aussi bien pu prendre tout le "dirname" comme "/home/toto1/public_html" et vérifier qu'il ne devienne pas "/home3/toto1/public_html" (cette option aurait d'ailleurs le mérite de corriger une éventuelle erreur dans le chemin des dossiers tmp ou log)

              "toto1" ne change pas, c'est le nom du compte.

              PS : faire une sauvegarde de "configuration", au cas où.
              Dernière édition par dolmenhir à 08/12/2021, 10h35
              Je préfère éclairer que briller.” - “J'ai peut-être l'air froid, mais je suis pas givré.- "ça dépend ça dépasse"
              Ne m'envoyez pas de message privé pour résoudre vos problèmes sans y avoir été invité.
              Dolmenhir : tailleur de site web depuis 1997. Spécialiste Joomla depuis 2005. https://www.dolmenhir.fr

              Commentaire


              • #22
                ok donc tu vérifies juste que /home ne devienne pas /tutu ou je sais pas quoi.
                ca roule, bon à tester en effet.
                je jetterai un oeil dès que j'ai 5 min car même si perso je n'ai pas eu ce soucis, ce genre de sécurité est très intéressante.
                Expert en conception et réalisation de sites Internet 100% Joomla
                www.toonetcreation.com

                Commentaire


                • #23
                  Petite optimisation du code, intégrant une sauvegarde préalable du fichier configuration (renommé avec la date et l'heure histoire de classer les différentes sauvegardes >> +sécurisé que l'idée d'un simple fichier de logs).
                  Code:
                  <?php
                  function ecriture_fichier_rootpath($filename,$rootpath) {
                  $fichier = fopen($filename, "w");
                  fwrite($fichier, $rootpath);
                  fclose($fichier);
                  }
                  
                  function maj_configuration($fileconfig,$str2search,$str4rep lace,$fileref) {
                  // mise à jour de la racine du chemin de référence
                  chmod ($fileref, 0644);
                  ecriture_fichier_rootpath($fileref,$str4replace);
                  chmod ($fileref, 0444);
                  echo "Chemin de référence mis à jour ('".$str2search."' >> '".$str4replace."')";
                  
                  // on met à jour le fichier configuration
                  if(!is_writeable($fileconfig)) chmod ($fileconfig, 0644);
                  $chaine_a_remplacer = $str2search;
                  $chaine_de_remplacement = $str4replace;
                  $contenu_original=file_get_contents($fileconfig);
                  
                  // backup préalable du fichier de configuration
                  $now = date("Ymd-His");
                  $backupfilename = "bckp_".$now."_".$fileconfig;
                  $backupfichier = fopen($backupfilename, "w");
                  fwrite($backupfichier, $contenu_original);
                  fclose($backupfichier);
                  chmod ($backupfilename, 0444);
                  echo "<br>Fichier configuration sauvegardé ($backupfilename)";
                  
                  $contenu_a_traiter=explode($str2search, $contenu_original);
                  $contenu_nouveau=implode($str4replace, $contenu_a_traiter);
                  file_put_contents($fileconfig, $contenu_nouveau);
                  chmod ($fileconfig, 0444);
                  echo "<br>Fichier configuration mis à jour";
                  }
                  
                  // initialisation des variables
                  $docroot = $_SERVER['DOCUMENT_ROOT'];
                  $rootdir = substr_count($docroot,"/")-1;
                  $rootpath = dirname($docroot,$rootdir);
                  
                  // nom du fichier de configuration
                  $fileconfig = 'configuration.php';
                  $fileref = $docroot.'/rootpath.txt';
                  // nb : pour personnaliser le nom du fichier txt contenant le chemin de référence, changer 'rootpath' par le texte de votre choix
                  
                  // création du fichier de référence ou récupération de sa valeur
                  if (!file_exists($fileref)) {
                  ecriture_fichier_rootpath($fileref,$rootpath);
                  $racine_reference = $rootpath;
                  }
                  else {
                  $racine_reference = file_get_contents($fileref);
                  }
                  
                  /** si la racine du chemin de référence a changé on fait les mises à jour **/
                  if ($racine_reference != $rootpath) {
                  maj_configuration($fileconfig,$racine_reference,$r ootpath,$fileref);
                  }
                  
                  ?>
                  bruno28 aime ceci.
                  Je préfère éclairer que briller.” - “J'ai peut-être l'air froid, mais je suis pas givré.- "ça dépend ça dépasse"
                  Ne m'envoyez pas de message privé pour résoudre vos problèmes sans y avoir été invité.
                  Dolmenhir : tailleur de site web depuis 1997. Spécialiste Joomla depuis 2005. https://www.dolmenhir.fr

                  Commentaire


                  • #24
                    Je me rends compte que j'ai écrit une ânerie plus haut. C'est le répertoire public_html que je n'utilise pas et non home...

                    Mais je ne pense pas avoir de problème de la sorte, du moins je n'ai rien remarqué.

                    Je jetterai un œil ce week-end.
                    Cordialement.
                    __
                    Eddy !!!
                    Tutoriels BreezingForms en Français : https://www.breezingforms.eddy-vh.com/

                    Commentaire


                    • #25
                      Ah ok je comprends mieux.
                      car je trouvais étrange que tu puisses modifier le /home car il faut être root.
                      Expert en conception et réalisation de sites Internet 100% Joomla
                      www.toonetcreation.com

                      Commentaire


                      • #26
                        Ouais. Quand on répond sans être devant l'ordinateur.
                        Dernière édition par Eddy.vh à 10/12/2021, 19h36
                        Cordialement.
                        __
                        Eddy !!!
                        Tutoriels BreezingForms en Français : https://www.breezingforms.eddy-vh.com/

                        Commentaire


                        • #27
                          Ok dac ça roule
                          Expert en conception et réalisation de sites Internet 100% Joomla
                          www.toonetcreation.com

                          Commentaire


                          • #28
                            En effet, le "home" concerne tout le monde (pour le problème évoqué dans ce fil de discussion).
                            Ensuite, selon les cas, le site peut être dans le dossier "public_html" (c'est forcément le cas par défaut si vous prenez un nom de domaine chez o2switch en même temps que l'hébergement) ou dans le dossier de votre choix (à créer préalablement).
                            Ainsi on peut avoir un chemin qui ressemblera à
                            Code:
                            /home/mon-compte/public_html
                            ou
                            /home/mon-compte/sites/mon-site-a
                            ou
                            /home/mon-compte/sites/preprod/site-en-preprod-b
                            ou
                            /home/mon-compte/sites/sous-domaines/sous-domaine-c
                            etc.
                            Et pour chacun des sites Joomla les valeurs de $tmp_path et $log_path dans le fichier "configuration.php" ressembleront à
                            Code:
                            public $tmp_path = '/home/mon-compte/public_html/tmp';
                            ou
                            public $logs_path = '/home/mon-compte/sites/mon-site-a/administrator/logs';
                            ou
                            public $tmp_path = '/home/mon-compte/sites/preprod/site-en-preprod-b/tmp';
                            ou
                            public $logs_path = '/home/mon-compte/sites/sous-domaines/sous-domaine-c/administrator/logs';
                            etc.
                            et quand le serveur change "/home" en "/home3" vous devriez logiquement avoir quelque chose comme
                            Code:
                            public $tmp_path = '/home3/mon-compte/public_html/tmp';
                            ou
                            public $logs_path = '/home3/mon-compte/sites/mon-site-a/administrator/logs';
                            etc.
                            Sauf que ce n'est pas le cas, que rien ne vous prévient du changement opéré par le serveur et c'est à vous de modifier manuellement le fichier configuration de chaque site.

                            D'où l'intérêt de ce petit code php qui, programmé pour une exécution régulière via une tâche cron, assurera la veille en se chargeant de vérifier si le serveur a modifié la valeur de "home" et procèdera alors aux ajustements dans le fichier de configuration s'il constate que la valeur a changé.
                            Après, il est vrai que cela ne se produit pas tous les jours et que, globalement, cela n'impacte pas le bon fonctionnement du site puisque le serveur saura faire (selon les dires de l'hébergeur) le rapprochement entre "/home" dans le fichier de configuration et la vraie valeur "/home3".

                            Mais moi j'aime bien quand tout est correct, surtout en informatique, et principalement quand d'autres scripts vont se fonder sur ce qui est indiqué dans le fichier de configuration et qu'ils ne retrouveront plus cette réalité dans l'arborescence du site. Donc à chacun de voir si cette tâche doit s'exécuter tous les jours, chaque semaine ou chaque mois, en fonction de vos besoins, de vos enjeux et de vos priorités.

                            Attention, ce code fonctionne théoriquement avec n'importe quel hébergement, mais concerne principalement les sites hébergés chez o2switch ou sur un hébergement dont la structure de l'arborescence est similaire et susceptible de subir un changement de même nature (ex: planetHoster). Tests effectués avec succès par mes soins chez o2switch et planetHoster.
                            Ne jouez quand même pas les apprentis sorciers si vous ne savez pas ce que vous faites, surtout avec le fichier configuration de votre site Joomla.
                            Dernière édition par dolmenhir à 09/12/2021, 08h41
                            Tortue Genial 69 et bruno28 aiment ceci.
                            Je préfère éclairer que briller.” - “J'ai peut-être l'air froid, mais je suis pas givré.- "ça dépend ça dépasse"
                            Ne m'envoyez pas de message privé pour résoudre vos problèmes sans y avoir été invité.
                            Dolmenhir : tailleur de site web depuis 1997. Spécialiste Joomla depuis 2005. https://www.dolmenhir.fr

                            Commentaire


                            • #29
                              je suis 100% d'accord avec toi, j'aime pas trop la variabilité non plus, je préfère la résilience et la stabilité.
                              je vais le mettre en place de mon coté en tout cas
                              merci du partage
                              Expert en conception et réalisation de sites Internet 100% Joomla
                              www.toonetcreation.com

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X