Salut !
require, include, require_once ou include_once, sont des fonctions que je trouve MAGIQUE, parce qu'elle ne fonctionne pas selon tout ce que l'on pourrait attendre...
En fait, le require dépend de l'url de ta page, mais peut aussi dépendre de l'url de ton fichier qui va faire le require.
Je crois que le plus simple est d'expliquer par un exemple :
Soient :
/index.php
/fich1.php
/dos1/fich2.php
/dos1/fich3.php
/dos1/dos2/fich4.php
index.php fait un require sur "dos1/fich2.php".
require "dos1/fich2.php";
et fich2.php veut récupérer fich1.php, fich3.php et fich4.php.
dans ce cas, fich2.php contiendra :
require "fich1.php";
require "dos1/fich3.php";
require "fich3.php";
require "dos2/fich4.php";
require "dos1/dos2/fich4.php";
Ce qui parait tout à fait logique si l'on résonne en fonction de la page index.php qui a appelé fich2.php.
Mais ce qui est étonnant est qu'en raisonnant en fonction de fich2.php cela fonctionne aussi :
require "fich1.php"; // pas en fonction de fich2.php
require "fich3.php";
require "dos2/fich4.php";
Et ce qui est encore plus étonnant et illogique est que cela :
require "../fich1.php";
à la place de
require "fich1.php";
ne fonctionne pas... bien que l'on raisonne en fonction de fich2.php...
Bilan, si tu ne veux pas te prendre la tête, raisonne uniquement en fonction de la page que tu appelles, ou alors ne fait pas de require d'un fichier se trouvant dans un dossier parent.