8768 sujets

Développement web côté serveur, CMS

Bonjour,

Je vais essayer d'être assez précis:
la structure :

index.php
images
   image.jpg
script
    monscript.php
themes
    default
        home.php
        header.php

Chemins relatifs, chemin absolu je pense avoir compris leur utilisation.
Et j'ai bien lu aussi que lorsqu'on faisait un lien dans un fichier inclus, le chemin relatif de celui-ci était à partir de l'appelant et non à partir du fichier inclus.
C'est cela dont je voudrais avoir confirmation.
Dans la structure ci-dessus,
index.php

include ( ./themes/default/home.php)

home.php

include ( ./script/monscript.php)
include ( ./themes/default/header.php)
<img src="./images/image.jpg /> 

et non pas

include (../../script/monscript.php)
include (header.php)
<img src="../../images/image.jpg /> 

Modifié par cpalo (18 Nov 2017 - 10:14)
<h1>home.php</h1>

<h2>./script/monscript.php</h2>
<?php
include('./script/monscript.php');
?>
<br>

<h2>./themes/default/header.php</h2>
<?php
include('./themes/default/header.php');
?>
<br>

<hr>

<h2>../../script/monscript.php</h2>
<?php
include('../../script/monscript.php');
?>
<br>

<h2>header.php</h2>
<?php
include('header.php');
?>
<br>

<img src="./images/image.jpg">
<img src="../../images/image.jpg">

PHP Warning: include(../../script/monscript.php): failed to open stream: No such file or directory in ...test/themes/default/home.php on line 19
PHP Warning: include(): Failed opening '../../script/monscript.php' for inclusion (include_path='.:/usr/share/php') in ...test/themes/default/home.php on line 19

Les fichiers sont inclus suivant le chemin du fichier fourni ; si aucun n'est fourni, l'include_path sera vérifié. Si le fichier n'est pas trouvé dans l' include_path, include vérifiera dans le dossier du script appelant et dans le dossier de travail courant avant d'échouer.

Si un chemin est défini, absolu (commençant par une lettre de lecteur suivie de \ pour Windows, ou / pour Unix/Linux) ou relatif (commençant par . ou ..), l'include_path sera ignoré.
Utiliser include($_SERVER['DOCUMENT_ROOT'].'/script/monscript.php'); ou include("{$_SERVER['DOCUMENT_ROOT']}/script/monscript.php"); peut être une solution.
Modifié par loisir (18 Nov 2017 - 14:21)
La solution include($_SERVER['DOCUMENT_ROOT']. est l'une de celles que j'utilise.
Mais ce que je voulais surtout savoir c'est si , c'est à partir de mon fichier index.php que j'appelle home.php ( qui peut aussi appeler d'autres pages via un menu) , tous les chemins ( quels que soit l'emplacement de leur fichier) seront définis à partir de index.php?
En résumé, l'emplacement sera défini selon la racine, comme défini dans la configuration du serveur.

Utilise
include("{$_SERVER['DOCUMENT_ROOT']}/script/monscript.php");
dans index.php
ou home.php

ça fonctionne.

Si index.php inclut home.php
home.php contiendra
include("{$_SERVER['DOCUMENT_ROOT']}/script/monscript.php");

Utiliser require_once() est peut être une solution plus adaptée.

Pour des balises html utilise un chemin absolu /repertoire/fichier.extension
Modifié par loisir (18 Nov 2017 - 22:03)
Meilleure solution