Include de fichier au-dessus de la racine
Résolu
ephelya
Messages postés
282
Date d'inscription
Statut
Membre
Dernière intervention
-
ephelya Messages postés 282 Date d'inscription Statut Membre Dernière intervention -
ephelya Messages postés 282 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Je suis en train de développer un outil multi-sites. La matrice de création (à la racine du site www/) comporte toutes les infos nécessaires à la production de sites, qui sont eux-mêmes dans un dossier www/WWW.
Jusqu'ici tout va bien mais dès que j'ai un nom de domaine qui pointe par ex vers WWW/SITES/monsite, mes include du type ../../fichier.php ne fonctionnent plus vu que le fichier est considéré comme étant externe.
Je sais pourtant qu'il est possible de faire un include de fichier au-dessus de la racine, mais je ne retrouve pas la manip...
Est-ce que quelqu'un peut m'aider? Je ne trouve rien sur GG...
Merci d'avance!
Je suis en train de développer un outil multi-sites. La matrice de création (à la racine du site www/) comporte toutes les infos nécessaires à la production de sites, qui sont eux-mêmes dans un dossier www/WWW.
Jusqu'ici tout va bien mais dès que j'ai un nom de domaine qui pointe par ex vers WWW/SITES/monsite, mes include du type ../../fichier.php ne fonctionnent plus vu que le fichier est considéré comme étant externe.
Je sais pourtant qu'il est possible de faire un include de fichier au-dessus de la racine, mais je ne retrouve pas la manip...
Est-ce que quelqu'un peut m'aider? Je ne trouve rien sur GG...
Merci d'avance!
A voir également:
- Include de fichier au-dessus de la racine
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
7 réponses
Salut,
D'ou est ce que vous appellez le fichier "fichier.php", or, a quel niveau l'inclusion est faite ?
Ou se trouve "fichier.php" ?
D'ou est ce que vous appellez le fichier "fichier.php", or, a quel niveau l'inclusion est faite ?
Ou se trouve "fichier.php" ?
Voici mon arborescence sur le serveur
- www
-----global.css
-----WWW
----------SITES
--------------monsite1
------------------index.php
------------------fichier.php
J'ai besoin d'appeler global.css depuis fichier.php ou index.php, mais une fois que tout est en place, j'ajoute le nom de domaine monnomdedomaine.com qui pointe vers monsite1 et là les liens ../../../global.css ne fonctionnent plus. Ca me semble normal, mais comment fait-on pour contourner le problème ?.
- www
-----global.css
-----WWW
----------SITES
--------------monsite1
------------------index.php
------------------fichier.php
J'ai besoin d'appeler global.css depuis fichier.php ou index.php, mais une fois que tout est en place, j'ajoute le nom de domaine monnomdedomaine.com qui pointe vers monsite1 et là les liens ../../../global.css ne fonctionnent plus. Ca me semble normal, mais comment fait-on pour contourner le problème ?.
Je ne m'attendais pas à ce que include ('../../../global.css') fonctionne, mais j'ai consulté plusieurs amis développeurs confirmés avant de me lancer dans ce projet qui m'ont assuré qu'on pouvait accéder à un fichier au-dessus de la racine.
C'est peut-être en traitant le fichier comme un fichier distant, je ne sais pas, mais ça me fait un peu peur coté sécurité de modifier allow_url_include dans php.ini (d'ailleurs je ne sais même pas si mon hébergeur me le permettra), donc je cherche un autre moyen.
Pour le moment, je me contente de récupérer le contenu du fichier avec file_gets_content et de créer un nouveau fichier dans monsite1 en recopiant le contenu, mais ça charge du coup le serveur, et ce n'est pas le but, pour un ou deux sites, ça passe, mais pour quelques centaines, ça va vite devenir problématique...
C'est peut-être en traitant le fichier comme un fichier distant, je ne sais pas, mais ça me fait un peu peur coté sécurité de modifier allow_url_include dans php.ini (d'ailleurs je ne sais même pas si mon hébergeur me le permettra), donc je cherche un autre moyen.
Pour le moment, je me contente de récupérer le contenu du fichier avec file_gets_content et de créer un nouveau fichier dans monsite1 en recopiant le contenu, mais ça charge du coup le serveur, et ce n'est pas le but, pour un ou deux sites, ça passe, mais pour quelques centaines, ça va vite devenir problématique...
Salut,
En php tu peux faire un include sur n'importe quel fichier de ton serveur. Donc un include('../../../global.css') devrait fonctionner à condition que le chemin soit bon et que apache ait les droits de lecture sur ce fichier.
Par contre en html tu ne peux pas appeler des fichiers qui ne sont pas accessible depuis internet (ce qui semble être le cas de ton global.css).
De plus puisque tu arrives à faire un file_get_content, tu devrais pouvoir faire un include de la même manière. Par exemple dans la balise head de ton fichier html tu peux faire :
Bien vérifier les chemins absolus en fonction de la page appelée.
Bonne journée
En php tu peux faire un include sur n'importe quel fichier de ton serveur. Donc un include('../../../global.css') devrait fonctionner à condition que le chemin soit bon et que apache ait les droits de lecture sur ce fichier.
Par contre en html tu ne peux pas appeler des fichiers qui ne sont pas accessible depuis internet (ce qui semble être le cas de ton global.css).
De plus puisque tu arrives à faire un file_get_content, tu devrais pouvoir faire un include de la même manière. Par exemple dans la balise head de ton fichier html tu peux faire :
<style type="text/css"> <?php include('../../../global.css'); ?> </style>
Bien vérifier les chemins absolus en fonction de la page appelée.
Bonne journée
Merci pour vos réponses.
Pour le moment, ça fonctionne avec include, parce que j'ai modifié php.ini, mais ça m'inquiète côté sécurité. Ceci dit, tels que j'ai développés le site et l'outil, je ne fais jamais d'include de page depuis les paramètres GET, donc est-ce qu'il y a quand même une faille de sécurité ?
Et est-ce que open-basedir serait plus sûr?
Pour le moment, ça fonctionne avec include, parce que j'ai modifié php.ini, mais ça m'inquiète côté sécurité. Ceci dit, tels que j'ai développés le site et l'outil, je ne fais jamais d'include de page depuis les paramètres GET, donc est-ce qu'il y a quand même une faille de sécurité ?
Et est-ce que open-basedir serait plus sûr?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Vous avez besoin de modifier qu'un seul paramètre dans le php.ini, pas la peine de modifier le fichier même !
Depuis PHP 5.3.0, open_basedir peut être affinée au moment de la compilation. Ceci signifie que si open_basedir est définie à /www/ dans le fichier php.ini, un script peut affiné la configuration en /www/tmp/ au moment de la compilation en utilisant la fonction ini_set(). Lors d'un parcours de plusieurs dossiers, vous pouvez utiliser la constante PATH_SEPARATOR suivant le système d'exploitation.
Par défaut, open_basedir pointe vers la racine de votre site, ce qui signifie que vous ne pourrez pas accéder a un répertoire parent de ce dernier !
Donc en utilisant ini_set('open_basedir', '/www'), vous redéfinissez le plus haut répertoire vers lequel vos scripts peuvent accéder, qui dans ce cas se trouve être "www".
Depuis PHP 5.3.0, open_basedir peut être affinée au moment de la compilation. Ceci signifie que si open_basedir est définie à /www/ dans le fichier php.ini, un script peut affiné la configuration en /www/tmp/ au moment de la compilation en utilisant la fonction ini_set(). Lors d'un parcours de plusieurs dossiers, vous pouvez utiliser la constante PATH_SEPARATOR suivant le système d'exploitation.
Par défaut, open_basedir pointe vers la racine de votre site, ce qui signifie que vous ne pourrez pas accéder a un répertoire parent de ce dernier !
Donc en utilisant ini_set('open_basedir', '/www'), vous redéfinissez le plus haut répertoire vers lequel vos scripts peuvent accéder, qui dans ce cas se trouve être "www".
Vous avez besoin de modifier qu'un seul paramètre dans le php.ini, pas la peine de modifier le fichier même !
Oui, c'est ce que j'ai fait
Donc en utilisant ini_set('open_basedir', '/www'), vous redéfinissez le plus haut répertoire vers lequel vos scripts peuvent accéder, qui dans ce cas se trouve être "www".
Est-ce plus sécuritaire que allow_url_include? C'est ma principale préoccupation...
En tout cas, ça semble être la réponse que j'attendais, merci! :-)
Je dirais que open_basedir est plus sécurisé, puisque ça se limite au répertoire que vous définissez, or, ce répertoire sera toujours a l'intérieur de votre espace d'hébergement.
Tandis que allow_url_include initialisé a 1, vous pourrez par la suite inclure n'importe quelle page sur internet, et si cette dernière contient du PHP, et ben il sera exécuté de même.
Tandis que allow_url_include initialisé a 1, vous pourrez par la suite inclure n'importe quelle page sur internet, et si cette dernière contient du PHP, et ben il sera exécuté de même.