Poum45 | PHP - Include (fichier) |
0 #1 |
---|---|---|
Je poste trop
Inscrit: 03/12/2007 23:03
Post(s): 59592
Karma: 4214 |
Bonjour à tous,
ça fait un moment que je me prends la tête avec une "connerie" que je contourne par une pirouette mais là, j'en ai marre, faut que je comprenne comment ça marche. J'utilise dans la charte web de mon site un petit diaporama pour afficher quelques images sur toutes les pages du site. Ces images peuvent évoluer par des ajouts ou suppressions. Histoire de ne pas me farcir l'ensemble des page, j'ai crée un petit fichier .PHP avec le nom des fichiers et leur chemin. exemple : <li><img src="../images/references/references-08.jpg" alt="Mon client A" /></li> <li><img src="../images/references/references-09.jpg" alt="Mon client B" /></li> Etc. Donc, les images sont comme vous le constatez dans un dossier images/references/ Le fichier à inclure est placé quant à lui dans le dossier : scripts/references.php Côté page, j'inclue ce fichier <?php include 'scripts/references.php'; ?> Si je crée une nouvelle page avec ces éléments, tout fonctionne parfaitement. Or, si la nouvelle page est dans un dossier, les chemins ne sont plus bons. Je pense que je dois créer des chemins relatif par rapport à la racine du site. Ce qu'il s'agisse de l'emplacement des images, du scripts... Or, je tourne la chose dans tous les sens et ça déconne à chaque fois. J'ai essayé avec de cette façon par exemple : <li><img src="/images/references/references-08.jpg" alt="Mon client A" /></li> <li><img src="/images/references/references-09.jpg" alt="Mon client B" /></li> et <?php include '/scripts/references.php'; ?> Quelle est la bonne méthode qui me permettra de placer mes images, le script.php et surtout la page du site à n'importe quel emplacement du serveur ? Merci d'avance Pour info, le site est sur un serveur OVH. Côté FTP, sous FileZilla je vois : Quant à moi, je travail avec DreamWeaver. J'ai crée un template avec des zones modifiables pour les pages donc tout le reste est "bloqué" lors de l'édition des pages mais en dur dans le template. Cela concerne toutes les lignes de code citées plus haut.
Contribution le : 02/03/2014 15:54
|
|
Signaler |
Invité | 0 #2 |
|
---|---|---|
FantômeInvité
|
Je suis pas sûr d'avoir bien capté, mais si tu mets la nouvelle page dans un dossier, alors à la limite tu pourrais modifier les chemins vers les images, relatifs à ce fichier, en "../images/references/bleh.png" ?
Contribution le : 02/03/2014 16:51
|
|
Signaler |
Poum45 | 0 #3 |
|
---|---|---|
Je poste trop
Inscrit: 03/12/2007 23:03
Post(s): 59592
Karma: 4214 |
L'idée est que le petit fichier PHP ou les pages soient n'importe où (dans n'importe quel dossier) et que le chemin fonctionne.
Je pourrais créer un chemin absolu à partir de l'URL mais ça ne se fait pas. Fût une époque, je pensais que "\" indiquait la racine du site. Mais là, non, ça ne marche plus.
Contribution le : 02/03/2014 17:55
|
|
Signaler |
Invité | 0 #4 |
|
---|---|---|
FantômeInvité
|
Aucune idée.. Tu pourrais faire un script en php modifiant le chemin ton include, de façon récursive, et qui ajouterais pour chaque 'niveau' (genre nombre de sous dossiers) un "../" au début du chemin ? J'vais voir si j'ai pas le temps de te l'écrire.
Contribution le : 02/03/2014 18:33
|
|
Signaler |
Biiiiiip | 0 #5 |
|
---|---|---|
Je masterise !
Inscrit: 10/01/2008 13:31
Post(s): 4693
Karma: 684 |
il faut effectivement un chemin absolu et non relatif pour que cela fonctionne. pour connaitre le chemin absolu de l'endroit où tu places ton script, tu peux t'aider d'un petit script PHP que tu places là où tu souhaites uploader ton script :
chez OVH par exemple, cela te donne quelque chose du genre /home/truc/bidule/www.machin/path.php c'est par exemple indispensable dans un htaccess avec htpasswd. je m'en sers justement chez OVH, du coup je sais que ce type de chemin fonctionne parfaitement en toutes circonstances, puisque ça part de la racine de l'hébergement.
Contribution le : 02/03/2014 18:56
|
|
Signaler |
Invité | 0 #6 |
|
---|---|---|
FantômeInvité
|
Bon, ça fait longtemps, et mon php est un peu rouillé, y'a surement de l'optimisation à faire.
Le nouveau fichier placé dans un sous dossier va scanner le nombre de niveaux qui vont le séparer d'un 'index.php' (tu peux le renommer en n'importe quoi, si tu veux pas t'embeter avec les éventuels index.php situés eux mêmes dans des sous-dossiers) et va ajouter un "../" au chemin à chaque fois. C'est vraiment de la bricole, mais ça fonctionne. (à noter que la fonction commencera à scanner le folder parent, et non pas celui dans lequel elle se trouve.)..
Contribution le : 02/03/2014 19:12
|
|
Signaler |
Poum45 | 0 #7 |
|
---|---|---|
Je poste trop
Inscrit: 03/12/2007 23:03
Post(s): 59592
Karma: 4214 |
Citation :
Je viens de tester et ... je ne vois pas où il m'indique un chemin comme tu le mentionne :gratte:
Contribution le : 02/03/2014 19:18
|
|
Signaler |
Poum45 | 0 #8 |
|
---|---|---|
Je poste trop
Inscrit: 03/12/2007 23:03
Post(s): 59592
Karma: 4214 |
@theDaftDev : je cherche simplement la bonne syntaxe pour appeler un fichier ou des images.
Comme je le disais précédemment, un peu comme sous MSDOS ou /, ./, ../ ou des antislash... J'étais persuadé que ./ ou / suffisait et bah non.
Contribution le : 02/03/2014 19:20
|
|
Signaler |
Biiiiiip | 0 #9 |
|
---|---|---|
Je masterise !
Inscrit: 10/01/2008 13:31
Post(s): 4693
Karma: 684 |
Citation :
ben tout en bas à gauche sinon tu peux virer la ligne phpinfo();, tu auras que le chemin absolu qui apparaitra. là ça donne des infos en plus et les infos, c'est le pouvoir edit : tiens voilà le fichier si tu veux pas ouvrir notepad > path.php
Contribution le : 02/03/2014 19:31
|
|
Signaler |
Invité | 0 #10 |
|
---|---|---|
FantômeInvité
|
Je viens de piger, encore à coté de la plaque, desolé x)
Contribution le : 02/03/2014 19:40
|
|
Signaler |
-Flo- | 0 #11 |
|
---|---|---|
Je poste trop
Inscrit: 08/01/2005 13:41
Post(s): 15190
Karma: 12562 |
Il y a les constantes magiques qui sont particulièrement adaptées à ce genre de problèmes.
Citation :
http://www.php.net/manual/fr/language.constants.predefined.php Il te suffit donc, dans ton fichier references.php, d'indiquer le chemin des images à partir de ce fameux __DIR__.
Contribution le : 02/03/2014 20:00
|
|
Signaler |
Biiiiiip | 0 #12 |
|
---|---|---|
Je masterise !
Inscrit: 10/01/2008 13:31
Post(s): 4693
Karma: 684 |
ah c'est plutôt cool ça
Contribution le : 02/03/2014 20:31
|
|
Signaler |
Poum45 | 0 #13 |
|
---|---|---|
Je poste trop
Inscrit: 03/12/2007 23:03
Post(s): 59592
Karma: 4214 |
@-Flo- : il y a trois choses :
1) le "script" dans lequel je fais appel aux images. J'indique quel chemin ? 2) l'include dans une page qui sera n'importe où sur le serveur qui va faire appel aux chemins des images. 3) la page elle même qui de la même manière peut être n'importe où. Dans ces trois cas, comment j'écris le code ? :roll: Pour le moment, j'ai juste ce qui a été mis tout en haut dans mon premier post en gras.
Contribution le : 02/03/2014 20:38
|
|
_________________
Les mouches m'agacent mais Le Croco c'est par là |
||
Signaler |
-Flo- | 0 #14 |
|
---|---|---|
Je poste trop
Inscrit: 08/01/2005 13:41
Post(s): 15190
Karma: 12562 |
En fait j'étais dans une logique de chemin serveur, j'avais oublié que le contexte était d'indiquer un chemin d'images dans du html, et qu'il s'agit donc d'un chemin côté client...
Donc la solution est en fait très simple, il te suffit d'indiquer le chemin de tes images à partir de la racine de ton site (donc en commençant par "/"). Donc en admettant que ton arbo soit du genre : www | |_img |..|_image.jpg | |_script |..|_references.php | |_replambda |..|_page2.php | |_page1.php - Dans references.php tu as : <img src="/img/image.jpg" /> - Dans page1.php tu as : include 'script/references.php'; - Dans page2.php tu as : include '../script/references.php'; Et si tu veux pas te faire chier à te demander à chaque fois où tu es dans ton arbo pour réaliser tes include, tu peux effectivement utiliser la solution de Volvik pour récupérer le chemin absolu de la racine de ton serveur, la stocker "manuellement" dans un fichier de config via une constante du style $C_SERV_ROOT et réaliser ensuite systématiquement tes includes comme ça, où que soit situé le script qui va réaliser l'include : include "$C_SERV_ROOT/script/references.php"; Ou encore récupérer le chemin de la racine en tronquant le contenu de __DIR__ après le /www/.
Contribution le : 02/03/2014 21:41
|
|
Signaler |
Poum45 | 0 #15 |
|
---|---|---|
Je poste trop
Inscrit: 03/12/2007 23:03
Post(s): 59592
Karma: 4214 |
@-Flo- :
OK pour les images. le "/images..." Quant à l'include : <?php include "$C_SERV_ROOT/scripts/references.php"; ?> Ca déconne : j'ai côté client le message : Warning: include(/scripts/references.php) [function.include]: failed to open stream: Permission denied in /homez.462/atelierwk/www/prestations.php on line 33 Warning: include() [function.include]: Failed opening '/scripts/references.php' for inclusion (include_path='.:/usr/local/lib/php') in /homez.462/atelierwk/www/prestations.php on line 33
Contribution le : 02/03/2014 22:32
|
|
Signaler |
-Flo- | 0 #16 |
|
---|---|---|
Je poste trop
Inscrit: 08/01/2005 13:41
Post(s): 15190
Karma: 12562 |
Tu as bien attribué à ta constante $C_SERV_ROOT la valeur "/homez.462/atelierwk/www" ?
Je n'ai pas l'impression que ça soit le cas...
Contribution le : 02/03/2014 22:55
|
|
Signaler |
Poum45 | 0 #17 |
|
---|---|---|
Je poste trop
Inscrit: 03/12/2007 23:03
Post(s): 59592
Karma: 4214 |
Citation :
Je n'ai bien compris comment l'utiliser :gratte: n'oubliez pas les gars, je suis un belle brèle côté PHP
Contribution le : 02/03/2014 22:57
|
|
Signaler |
Poum45 | 0 #18 |
|
---|---|---|
Je poste trop
Inscrit: 03/12/2007 23:03
Post(s): 59592
Karma: 4214 |
Citation :
euuuuuh, pas trop non Je ne sais pas comment l'écrire. J'ai juste mon "include" qui est là et je dois ajouter des choses avant mais quoi ? Encore une fois, je savais bien developper dans d'autres langages mais le PHP (tout comme le C) me sont hermétique
Contribution le : 02/03/2014 22:59
|
|
Signaler |
-Flo- | 0 #19 |
|
---|---|---|
Je poste trop
Inscrit: 08/01/2005 13:41
Post(s): 15190
Karma: 12562 |
Bon ok dans ce cas on va aller au plus simple, fais juste tes includes comme suit sans te prendre la tête :
include strstr(__FILE__, '/www/', true) . '/www/scripts/references.php'; C'est pas très propre mais ça fera l'affaire.
Contribution le : 02/03/2014 23:27
|
|
Signaler |
Poum45 | 0 #20 |
|
---|---|---|
Je poste trop
Inscrit: 03/12/2007 23:03
Post(s): 59592
Karma: 4214 |
A l'espace et virgule près :
<?php include strstr(__FILE__, '/www/', true) . '/www/scripts/references.php'; ?> => erreur
Contribution le : 02/03/2014 23:31
|
|
Signaler |