web-dev-qa-db-fra.com

PHP nécessite un fichier du répertoire principal

J'ai plusieurs sous-domaines contenus dans leur propre répertoire au-dessus de mon site racine et un dossier d'actifs dans mon répertoire racine. Par exemple:

/
/assets/
/forums/
/blog/

J'essaie d'exiger () des fichiers sur des pages php dans le répertoire racine et les sous-répertoires, par exemple, assets/include/form.php est requis () dans index.php dans le répertoire racine et dans index.php le répertoire des forums. Cependant, à l'intérieur de form.php, une autre condition est nécessaire pour essayer d'obtenir un autre fichier contenu dans le répertoire include.

Je n'arrive pas à trouver un moyen d'exiger un fichier à l'intérieur de ce formulaire.php où il fonctionnera à la fois sur index.php du répertoire racine et sur index.php du répertoire du forum. 

Existe-t-il un moyen de demander explicitement un fichier à partir du répertoire racine?

18
Lucas Penney

Il y a plusieurs façons d'y parvenir.

Utiliser le chemin relatif à partir de form.php

require_once __DIR__ . '/otherfile.php';

Si vous utilisez PHP 5.2 ou une version antérieure, vous pouvez utiliser dirname(__FILE__) au lieu de __DIR__. En savoir plus sur les constantes magiques ici .

Utilisez la variable $_SERVER['DOCUMENT_ROOT']

Il s'agit du chemin absolu vers la racine de votre document: /var/www/example.org/ ou C:\wamp\www\ sous Windows.

La racine du document est le dossier où se trouvent vos fichiers de niveau racine: http://example.org/index.php serait en $_SERVER['DOCUMENT_ROOT'] . '/index.php'

Utilisation: require_once $_SERVER['DOCUMENT_ROOT'] . '/include/otherfile.php';

Utilisez un autochargeur

Ce sera probablement un peu excessif pour votre application si c'est très simple.

Configurer les chemins d'inclusion de PHP

Vous pouvez également définir les répertoires dans lesquels PHP recherchera les fichiers lorsque vous utiliserez require() ou include(). Découvrez set_include_path()ici .

Utilisation: require_once 'otherfile.php';


Remarque:

Je vois que certaines réponses suggèrent d’utiliser l’URL dans require(). Je ne suggérerais pas cela car le fichier PHP serait analysé avant son inclusion. Cela convient pour les fichiers HTML ou les scripts PHP produisant du code HTML, mais si vous ne disposez que d'une définition de classe, le résultat est vide.

46
CheeseSucker

Si un niveau supérieur utilise:

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

si deux niveaux plus haut:

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

Pour plus, visitez: http://forums.htmlhelp.com/index.php?showtopic=2922

0
Jithu Wilson C
  • supposons que vous avez pgm1.php danswww.domain.com/dir1/dir2/dir3/pgm1.php, qui inclut ou nécessite 'dirA/inc/Xpto.php'.
  • et un autre pgm2.php dans www.domain.com/dirZ1/dirZ2/pgm2.php, qui inclut ou requiert le même 'dirA/inc/Xpto.php'.
  • et votre configuration d'hôte non autorisée nécessite/inclut ' http://www.domain.com/ ......'
  • Donc ... vous pouvez utiliser ceci, à la fois dans pgm1.php & pgm1.php et REQUIRE ou
    INCLUDE fonctionne!

    function rURI($p){
       for($w='',$i=1;$i<(count(explode('/',$_SERVER['PHP_SELF']))-1);$i++,$w.='../');return
       $w.$p; }
    

    require rURI ('dirA/inc/Xpto.php'); // chemin depuis la racine

0
jorge soares

Vous avez 2 solutions. Vous pouvez utiliser l’URL complète du fichier. Par exemple, si votre fichier se trouve dans le répertoire 'lib', vous pouvez utiliser: Require_once (' http://www.example.com/lib/myfile.php ')

ou

Vous pouvez essayer la fonction $_SERVER['DOCUMENT_ROOT'] dans PHP mais ce n’est pas toujours à l’abri.

0
xXPhenom22Xx