Include avec chemin relatif

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Include avec chemin relatif

Re: Include avec chemin relatif

par laurents » 22 nov. 2011, 16:55

Je ne peux pas voir avec html car l'include disparait vu qu'il est inclu..
Ca, c'est clair ; c'était justement pour voir si c'était bien inclu (mais je ccrois que c'était évident de tte façon). Mais si tu as trouvé ton bonheur, n'en parlons plus.

Re: Include avec chemin relatif

par Texicitys » 22 nov. 2011, 16:30

ce dernier ne devrai pas trouver mes pages fonctions et contants
Effectivement, je trouve ça bizarre aussi. Moi, à ta place, je regarderais le code html généré pour essayer de comprendre.
Sinon, je pense aussi que la solution avec le chdir résoudrait ton pb : où que soit ta page, le chdir te ramènerait ds le répertoire racine (par exemple, et là, met bien un chemin absolu (!)) et si ds cette page tu mets des includes de fichier du répertoire racine aussi, ça marchera tjs, où que se trouve la page appelante qui contient le include de ta page.
Je ne peux pas voir avec html car l'include disparait vu qu'il est inclu..

Merci pour ta réponse, mais j'ai trouver mon bonheurs avec la fonction set_include_path

Merci beaucoup à vous!

Re: Include avec chemin relatif

par laurents » 22 nov. 2011, 16:13

ce dernier ne devrai pas trouver mes pages fonctions et contants
Effectivement, je trouve ça bizarre aussi. Moi, à ta place, je regarderais le code html généré pour essayer de comprendre.
Sinon, je pense aussi que la solution avec le chdir résoudrait ton pb : où que soit ta page, le chdir te ramènerait ds le répertoire racine (par exemple, et là, met bien un chemin absolu (!)) et si ds cette page tu mets des includes de fichier du répertoire racine aussi, ça marchera tjs, où que se trouve la page appelante qui contient le include de ta page.

Re: Include avec chemin relatif

par Texicitys » 22 nov. 2011, 14:29

En tout cas ça fonctionne parfaitement bien avec le set_include_path...

Merci beaucoup !

Re: Include avec chemin relatif

par Texicitys » 22 nov. 2011, 13:32

Si ce que tu dis est vrai, pourquoi ça fonctionne avec mon fichier include/debut.php qui inclu lui meme /include/fonctions.php et include/constants.php de cette manière:

include("fonctions.php")

Si je suis ton explication, lorsque je me trouve dans le dossier membres/ et que j'include mon debut.php, ce dernier ne devrai pas trouver mes pages fonctions et contants... Or ça fonctionne peu importe ou je me trouve.

Oui, je vais bien lire tout ce qui concerne l'include path, et je te redis si j'ai des questions :)

Merci beaucoup

Re: Include avec chemin relatif

par moogli » 22 nov. 2011, 08:07

Salut,

En fait le problème est du à l'inclusion des fichiers elle même.

La question à 2 sesterces : est que quand j'inclus un un fichier (d'un sous répertoire) sont chemin "relatif" sera changé ?

Pour répondre à la question :
- un include c'est quoi ?
- que ce passe t il avec un var_dump(basename(__FILE__)); dans le fichier de connexion quand il est inclus ou pas ? (même valeur ou pas).

Voilà z'avez deux heure je ramasse les copies à 9h00 ;)

L'include c'est un copier collé de l'appelé dans l'appelant (pas de résolution de parc etc).
Donc le chemin du script sera celui de l'appelant et non de l'appelé.

C'est une grosse prise de tête quand on ne le gère pas en automatique, voie comme l'indique mazarini avoir le "chroot" des le départ (pourquoi pas en constante) ou avec l'autoload en php5.
La solution de L'include path bien paramétré pour le script étant le plus simple car si ton site déménage tu n'a rien a faire truc est bien foutu ;)

Test ce que j'ai mis tu verra par toi même ;)

@+

Re: Include avec chemin relatif

par Texicitys » 22 nov. 2011, 01:33

J'avoue ne pas comprendre pourquoi ça fonctionne actuellement et pas quand je change de dossier...

J'ai bien regardé vos réponses. La meilleur me semble être celle la:

une solution alternative est de mettre un chdir('..') en début de script et de mettre tout les liens depuis la racine. ca ne change pas les liens http, uniquement les includes ou les lectures de répertoire.

Mais je ne comprends pas bien ce que ça veut dire...

Merci d'avance :)

Tex

Re: Include avec chemin relatif

par laurents » 17 nov. 2011, 11:45

En fait la différence est surtout gênante lorsque tu a plusieurs sites en local avec localhost/site1... est en production une url par site.
Mais qu'est-ce que ça change, qu'on soit en local ou sur serveur, si le lien est absolu :?:

Re: Include avec chemin relatif

par Mazarini » 17 nov. 2011, 11:37

Pour les liens absolus, tout dépend si tu mets tes scripts dans www.tonsite.com/ ou dans www.tonsite.com/tonapplication/

En fait la différence est surtout gênante lorsque tu a plusieurs sites en local avec localhost/site1... est en production une url par site.

