10
votes

Comment utiliser un PHP inclut à travers plusieurs répertoires / sous-répertoires avec des chemins relatifs

J'ai des difficultés avec des chemins dans un système CMS, je tente de construire, j'ai essentiellement un dossier avec mes fichiers Header.php et Feather.php à l'intérieur.

Ceux-ci sont inclus dans index.php et fonctionnent bien. Mais lorsque je tente d'utiliser la même chose inclut dans un fichier dans mon sous-répertoire administrateur, les images et les CSS sont cassés, évidemment parce que le chemin relatif est maintenant faux.

Donc, ma question est, comment puis-je surmonter cela?

Après avoir lu certaines des autres questions ici et diverses autres sources, je pense que les chemins absolus sont la voie à suivre, mais j'ai toujours utilisé des chemins relatifs, de sorte que les différents concepts d'utilisation de fichiers de configuration pour spécifier un chemin absolu sont déroutants. moi.

Je parviens habituellement à travailler des choses pour moi-même, mais cela a été une longue journée et je suis excitée!


0 commentaires

5 Réponses :


21
votes

i habituellement avoir un fichier appelé config dans la racine de mon application et, je définis une constante pour le chemin de la base et quelques autres: xxx

et j'inclus mes fichiers comme xxx

de cette façon, je peux placer ma touche dans n'importe quel répertoire, plus je peux déplacer des fichiers sans trop de soucier.

Aussi à l'aide d'un chemin complet permet d'inclure plus vite


1 commentaires

OK, donc je définis le chemin constant à mon répertoire racine et stocke ce fichier (config.php ou similiar) dans ma rirectory racine d'applications. Je dois ensuite inclure le fichier CONFIG.PHP dans tous mes fichiers, de cette façon, je peux appeler la constante et avoir le chemin racine disponible pour moi. Je peux ensuite utiliser le chemin racine pour créer un lien vers mon CSS et mes images, de cette façon que mon header.php et mae-pied.php fiches fonctionneront dans n'importe quel répertoire?



3
votes

ou ...

Inclure ($ _ Server ['Document_root']. '/ Inclus / Header.PHP');


1 commentaires

Certes, mais compte tenu d'utiliser des chemins relatifs pour commencer avec je suis sûr que cela répond toujours à la question et avec une brièveté no moins.



5
votes

Je préfère définir les variables d'environnement (dans Apache, en utilisant .htaccess ou le .conf). De cette façon, vous pouvez déplacer tous vos fichiers librement n'importe où dans webroot et il aura accès à ces variables.

require_once getenv('lib')."Configs/Config_".getenv('environ').".php";


1 commentaires

Salut merci setenv sauvegarder ma journée. PHP CGI Impossible d'utiliser php_value Inclure_path dans le fichier htaccess. Configuration PHP Inclure le chemin globalement est impossible de mon googling. Donc, cet appareil Setenv AppPPath "/ Accueil / Compte /" peut être utilisé dans tous les PHP incluent Getenv ("AppPath"). 'Comprend / *. PHP'. C'est mieux que d'utiliser php.ini ou set_include_path () ou INI_SET () qui est difficile à maintenir.



1
votes

Les chemins relatifs et absolus en PHP sont un peu fragiles car ils ne dépendent pas uniquement du répertoire actuel du fichier, mais également du répertoire de travail actuel.

Vous avez donc besoin d'une solution en deux parties. P>

Premièrement, vous avez besoin d'un redirecteur. Fondamentalement, il s'agit d'un fichier incluant servant de point unique pour toutes les autres pages. Son travail est d'aller inclure le reste de votre infrastructure. Toutes vos pages appellent ce redirecteur et seul ce redirecteur (mais vous pouvez les chaîner). P>

Ce redirecteur fait maintenant P>

 include_once dirname(__FILE__).'/include/include.php';


0 commentaires

0
votes

J'ai eu ce problème similaire et j'ai posté cette requête dans ce lien dans ce lien. L'URL est: problème avec PHP incluent avec le chemin global .

Tout en travaillant sur les solutions données par des personnes et en regardant divers threads (y compris celui-ci, que j'avais cité dans ma solution à la partie inférieure de mon poste), j'ai eu un chemin! J'avais aussi posté la solution. Cela peut aider quelqu'un qui fait face à un problème similaire.


0 commentaires