42 votes

Comment définir un chemin d'inclusion absolu en PHP?

En HTML, je peux trouver un fichier depuis le serveur web de la racine du dossier par le début, le chemin du fichier par "/". Comme:

/images/some_image.jpg

Je peux mettre ce chemin d'accès dans n'importe quel fichier dans un sous répertoire, et il sera fait à l'image de droite.

Avec PHP, j'ai essayé quelque chose de similaire:

include("/includes/header.php");

...mais qui ne fonctionne pas.

Je pense que cette page est de dire que je peux mettre en include_path une fois et après cela, il sera supposé. Mais je ne suis pas tout à fait obtenir la syntaxe. Les deux exemples de commencer par une période, et il dit:

À l'aide d'un . dans l'include path permet par rapport comprend que cela signifie que le répertoire courant.

Par rapport comprend sont exactement ce que je ne veux.

Comment puis-je m'assurer que tous mes comprend point à l' root/includes le dossier? (Bonus: et si je veux mettre ce dossier à l'extérieur de l'annuaire public?)

Précisions

Mes fichiers de développement sont actuellement desservies par XAMPP/Apache. Cela affecte le chemin absolu? (Je ne suis pas encore sûr de ce que le serveur de production sera.)

Mise à jour

Je ne sais pas ce que mon problème était ici. L' include_path chose que j'ai référencé ci-dessus est exactement ce que je cherchais, et que la syntaxe n'est pas vraiment à confusion. Je l'ai essayé et il fonctionne très bien.

Une chose qui me vient à l'esprit est que certaines personnes ont pensé que "//chemin" est un "chemin absolu" parce qu'ils ont assumé le système d'exploitation Linux. Ce serveur est Windows, de sorte qu'un chemin d'accès absolu devrait commencer par le nom du lecteur.

De toute façon, le problème est résolu! :)

49voto

Rob Prouse Points 9193

Ce que je fais, c'est mettre un config.php fichier dans mon répertoire racine. Ce fichier est inclus par tous les fichiers PHP dans mon projet. Dans ce config.php fichier, je puis effectuez les opérations suivantes;

define( 'ROOT_DIR', dirname(__FILE__) );

Puis dans tous les fichiers, je sais ce que la racine de mon projet et peut faire des trucs comme ça

require_once( ROOT_DIR.'/include/functions.php' );

Désolé, pas de points bonus pour obtenir à l'extérieur de l'annuaire public ;) Cela a aussi le malheureux effet secondaire que vous avez encore besoin d'un chemin relatif pour trouver config.php mais il fait le reste de votre comprend beaucoup plus facile.

27voto

Nathan Long Points 30303

Une stratégie

Je ne sais pas si c'est la meilleure façon, mais cela a fonctionné pour moi.

 $root = $_SERVER['DOCUMENT_ROOT'];
include($root."/path/to/file.php");
 

8voto

gnud Points 26854

L'include_path paramètre fonctionne comme $PATH dans unix (il y a un paramètre similaire dans Windows aussi).Il contient de multiples noms de répertoires, séparés par des deux-points (:). Lorsque vous incluez ou besoin d'un fichier, ces répertoires sont recherchés dans l'ordre, jusqu'à ce qu'une correspondance est trouvée, ou de tous les répertoires sont recherchés.

Donc, assurez-vous que votre application inclut toujours à partir de votre chemin si le fichier existe, il vous suffit de mettre votre dir premier dans la liste des répertoires.

ini_set("include_path", "/your_include_path:".ini_get("include_path"));

De cette façon, votre répertoire est recherché d'abord, puis l'original chemin de recherche (par défaut le répertoire courant, puis de POIRE). Si vous n'avez pas de problème de modification de l'include_path, alors c'est la solution pour vous.

5voto

Jacco Points 12528

Il n'y a rien à inclure/exiger que vous interdit d'utiliser absolue d'un chemin. donc ton exemple

include('/includes/header.php');

devrait fonctionner parfaitement. En supposant que le chemin d'accès et le fichier sont justes et les autorisations correctes ensemble.
(et ainsi vous permettre d'inclure tout fichier que vous voulez, dans ou en dehors de la racine du document)

Ce comportement est cependant considéré comme un possible risque de sécurité. Par conséquent, l'administrateur système peut définir l' open_basedir directive.

Cette directive configure dans lequel vous pouvez inclure/besoin de vos fichiers à partir et c'est peut-être votre problème.
Certains panneaux de contrôle (plesk, par exemple, définir la présente directive, être la même que la racine du document par défaut.

comme pour l' '.' syntaxe:

/home/nom d'utilisateur/public_html <- chemin absolu 
public_html < chemin relatif 
./public_html <- même comme le chemin d'accès ci-dessus 
../nom d'utilisateur/public_html <- un autre chemin d'accès relatif 

3voto

kunde Points 40

Une autre option consiste à créer un fichier dans le répertoire $_SERVER['DOCUMENT_ROOT'] avec la définition de votre chemin absolu.

Par exemple, si votre répertoire $_SERVER['DOCUMENT_ROOT'] est

 C:\wamp\www\
 

créer un fichier (ie my_paths.php ) contenant ce

 <?php if(!defined('MY_ABS_PATH')) define('MY_ABS_PATH',$_SERVER['DOCUMENT_ROOT'].'MyProyect/')
 

Maintenant, il vous suffit d'inclure dans chaque fichier de votre dossier MyProyect ce fichier ( my_paths.php ), afin que vous puissiez utiliser MY_ABS_PATH comme chemin absolu pour MyProject.

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