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