web-dev-qa-db-fra.com

PHP comment trouver la racine de l'application?

J'ai des problèmes avec mes fichiers d'inclusion. Je ne semble pas être capable de comprendre comment construire mes URL lorsque j'utilise require_once ('somefile.php'). Si j'essaie d'utiliser un fichier d'inclusion à plusieurs endroits où les structures de répertoire sont différentes, j'obtiens une erreur indiquant que le fichier d'inclusion est introuvable.

En asp.net, pour obtenir le chemin racine de mon application, je peux utiliser ~/directory/file.aspx. La barre oblique tild indique toujours que je fais référence à la racine de mon site et que je trouve le fichier, quelle que soit l’origine de la demande sur mon site. Il fait toujours référence à la racine et cherche le fichier à partir de là. 

QUESTION: Comment puis-je obtenir le chemin racine de mon site? Comment puis-je le faire pour pouvoir réutiliser mes fichiers d'inclusion à partir de n'importe où sur mon site? Dois-je utiliser des chemins absolus dans mes URL?

Je vous remercie!

23
anon445699

Il y a $_SERVER['DOCUMENT_ROOT'] qui devrait avoir le chemin racine de votre serveur Web.

Edit: Si vous regardez la plupart des principaux programmes php. Lorsque vous utilisez le programme d'installation, vous entrez généralement le chemin d'accès complet au dossier de l'application. Le programme d’installation ne fera que mettre cela dans un fichier de configuration inclus dans toute l’application. Une option consiste à utiliser un fichier auto prepend pour définir la variable. une autre option consiste à simplement include_once () le fichier de configuration sur chaque page dont vous avez besoin. La dernière option que je conseillerais est d'écrire votre application en utilisant bootstrapping , où vous dirigez toutes les demandes vers un seul fichier (généralement avec url_rewrite). Cela vous permet de définir/inclure facilement des variables de configuration dans un emplacement et de les rendre disponibles dans tous les scripts.

20
Jonathan Kuhn

C'est bien de pouvoir utiliser le même code en haut de chaque script et de savoir que votre page se chargera correctement, même si vous vous trouvez dans un sous-répertoire. J'utilise ceci, ce qui implique que vous sachiez comment s'appelle votre répertoire racine (typiquement, 'htdocs' ou 'public_html':

defined('SITEROOT') or define('SITEROOT', substr($_SERVER['DOCUMENT_ROOT'], 0, strrpos($_SERVER['DOCUMENT_ROOT'], 'public_html')) . 'public_html');

SITEROOT étant défini de manière cohérente, vous pouvez ensuite accéder à un fichier de configuration et/ou à des composants de page sans adapter les chemins d'accès script par script, par ex. dans un fichier de configuration stocké en dehors de votre dossier racine:

require_once SITEROOT . "/../config.php";
0
Geoff Kendall

Vous devez utiliser les constantes magiques intégrées pour trouver des fichiers. __FILE__ et __DIR__. Si vous êtes sur PHP <5.3, vous devriez utiliser dirname(__FILE__)

Par exemple.

require_once __DIR__.'/../../include_me.php';

$_SERVER['DOCUMENT_ROOT'] n'est pas toujours garanti pour retourner ce que vous attendez. 

0
Petah