web-dev-qa-db-fra.com

en utilisant php __DIR__

J'essaie de créer un fichier config.php qui définit une variable globale contenant le chemin d'accès à un répertoire appelé "fichiersprojets". L'idée est que n'importe quel fichier peut pointer sur ce répertoire, peu importe où il se trouve dans l'arborescence de fichiers. 

Puis-je utiliser __DIR__ pour cela? Quelqu'un serait-il prêt à me donner un exemple de la façon dont cela pourrait fonctionner? Je pensais à quelque chose comme ce qui suit:

Je veux définir un répertoire ici: dans le fichier /config.php

$projectfiles = __DIR__("projectfiles/")

Ensuite, je veux qu'un fichier de bibliothèque puisse utiliser cette variable dans le fichier /venders/library/generalfunctions.php

include("../../../config.php");
$file = $projectfiles/testfile.php

Suggestions?

14
Jeff

__DIR__ est certainement ce que vous recherchez. Utilisez-le pour fournir des chemins relatifs pour les fichiers requis. Je suggère fortement d'utiliser require_once ou include_once pour tous les fichiers de bibliothèque.

if( !defined( __DIR__ ) ) define( __DIR__, dirname(__FILE__) );
require_once( __DIR__ . '/../../../config.php');
.
.
.
// you code here

L'utilisation de la première ligne garantit que vous ne rencontrerez aucun problème avec PHP 5.2 et vice-versa. Cela vous permettra d'inclure des fichiers basés sur la structure de répertoires plutôt que sur le script appelé. De nombreux frameworks utilisent plutôt dirname(__FILE__), mais il est plutôt inutile de l'exécuter plusieurs fois. Il est préférable de simplement l'ajouter quelque part avec un chèque.

6
Garet Claborn

Il semble que l'architecture de cette application soit moins qu'optimale, mais sans en savoir plus, je ne peux pas en parler.

Je suggère de le définir comme une constante afin qu'il ne puisse pas être modifié et qu'il soit disponible quel que soit le champ d'application.

define('PROJECTFILES',__DIR__.'/projectfiles/');

En supposant:
/config.php
/projectfiles/include_me.php

include(PROJECTFILES.'include_me.php');

N'oubliez pas que __DIR__ référencera le répertoire dans lequel se trouve config.php. Si config.php est le dossier parent de projectfiles, la procédure ci-dessus fonctionne.