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 ?
o2switch et path "home"
Réduire
X
-
"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
-
Envoyé par RobertG Voir le messageEt 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 ?
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
-
Envoyé par dolmenhir Voir le messagej'en aurai bientôt le coeur net : lorsque j'aurai développé mon script.
j'utilise aussi mysites.guru c'est pour ça.
Expert en conception et réalisation de sites Internet 100% Joomla
www.toonetcreation.com
Commentaire
-
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.
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 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, 15h49bruno28 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
- "J'aime" 1
Commentaire
-
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
-
Envoyé par Tortue Genial 69 Voir le messagemerci 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?
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
-
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
-
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
- "J'aime" 1
Commentaire
-
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
-
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
-
Ok dac ça rouleExpert en conception et réalisation de sites Internet 100% Joomla
www.toonetcreation.com
Commentaire
-
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.
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.
Code:public $tmp_path = '/home3/mon-compte/public_html/tmp'; ou public $logs_path = '/home3/mon-compte/sites/mon-site-a/administrator/logs'; etc.
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, 08h41Tortue 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
- "J'aime" 2
Commentaire
-
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 partageExpert en conception et réalisation de sites Internet 100% Joomla
www.toonetcreation.com
Commentaire
Annonce
Réduire
Aucune annonce pour le moment.
Commentaire