Как установить корневую папку для файлов PHP include
Я провел дни, исследуя интернет, и я не могу найти ответ, который я пойму и смогу реализовать.
у меня есть сайт, на котором я хочу использовать include_once
файлы и иметь возможность просматривать веб-сайт должным образом как на localhost, так и на фактическом сервере.
я использовал $_SERVER['DOCUMENT_ROOT']
раньше, но он не работает на localhost, поэтому мне трудно обновить и сделать изменения на веб-сайте.
то, что я хочу сделать, это создать какую-то конфиг.файл php, в котором я могу сказать, что корневая папка называется htdocs
или public_html
и "начать" поиск файлов оттуда.
или есть ли другой способ я могу включить пути на работу?
Я видел ответы, например,dirname(__FILE__)
, __DIR__
, etc. но они никогда не объясняли, как это будет работать, где писать его в коде и т. д. Я немного устал и устал от поиска части ответа, а затем бегать по кругу, просто попробуйте "заполнить" пробелы. Я не эксперт PHP, просто пытается сделать мою жизнь немного проще, используя его.
5 ответов
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's inside <?php echo __DIR__;
дает вам это на linux:/var/www/test
Итак, если вам нужен параметр конфигурации во всем вашем проекте, просто определите его в своей конфигурации.PHP и использовать его там, где вы хотите, как имя файла, который будет включен.
./ config.php index.php header.php footer.php /lib foo.php /tmp bar.php
./конфигурация.РНР
define('ROOT', __DIR__ .'/');
./индекс.РНР include_once(ROOT .'header.php'); ... include_once(ROOT .'footer.php');
i.e, используя его в tmp dir
./ tmp / bar.в PHP include_once(ROOT .'lib/foo.php');
обновление
// 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 сначала туда, где вам это нужно.
я думаю, это основное, насколько необходимо...
обновление
Итак, ваша проблема это не 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">
Я обычно настраиваю то, что вы упомянули, конфигурацию.php в каталоге include, и в нем есть следующая строка:define('BASE_PATH', str_replace('/include', '', dirname(__FILE__)));
("/include должен быть любым каталогом вашей конфигурации.php-файл, если он у вас в корневом каталоге, вы можете просто использовать define('BASE_PATH', dirname(__FILE__));
). Когда я хочу включить любой другой файл после этого, я использую include_once(BASE_PATH . '/directory/file.php');
.
Примечание: эта концепция никоим образом не является оригинальной для меня.
существует функция под названием getcwd()
возвращает текущую рабочую папку. Если вы вызываете это в самом начале своего скрипта, вы можете сохранить это, обычно в константу с define()
.
define('PROJECT_ROOT', getcwd());
чтобы получить / отобразить текущий рабочий каталог, php имеет встроенную функцию для этого
echo getcwd() . "\n";
это отобразит текущий каталог вашего php-файла, который сейчас выполняется.
вы также можете изменить путь включения, например,
$dir = dirname(__FILE__);
set_include_path($dir . '/../library' . PATH_SEPARATOR . $dir . '/../engine' . PATH_SEPARATOR . get_include_path());