97 votes

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

J'ai une structure de répertoire comme suit;

/script.php

/inc/include1.php
/inc/include2.php

/objects/object1.php
/objects/object2.php

/soap/soap.php

Maintenant, je utiliser ces objets dans les deux script.php et /soap/soap.php, j'ai pu les déplacer, mais je veux que la structure de répertoire que, pour une raison spécifique. Lors de l'exécution d' script.php le chemin de l'est - inc/include.php et lors de l'exécution d' /soap/soap.php c'est ../inc, des chemins absolus travail, /mnt/webdev/[project name]/inc/include1.php... Mais c'est un vilain solution si jamais je veux déplacer un répertoire vers un autre emplacement.

Donc, il y a un moyen d'utiliser des chemins relatifs, ou un moyen de programically générer l' "/mnt/webdev/[project name]/"?

154voto

Peter Coulton Points 12453

Cela devrait marcher

 $root = realpath($_SERVER["DOCUMENT_ROOT"]); 

Edit: ajout de l'implication de aussieviking

45voto

Kevin Points 6567

Vous pouvez utiliser des chemins relatifs...essayez __FILE__. C'est une constante PHP qui retourne toujours le chemin/nom de fichier du script, il est dans. Donc, en soap.php vous pourriez faire:

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

Le chemin d'accès complet et le nom de l' fichier. Si utilisé à l'intérieur d'une inclusion, les nom du fichier inclus est retourné. Depuis PHP 4.0.2, _FILE_ toujours contient un chemin d'accès absolu avec les liens symboliques résolu alors que dans les anciens versions il contenait chemin relatif sous certaines circonstances. (source)

Une autre solution serait de définir un chemin d'inclusion dans votre httpd.conf ou un .fichier htaccess.

6voto

Christian Hagelid Points 4795

jetez un oeil à http://au.php.net/reserved.variables

Je pense que la variable que vous recherchez est la suivante: $_SERVER["DOCUMENT_ROOT"]

6voto

Sam McAfee Points 4615

Une autre façon de gérer ce qui élimine tout besoin de comprend à tous est d'utiliser le chargement automatique de la fonctionnalité. Tout compris, votre script doit "Juste au Cas" peuvent entraver les performances. Si votre sont tous de la classe ou de l'interface de définitions, et que vous voulez charger uniquement en cas de besoin, vous pouvez surcharger la __autoload() fonction avec votre propre code pour trouver le fichier de classe et de la charge que lorsqu'il est appelé. Voici l'exemple de la notice:

function __autoload($class_name) {
    require_once $class_name . '.php';
}

$obj  = new MyClass1();
$obj2 = new MyClass2();

Aussi longtemps que vous définissez votre include_path variables par conséquent, vous n'avez pas besoin d'inclure un fichier de classe à nouveau.

5voto

Ryan Fox Points 5181

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X