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.
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">
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.
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.
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());
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());