web-dev-qa-db-fra.com

Comment formater un PHP include () chemin absolu (plutôt que relatif)?

Sur différentes pages de mon site Web PHP et dans divers répertoires imbriqués, je souhaite inclure un fichier spécifique dans un chemin relatif à la racine.

Quelle commande unique puis-je mettre sur ces deux pages ...

<?php include('/includes/analytics.php'); ?>

Est-il important que cela soit hébergé dans IIS sous Windows?

22
Zack Peterson

Si vous donnez un chemin absolu à include () ou require () (ou aux versions * _once), ce fichier sera inclus. Un chemin absolu commence par "/" sous unix, par une lettre de lecteur et deux points sous Windows.

Si vous donnez un chemin relatif (tout autre chemin), PHP recherchera les répertoires dans la valeur de configuration "chemin_inclusion" dans l'ordre, jusqu'à ce qu'une correspondance soit trouvée ou qu'il n'y ait plus de répertoires à rechercher.

Donc, en bref, pour inclure un nom de fichier absolu, donnez un nom de fichier absolu. Voir aussi la fonction realpath () .

Si vous voulez définir votre propre inclusion "root", jetez un oeil à cette question (plus précisément ma réponse bien sûr :-)

5
gnud

Vous pouvez simplement utiliser include $_SERVER['DOCUMENT_ROOT'] . "/includes/analytics.php";

24
J Cooper

Du point de vue de PHP, root est le sommet du système de fichiers sur le serveur Web, pas la racine du point de vue du navigateur Web.

La plupart des gens font l’un des choix ci-dessous.

Définissez une constante dans un fichier de configuration global et utilisez-la dans chaque appel pour demander/inclure.

Ou ils utilisent un code comme celui-ci.

require_once realpath(dirname(__FILE__).'/config.php');
require_once realpath(dirname(__FILE__).'/lib/Database.php');

L'utilisation des variables d'environnement peut être dangereuse dans certains cas et être à l'origine de problèmes de sécurité.

9
Zoredache

Comme @Stefan Mai le dit, PHP n'a pas de chemin "racine" mais vous pouvez en définir un très facilement. La plupart des sites ont une page incluse à chaque fois (fichier de configuration, par exemple), à ​​laquelle vous pouvez ajouter:

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

Puis utilisez include ROOT. '/includes/analytics.php';

La directive auto_prepend, que vous pouvez utiliser dans .htaccess sous Apache - n’est pas sûre de la configurer sous IIS (même si vous pouvez en avoir une globale dans PHP ini).

8
Greg

Cela marche.

<?php include('c:/inetpub/example.com/includes/analytics.php'); ?>

Je devrai faire de la partie c:/inetpub/example.com/ une sorte de variable globale pour que ce soit plutôt portable d'un serveur à l'autre.

1
Zack Peterson

Utilisez .. pour monter un répertoire. Donc dans pageone.php

include 'includes/analytics.php';

dans pagetwo.php

include '../includes/analytics.php';

Autant que je sache, il n'y a pas de notion de "racine" dans PHP, mais vous pouvez la définir si vous le souhaitez. Bonne chance!

1
Stefan Mai

Le tilde étant interprété comme un caractère spécial par le shell, son utilisation dans le code PHP ne fonctionnera pas quel que soit le système d'exploitation.

Si vous essayez d'accéder à quelque chose de relatif par rapport au répertoire de base d'un utilisateur, vous pouvez essayer getenv() - je suis presque certain que Windows définit une variable d'environnement équivalente à $HOME.

0
user42092

La façon dont j'ai trouvé est:

<?php include $_SERVER['DOCUMENT_ROOT'].'\\Your\\Site\\Path.php' ?>

\\ est nécessaire lorsque vous avez un caractère spécial qui pourrait être échappé (c'est-à-dire\n), de sorte que \\ est\sur la chaîne.

Parce que vous êtes dans Windows, vous devez utiliser\au lieu de /

0
Santiago