web-dev-qa-db-fra.com

Comment définir le dossier racine pour PHP inclure des fichiers

J'ai passé des jours à faire des recherches sur Internet et je ne trouve pas la réponse que je comprendrai et que je pourrai mettre en œuvre. 

J'ai le site Web sur lequel je veux utiliser les fichiers include_once et pouvoir le visualiser correctement à la fois sur localhost et sur le serveur actuel. 

J'ai déjà utilisé $_SERVER['DOCUMENT_ROOT'] auparavant, mais cela ne fonctionne pas sur l'hôte local et il m'est donc difficile de mettre à jour et d'effectuer les modifications sur le site Web. 

Ce que je veux faire est de créer une sorte de fichier config.php dans lequel je peux dire que le dossier racine est appelé htdocs ou public_html et "commencer" à chercher des fichiers à partir de là.

Ou y a-t-il un autre moyen d'obtenir des chemins d'accès au travail?

J'ai vu des réponses avec par exemple dirname(__FILE__), __DIR__, etc. mais ils n’ont jamais expliqué comment cela fonctionnerait, où écrire dans le code, etc. dans "les lacunes. Je ne suis pas un expert PHP, j'essaie simplement de me rendre la vie un peu plus facile en l'utilisant.

15
Vetaxili

dirname(__FILE__) et __DIR__ identiques et __DIR__ sont fournis avec PHP 5.3

Ceux-ci sont utilisés afin d'indiquer que "le chemin du fichier où ils ont appelé".

 URL: http: //localhost/test/a.php

DIR: --NIX 
 /var/www/test/a.php
 --GAGNER
 D:\lamp\www\test\a.php 

 // a.php est à l'intérieur 
 & Lt? Php 
 Echo __DIR __; 

Vous donne ceci sur linux: /var/www/test

Ainsi, si vous avez besoin d’un paramètre de configuration dans l’ensemble de votre projet, définissez-le simplement dans votre fichier config.php et utilisez-le à l’endroit où vous voulez le nom de fichier à inclure.

./
 config.php 
 index.php 
 header.php 
 footer.php 
 /lib
 foo.php 
 /tmp
 bar.php 

./config.phpdefine('ROOT', __DIR__ .'/');

./index.php include_once(ROOT .'header.php'); ... include_once(ROOT .'footer.php');

c'est-à-dire en l'utilisant dans tmp dir

./tmp/bar.php include_once(ROOT .'lib/foo.php');

METTRE À JOUR

// config.php
<?php
define("ROOT", __DIR__ ."/");

Donc, nous utilisons ceci pour index.php pour inclure banner.php et banner.php attend dans ./banners/banner.php;

// index.php and the very first line!
<?php
include_once("config.php");
?>
// some html stuff
// ...
<?php include_once(ROOT ."banners/banner.php"); ?>
// some more html stuff
// ...

Donc, vous devriez d'abord inclure config.php là où vous en avez besoin. 

Je pense que c'est fondamental autant que nécessaire ...

METTRE &AGRAVE; JOUR

Donc, votre problème n’est pas le système PHP include, mais une question, de toute façon ... :)

Si le chemin de votre image est en train de changer (donc pas fixe), vous pouvez faire comme ceci;

// config.php
define("ROOT", __DIR__ ."/");
define("HTTP", ($_SERVER["SERVER_NAME"] == "localhost")
   ? "http://localhost/your_work_folder/"
   : "http://your_site_name.com/"
);

// banner.php
<img src="<?php print HTTP; ?>images/banner.gif">
31
K-Gun

Je configure normalement ce que vous avez mentionné, un fichier config.php dans un répertoire include et la ligne suivante: define('BASE_PATH', str_replace('/include', '', dirname(__FILE__))); ("/ include doit être le répertoire dans lequel se trouve votre fichier config.php, si vous l'avez dans le répertoire racine , vous pouvez simplement utiliser define('BASE_PATH', dirname(__FILE__));). Lorsque je veux inclure tout autre fichier par la suite, j’utilise include_once(BASE_PATH . '/directory/file.php');.

note: ce concept n'est pas original pour moi par aucun moyen.

3
jpevarnek

Pour obtenir/afficher le répertoire de travail actuel, php a une fonction intégrée pour cela

 echo getcwd() . "\n";

Cela affichera le répertoire actuel de votre fichier php qui est en train de s'exécuter.

1
Pir Fahim Shah

Il existe une fonction appelée getcwd() qui renvoie le dossier de travail en cours. Si vous appelez cela au tout début de votre script, vous pouvez le stocker, généralement dans une constante avec define().

define('PROJECT_ROOT', getcwd());
1
Whisperity

Vous pouvez également modifier le chemin d'inclusion, par exemple,

$dir = dirname(__FILE__);
set_include_path($dir . '/../library' . PATH_SEPARATOR . $dir . '/../engine' . PATH_SEPARATOR . get_include_path()); 
0
JohnK