MYROOT, MODULE POUR FACILITER LES INCLUDE() ET ACCES EN LOCAL À UN FICHIER

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 2 févr. 2006 à 21:23
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008 - 7 févr. 2006 à 18:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/35842-myroot-module-pour-faciliter-les-include-et-acces-en-local-a-un-fichier

cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
7 févr. 2006 à 18:38
*****************
* 1 GOLDWIN *
* POINT *
*****************
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
7 févr. 2006 à 16:26
"le seul moyen de resoudre l'un de mes problemes"

le seul moyen que tu connais de résoudre l'un de tes problèmes ;-) sans vouloir faire de troll ^^
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
7 févr. 2006 à 12:28
Pour inclure myroot, tes bien obligé de donner le chemin. SAUF si on met myroot.lib.php dans l'include_path... Notamment la racine réel du site :o"

Tout façon, je voulais pô faire un débat. Cette source etait, et est toujours, le seul moyen de resoudre l'un de mes problemes (avec des pages perso)... J'oblige personne à l'utiliser :o|
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
7 févr. 2006 à 11:27
c'est ce que je voulais dire ^^

D'ailleurs je ferais remarqué à olid tout betement sa première ligne de code :

require_once("../common/myroot/myroot.lib.php");

tu l'a bien tapé à la main ce chemin relatif, faut bien connaitre le chemin vers ton fichier myroot.lib.php pour l'inclure en tout premier et donc si tu connais ce chemin tu sais t'y retrouvé dans le site.

dexiemement si je met un fichier admettons systeme.php à côté de myroot.lib.php et que celui-ci inclu ton fichier d'exemple tu auras une bel erreur d'inclusion dès la première ligne car le chemin du require_once("../common/myroot/myroot.lib.php"); du coup est faux...

Voilà pourquoi ton système n'est pas idéal olid.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
6 févr. 2006 à 23:12
ça trouve son intérêt justement dans le cas où tu inclus un fichier qu'en inclus un autre en fonction de son chemin et blabla et justement ta solution est meilleure qu'une fonction pour faire ça ;-) c'est là aussi où on voulait en venir.

a +
cs_Antidote Messages postés 163 Date d'inscription lundi 29 septembre 2003 Statut Membre Dernière intervention 8 mai 2010
6 févr. 2006 à 21:08
Bonjour tout le monde, je vois que cela fais débat.

Dans mes développements j'utilise les deux types (comme ça je ne facherai personne).

url absolue généralement par constante pour tout ce qui se trouve dans la racine du site et url relative pour mes oh mon dieu pas include mais surtout require_once ^^ par une variable ^^

j'écris toujours en première ligne dans tous mes fichiers ceci :

if (!isset($_base_)) $_base_ = '../../';

// représente le retour à la racine du site par rapport à l'emplacement de mon fichier
// (par exemple ici comme s'il était dans /include/special/)

Si le fichier est le premier appelé, il donne au suivant la direction à suivre pour retrouver la racine.
Si le fichier est inclu par un autre, il reprend directement le chemin vers la racine que l'autre à donné ou avait déjà récupéré précédemment.

je trouve ça très simple nécéssite qu'une ligne de code pour chaque fichier et ceci fonctionne très bien.

il me reste plus qu'a faire mes inclusion de la sorte :

require_once $_base_.'class/ma_classe.php';
// il faut écrire le chemin depuis la racine puisque $_base_ va vous y ramener.

Voilà.

J'ai envisagé une fois d'utiliser carrément la racine du serveur /home/mon_user_web/www/ par exemple dans une constante nomée ROOT.

soit jécris une tel ligne devant tous mes fichiers :

if (!defined('ROOT')) define('ROOT', '/home/mon_user_web/www/');

mais le jour ou je change de serveur ba c'est pas cool si je ne reprend pas la même structure.

Soit j'inclue un fichier qui me créer cette constante.
Mais comment inclure ce fichier, puisque je ne connais pas le chemin du serveur.
Mettre ce fichier dans un des dossier path du système ?
Paramétré mon propre path dans php.ini ?