Regardes chez ton hébergeur ce qu'il fournit comme include_path, ca reste la meilleure solution. Chez free.fr et online.fr, il me semble que c'est le répertoire /include qui joue ce role automatiquement. C'est vraiment la solution normale. Pour les tests en local sur ta machine, tu peux utiliser un .htacces à la racine de chaque site pour avoir un include_path spécifique à chaque site.

Re: Include avec chemin relatif

par laurents » 17 nov. 2011, 11:22

Pourquoi ça :
mais implique d'avoir la racine du script à la racine du site
si le lien est absolu, peu importe où est le script...
une solution alternative est de mettre un chdir('..') en début de script et de mettre tout les liens depuis la racine. ca ne change pas les liens http, uniquement les includes ou les lectures de répertoire.
C'est effectivement une autre solution et du coup, mes fichiers *_rac.php seraient inutiles...

Re: Include avec chemin relatif

par Mazarini » 17 nov. 2011, 11:02

///
Je suis étonné qu'avec "debut.php", ça marche : ça ne devrait pas ; modifier "include_path", ça demande d'avoir accès à "php.ini", ce qui doit être rare (j'oubliai init_set) et de plus, le chemin serait tjs le même...
Bonjour,

Il est parfois possible d'utiliser certaines directives PHP dans les fichiers .htacess. Cependant, les hébergeurs ont tendance à définir un répertoire inclus dans l'include_path. Il suffit souvant de le créer dans l'arborescence pour pouvoir l'utiliser.

Pour gérer les includes en chaine, le plus simple est l'utilisation de l'include-path. l'utilisation de liens absolu est pratique, mais implique d'avoir la racine du script à la racine du site ou impose l'arborescence depuis la racine.

une solution alternative est de mettre un chdir('..') en début de script et de mettre tout les liens depuis la racine. ca ne change pas les liens http, uniquement les includes ou les lectures de répertoire.

Re: Include avec chemin relatif

par laurents » 17 nov. 2011, 10:28

Je vais te dire ce que je crois, avoir compris, ce que je crois être le problème, et si c'est bien ça, une solution imaginée :
- le fichier "connexion.php" n'existe pas ; c'est "collaidebase.php"
- toutes tes pages ont le code :

Code : Tout sélectionner

include ("../include/debut.php"); include ("../connexion/collaidebase.php")
ou

Code : Tout sélectionner

include ("include/debut.php"); include ("connexion/collaidebase.php")
(si la page est à la racine)
- le problème que je pense : si une page est à la racine, qd elle inclue les 2 fichiers, elle inclue donc aussi "functions.php" et "constants.php" et si elle est à la racine, elle a donc un chemin relatif qui ne marche pas.
- solution imaginée : il faudrait avoir debut.php, debut_rac.php, collaidebase.php, collaidebase_rac.php
avec debut.php :

Code : Tout sélectionner

include ("../include/functions.php") include ("../include/constants.php") include ("../connexion/commun_debut.php")
debut_rac.php :

Code : Tout sélectionner

include ("include/functions.php") include ("include/constants.php") include ("connexion/commun_debut.php")
collaidebase.php :

Code : Tout sélectionner

include ("../include/functions.php") include ("../include/constants.php") include ("../connexion/commun_collaidebase.php")
et collaidebase_rac.php :

Code : Tout sélectionner

include ("include/functions.php") include ("include/constants.php") include ("connexion/commun_collaidebase.php")
et si un fichier est à la racine, tu y mets :

Code : Tout sélectionner

include ("include/debut_rac.php"); include ("connexion/collaidebase_rac.php")
et sinon : include ("../include/debut.php");
include ("../connexion/collaidebase.php")

Je suis étonné qu'avec "debut.php", ça marche : ça ne devrait pas ; modifier "include_path", ça demande d'avoir accès à "php.ini", ce qui doit être rare (j'oubliai init_set) et de plus, le chemin serait tjs le même...

Re: Include avec chemin relatif

par moogli » 17 nov. 2011, 10:05

Re: Include avec chemin relatif

par Texicitys » 17 nov. 2011, 01:05

Sinon, n'y a-t-il pas d'autre meilleur façon pour gérer les include?

Car par chemin absolu je ne peux pas ..

Je viens de voir qu'il existe une fonction include_path mais je n'ai pas trouvé de documentation...

Merci

Re: Include avec chemin relatif

par Texicitys » 17 nov. 2011, 00:46

Merci pour ta réponse!

Cependant, tu n'as pas compris mon problème.. Je sais me servir des chemin relatif.

Pour le moment, tout fonctionne très bien alors que j'inclue sur chaque page (qu'elle soit a la racine ou dans un dossier) mon fichier debut.php. Dans ce fichier il y a écrit:
include("functions.php");
include("constants.php");
Et tout fonctionne avec cette façon de faire..

Je me répète, mais le fichier debut.php ne change pas de contenu en fonction du lieu ou je l'appelle.

Cependant, quand je fais la meme chose mais que j'appelle mes deux include depui le fichier connexion.php. Ca ne fonctionne plus..
Je ne comprends pas du tout pourquoi..

(désolé, c'est très compliqué a expliquer)

Merci