Comment inclure des fichiers PHP nécessitant un chemin absolu ?

J'ai une structure de répertoire comme celle-ci :

script.php

inc/include1.php
inc/include2.php

objets/objet1.php
objets/objet2.php

savon/savon.php

Maintenant, j'utilise ces objets à la fois dans script.php et /soap/soap.php, je pourrais les déplacer, mais je veux une structure de répertoire comme celle-là pour une raison spécifique. Lors de l'exécution de script.php, le chemin d'inclusion est inc/include.php et lors de l'exécution de /soap/soap.php, c'est ../inc, les chemins absolus fonctionnent, 7 Mais c'est une solution laide si jamais je veux déplacer le répertoire vers un autre emplacement.

Y a-t-il donc un moyen d'utiliser des chemins relatifs, ou un moyen de générer par programme le '/mnt/webdev/[project name]/' ?

请先 登录 后评论

3 réponses

Ryan Fox

Vous pouvez définir une constante avec le chemin d'accès au répertoire racine de votre projet, puis la placer au début du chemin.

请先 登录 后评论
Polsonby

@Flubba, cela me permet-il d'avoir des dossiers dans mon répertoire d'inclusion ? flat include répertoires me donne des cauchemars. car tout le répertoire des objets doit être dans le répertoire inc.

Oh oui, absolument. Ainsi, par exemple, nous utilisons une seule couche de sous-dossiers, généralement :

require_once('library/string.class.php')

Vous devez faire attention à ne pas trop vous fier au chemin d'inclusion dans les sites à très fort trafic, car php doit parcourir le répertoire actuel, puis tous les répertoires du chemin d'inclusion afin de voir si votre fichier est là et cela peut ralentir les choses si vous vous faites marteler.

Ainsi, par exemple, si vous faites du MVC, vous placeriez le chemin d'accès à votre répertoire d'application dans le chemin d'inclusion, puis spécifiez la référence aux éléments du formulaire

'model/user.class'
'controllers/front.php'

ou quoi que ce soit.

Mais d'une manière générale, cela vous permet simplement de travailler avec des chemins très courts dans votre PHP qui fonctionneront de n'importe où et c'est beaucoup plus facile à lire que tout ce malarkey racine du document realpath.

L'avantage de ces alternatives basées sur des scripts que d'autres ont suggérées est qu'elles fonctionnent n'importe où, même sur des boîtes partagées ; définir le chemin d'inclusion nécessite un peu plus de réflexion et d'efforts, mais comme je l'ai mentionné, vous pouvez commencer à utiliser __autoload, ce qui est tout simplement le plus cool.

请先 登录 后评论
Darryl Hein

Une autre option, liée à celle de Kevin, est d'utiliser __FILE__, mais à la place de remplacer le nom du fichier php depuis celui-ci :

<?php

$docRoot = str_replace($_SERVER['SCRIPT_NAME'], '', __FILE__);
require_once($docRoot . '/lib/include.php');

?>

Je l'utilise depuis un moment. Le seul problème est que parfois vous n'avez pas $_SERVER['SCRIPT_NAME'], mais parfois il y a une autre variable similaire.

请先 登录 后评论
  • 6 abonnés
  • 0 favoris,536 Feuilleter
  • Xenph Yan posée à 2023-03-17 17:10