Как установить корневую папку для файлов 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
&lt?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());