Как установить корневую папку для файлов PHP include
Я провел дни, исследуя Интернет, и я не могу найти ответ, который я пойму и смогу реализовать.
У меня есть веб-сайт, на котором я хочу использовать файлы include_once
и иметь возможность правильно просматривать веб-сайт как на локальном, так и на фактическом сервере.
Я использовал $_SERVER['DOCUMENT_ROOT']
раньше, но он не работает на локальном хосте, поэтому мне сложно обновлять и делать изменения на веб-сайте.
Что я хочу сделать, так это создать какой-то файл config.php, в котором я могу сказать, что корневая папка либо называется htdocs
, либо public_html
и "начать" поиск файлов оттуда.
Или есть ли какой-либо другой способ, которым я могу получить включенные пути для работы?
Я видел ответы, например. dirname(__FILE__)
, __DIR__
и т.д., но они никогда не объясняли, как это будет работать, где писать его в коде и т.д. Мне немного надоело находить часть ответа, а затем бегать по кругу просто попробуйте "заполнить" пробелы. Я не эксперт по PHP, просто пытаюсь сделать свою жизнь немного легче, используя ее.
Ответы
Ответ 1
dirname(__FILE__)
и __DIR__
оба одинаковые и __DIR__
поставляются с PHP 5.3
Они используются, чтобы указать, что "путь к файлу, где они вызывались".
URL: http://localhost/test/a.php
DIR: --NIX
/var/www/test/a.php
--WIN
D:\lamp\www\test\a.php
// a.php inside
<?php
echo __DIR__;
Дает вам это на linux: /var/www/test
Итак, если вам нужен параметр конфигурации во всем вашем проекте, просто определите его в своем config.php и используйте его там, где вы хотите, чтобы оба имени файла были включены.
./
config.php
index.php
header.php
footer.php
/lib
foo.php
/tmp
bar.php
./config.php
define('ROOT', __DIR__ .'/');
./index.php include_once(ROOT .'header.php'); ... include_once(ROOT .'footer.php');
i.e, используя его в tmp dir
./tmp/bar.php include_once(ROOT .'lib/foo.php');
UPDATE
// config.php
<?php
define("ROOT", __DIR__ ."/");
Итак, мы используем это для index.php
, чтобы включить banner.php
, а banner.php
ждет в ./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
// ...
Итак, сначала вы должны включить config.php туда, где вам это нужно.
Я думаю, это является основным, насколько это необходимо...
UPDATE
Итак, ваша проблема не в системе PHP include
, а в любом случае вопрос...:)
Если ваш путь изображения изменяется (поэтому не фиксирован), вы можете сделать это следующим образом:
// 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">
Ответ 2
Я обычно настраиваю то, что вы упомянули, config.php в каталоге include и имеет следующую строку: define('BASE_PATH', str_replace('/include', '', dirname(__FILE__)));
("/include должен быть любой каталог, в котором находится файл config.php, если у вас есть это в корневом каталоге, вы можете просто использовать define('BASE_PATH', dirname(__FILE__));
). Когда я захочу включить любой другой файл после этого, я использую include_once(BASE_PATH . '/directory/file.php');
.
Примечание: эта концепция для меня не является оригинальной.
Ответ 3
Существует функция, называемая getcwd()
, которая вернет текущую рабочую папку. Если вы назовете это в самом начале вашего script, вы можете сохранить его, как правило, в константу с define()
.
define('PROJECT_ROOT', getcwd());
Ответ 4
Чтобы получить/отобразить текущий рабочий каталог, php имеет встроенную функцию для
echo getcwd() . "\n";
Будет отображаться текущий каталог вашего php файла, который сейчас выполняется.
Ответ 5
Вы также можете изменить путь включения, например,
$dir = dirname(__FILE__);
set_include_path($dir . '/../library' . PATH_SEPARATOR . $dir . '/../engine' . PATH_SEPARATOR . get_include_path());