Videos streaming images jeux et buzz
Connexion






Perdu le mot de passe ?

Inscrivez-vous maintenant !
Menu Principal
Communauté


(1) 2 3 »


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 :

<?php
phpinfo();
echo realpath("path.php");
?>


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.

<html>

	<?php
		function scanLevels()
		{
			$done = 0;
			$path = '../';
			
			while($done==0)
			{
			
				if($folder = opendir($path))
				{
					while(false !== ($file = readdir($folder)))
					{
					
						if($file == 'index.php')
						{
						
							$done = 1;
							break;
							
						}
					
					}
					
					if($done==0)
					{
						$path = '../' . $path;
					}
					closedir($folder);

				}
				else
					break;
			
			}
			return $path;
		}
	
	?>

	<img src=" <?php $path = scanLevels() . 'images/image.png'; echo $path; ?>"/> 

	
</html>


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 :

@Volvik a écrit:
<?php
phpinfo();
echo realpath("path.php");
?>



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 :

@Poum45 a écrit:
Citation :

@Volvik a écrit:
<?php
phpinfo();
echo realpath("path.php");
?>



Je viens de tester et ... je ne vois pas où il m'indique un chemin comme tu le mentionne :gratte:


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): 15182
Karma: 12550
Il y a les constantes magiques qui sont particulièrement adaptées à ce genre de problèmes.

Citation :

__DIR__ : Le dossier du fichier. Si utilisé dans une inclusion, le dossier du fichier inclus sera retourné.


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): 15182
Karma: 12550
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): 15182
Karma: 12550
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 :

@Volvik a écrit:
edit : tiens voilà le fichier si tu veux pas ouvrir notepad > path.php ;-)


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 :

@-Flo- a écrit:
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... :)


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): 15182
Karma: 12550
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


 Haut   Précédent   Suivant
(1) 2 3 »






Si vous êtes l'auteur d'un élément de ce site, vous pouvez si vous le souhaitez, le modifier ou le supprimer
Merci de me contacter par mail. Déclaré à la CNIL N°1031721.