Faut y pensé surtout si vous comme moi avez un panel de serveur jetable que vous ajouter et enlever à la voler pour faire marcher votre site.

Le plus simple pour moi ba c'est encore la première solution que j'ai écrite.
Mais si vous avez mieux je suis tout ouïe =)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
6 févr. 2006 à 13:03
"Dans l'esprit de PHP, ce n'est pas aux utilisateurs à optimiser leur code-source."

L'esprit de PHP c'est mal ^^

"Pour info, les fonctions mYRoot() et mYRootURL() utilisent des variables globales pour garder leurs précédents résultats de calcul..."

Il n'empêche que tu appelles une fonction, c'est ça qu'est coûteux en perfs...

Enfin bon perso je ne sais pas pourquoi on a besoin d'utiliser ce genre de scripts, même le $_SERVER['DOCUMENT_ROOT'] je ne vois pas à quoi ça peut servir quand on bosse en chemins relatifs, suffit de connaître la structure de son site ;-)
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
6 févr. 2006 à 12:20
Héhé, Coucou... content de te revoir ;o)

Pour info, les fonctions mYRoot() et mYRootURL() utilisent des variables globales pour garder leurs précédents résultats de calcul...

Dans l'esprit de PHP, ce n'est pas aux utilisateurs à optimiser leur code-source. Le systeme le fait pour eux dans les fct() standards, et moi je le fais pour eux dans cette source ;op
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
4 févr. 2006 à 15:03
t'appelles 30 fois ta fonction ici... utiliser une constante est beaucoups moins couteux...
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
3 févr. 2006 à 19:04
Faudrait que je vois des exemples histoire de m'en convaincre car pour l'instant c'est pas gagné ;-)
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
3 févr. 2006 à 18:47
Justement Antho, cette fonction donne un chemin relatif qui permet de revenir à la racine : les adresses construites avec la fct mYRoot() ne sont PAS absolue :o)

Par contre la fonction mYRootURL() renvoi une URL absolue car c'est le seul moyen de contourner l'incapacité des moteurs de recherche à prendre en charge la balise BASE :o(

Mais tu noteras que dans ton source, les adresses et URL sont toujours relatives... Mais par rapport à la racine choisie, n uance ;o)

Enfin bon, si vous ne voyez pas l'avantage de pouvoir faire des include() récursifs, cette source n'est pas d'un grand interet :o|

Exemple: vous pouvez faire un include d'un fichier config.php qui lui fera l'include de tous les autres fichiers que vous auriez besoin... Et çà marche à tous les niveaux d'arborescence
Perso, je charge dés le début mYRoot avec un include_once (qui execute le code apres inclusion)... Et justement à la fin de myroot.lib.php, je fais tous mes include :o)

Il y a aussi d'autres champs d'application... Comme mettre un systeme de plugin par fichier à inclure quand ils existent dans un dossier :o"
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
3 févr. 2006 à 13:47
Hello,

perso, j'utilise des constantes. avec les chemins dont j'ai besoin. Il y en a rarement 36...
Je ne vois pas non plus ce qu'ajoute tes fonctions, en fait, pour être franc.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
3 févr. 2006 à 12:23
D'où l'intérêt des chemins relatifs, comme ça aucun problème :-)

Je n'ai jamais compris comment on pouvait avoir besoin de connaître la racine alors qu'avec un chemin relatif tout roule :-) pas besoin de fonction pour faire ça à mon avis.
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
3 févr. 2006 à 12:19
Tu n'as pas compris... mYRoot() renvoie une chaine avec les backslash pour revenir à la racine du site, par exemple "../.."

Et, $_SERVER['DOCUMENT_ROOT'] n'est pas exploitable si la racine de ton site (ou appli web) n'est pas à la racine du nom de domaine (ex: pour les pages-perso)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
2 févr. 2006 à 21:23
Salut,

$_SERVER['DOCUMENT_ROOT']
Rejoignez-nous