Bonjour !

Je suis en train de refaire mon site, en local avec Wamp.
Au passage je me suis dit : Tiens, je vais "essayer" de toucher à php pour inclure mes "parties fixes", grâce à Alsacréations Smiley biggrin

Bref, mon nouveau site a plusieurs rubriques, proprement rangées dans leur dossiers (/actualites, /services, /bibliotheque...)

Mes includes étant à la racine du site, comment les appeler dans la page (par exemple) Service2 du dossier Service ? C'est possible ? ou est-ce que je dois les recopier dans chaque dossier (pas très pratique pour les modifs) ?

C'est là que je patauge... Smiley confused

Merci d'avance d'éclairer mes lumières.

Sandra
Bonjour ASGlobalServices,

Dans le tutoriel : http://css.alsacreations.com/Tutoriels-PHP/Inclure-un-fichier-dans-un-autre-grace-a-PHP
On peut lire :
a écrit :
Le navigateur ne visualisera qu’un seul et même document avec, en lieu et place de votre include(), le contenu du fichier inclus. Afin d’éviter toute erreur, il est préférable d’utiliser des adresses (URLs) absolues, avec le chemin complet par rapport à la racine du site. Si le fichier inclus comporte des liens, ceux-ci pointeront toujours d’après l’adresse de la page appelante. Par conséquent, il suffit qu’un même fichier soit inclus dans des pages de niveaux différents (ex : /fruits/ et /fruits/pommes/ ) pour que les adresses relatives deviennent obsolètes. Par exemple, pour atteindre un fichier situé dans le dossier fruits, nous préférerons l’écriture absolue <a href="/fruits/kiwi.php">page des kiwis</a> à l’écriture relative <a href="fruits/kiwi.php">page des kiwis</a>. Le / précédant l’url indique au navigateur de prendre pour point de départ la racine du site.


Cela répond à ta question ?
Cdt,
Sylvain
Bonjour,

Inclure un fichier en donnant son URL absolue (du type /inc/blabla.php ou -http://www.example.com/inc/blabla.php): ça n'est à priori pas possible, pour des raisons de sécurité.

Inclure un fichier dans le répertoire parent:
include('../blabla.php');

Inclure un fichier dans un répertoire frère:
include('../inc/blabla.php');


Inclure un fichier avec un chemin absolu:
include('/var/www/dossier1/dossier2/blabla.php');
(Il faut bien sûr connaitre le chemin exact du fichier dans le système de fichiers du serveur.)
Bonjour Florent,

a écrit :

Inclure un fichier en donnant son URL absolue (du type /inc/blabla.php ou -http://www.example.com/inc/blabla.php): ça n'est à priori pas possible, pour des raisons de sécurité.

J'ai "un peu de mal" avec ce problème de sécurité : Smiley sweatdrop
1/Le fichier est interprété coté serveur, le code visible coté client ne contient pas cette adresse, right ?
Où se situe le problème de sécurité ?
2/Quid du tutoriel ?
Abus de langage, puisque la phrase qui suit
a écrit :
avec le chemin complet par rapport à la racine du site
semble correspondre à la dernière solution que tu proposes ?

Cdt,
Sylvain
6l20 a écrit :
J'ai "un peu de mal" avec ce problème de sécurité : Smiley sweatdrop
1/Le fichier est interprété coté serveur, le code visible coté client ne contient pas cette adresse, right ?


Il faut distinguer les problèmes techniques et les problèmes de sécurité.

Si j'utilise une URL absolue du type "/dossier/blabla.php", où le "/" initial désigne la racine du domaine ou éventuellement du sous domaine (donc -http://www.example.com/), PHP n'a aucun moyen de savoir qu'il s'agit d'une URL (alors que pour un code HTML, le navigateur va supposer que le protocole est HTTP et que le "/" désigne la racine du domaine ou sous-domaine). Il pensera à l'inverse que "/" désigne la racine du système de fichier du serveur. Donc ça ne marche pas: problème technique.

Si maintenant on passe en paramètre une URL sous la forme suivante:
include('http://www.example.com/dossier/blabla.php');
L'URL peut désigner un fichier qui est sur le serveur ou sur un serveur externe, mais concrètement PHP va essayer de passer par HTTP (donc interroger un serveur web distant) pour récupérer le fichier. Pour que ce soit possible, il faut déjà activer l'option "allow_url_fopen" de PHP. Ensuite, il y a le fait que le fichier distant peut être exécuté par le serveur distant (si celui-ci exécute PHP). Donc si le fichier distant contient des variables ou fonctions PHP, elles seront perdues, ou bien le serveur distant n'exécute pas PHP et ces variables et fonctions seront visibles (car fichier servi en texte brut...) par tout un chacun.

Bref, c'est un peu casse-gueule, et très loin de la problématique «j'ai deux fichiers sur le même serveur, je veux inclure fichier2 dans fichier1». Smiley cligne
6l20 a écrit :
2/Quid du tutoriel ?
Abus de langage, puisque la phrase qui suit avec le chemin complet par rapport à la racine du site
semble correspondre à la dernière solution que tu proposes ?
Ça ne correspond pas du tout à la dernière solution que je propose: le tutoriel, dans ce passage, parle des liens hypertexte dans le code HTML généré, et pas de la fonction include ou de PHP. Il indique que, pour des éléments de navigation notamment, mieux vaut donner un chemin absolu du type "/dossier/fichier.html" plutôt qu'un chemin relatif du type "dossier/fichier.html".

Mais pour inclure un fichier local en PHP, c'est:
1. chemin relatif (depuis le script qui fait l'include);
2. ou bien chemin absolu, depuis la racine non pas du site mais du système de fichiers du serveur web.
Bonjour Florent,

Merci beaucoup, c'est beaucoup plus clair pour moi concernant les deux points évoqués Smiley jap

La tournure de phrase dans ce tutoriel est un poil tarabiscotée, non ?
Avec tes éclaircissements et relecture j'en perçois le sens, mais il me semble que ce passage peut prêté à confusion (en tout cas le mienne...)

*Je suis peut-être aussi complètement neu-neu, c'est possible aussi Smiley lol

Quoiqu'il en soit : merci Smiley cligne
Sylvain
Modifié par 6l20 (30 Apr 2008 - 09:46)