лучший способ получить / создать значения SITE_ROOT и SERVER_ROOT в PHP? - PullRequest
4 голосов
/ 03 июня 2010

Мне нужно 2 разных пути, один для включений и один для js / css и т. Д. Я использую mod_rewrite. Ниже работает нормально ....

В настоящее время все мои файлы содержат это наверху

define('SERVER_ROOT',   'C:/wamp/www/site_folder/');
define('SITE_ROOT',     'http://localhost/site_folder/');

и тогда файлы называются так:

require_once SERVER_ROOT . 'st_wd_assets/inc/func_st_wd.php';    

<link rel="stylesheet" type="text/css" href="<?php echo SITE_ROOT;?>st_pages/user_area/css/user_area.css" media="screen"/>

Как вы, вероятно, можете заметить, обновлять верхнюю часть каждого файла будет каждый раз, когда я перемещаю версии между localhost и моим живым сервером.

Какой лучший / стандартный способ определения этих значений ROOT?

Я не вижу решения в суперглобальном мире $_SERVER? Люди обычно просто используют VirtualHosts? Но тогда не нужно ли было определять константы ROOT?

Ответы [ 6 ]

2 голосов
/ 03 июня 2010

Да.Люди обычно просто используют VirtualHosts.

Есть несколько способов.

  • Вы можете использовать относительный путь для включения файла конфигурации.
  • Вы можете использовать DOCUMENT_ROOT из суперглобального $ _SERVER, чтобы поместить туда файл конфигурации.
  • Вы можете использовать конфигурацию веб-сервера, если это возможно.как php_value auto_prepend_file in .htaccess
  • И, по крайней мере, вы можете определить свою среду и выбрать между двумя корнями, оба написаны в условиях вверху.
  • И да, если вы используете mod_rewrite - создайте фронт-контроллер, который будет включать в себя все остальные файлы, а значит - единственный файл для размещения этих настроек.
1 голос
/ 03 июня 2010

почему бы не сделать файл config.php с

define('SERVER_ROOT',   'C:/wamp/www/site_folder/');
define('SITE_ROOT',     'http://localhost/site_folder/');

и не добавлять его в начало каждого файла.

require_once ('config.php');

однажды сделал - без проблем в будущем. Если вы перемещаете свой сайт - просто отредактируйте или не перезаписывайте файл конфигурации.

0 голосов
/ 03 июня 2010

Создайте один файл в вашем docroot. Назовите это settings.inc.

//settings.inc:

define('SITE_ROOT',     'site_folder');
require_once (dirname(__FILE__)) . '/st_wd_assets/inc/func_st_wd.php';

Тогда в каждом из ваших файлов

require_once (dirname(__FILE__)) . "/settings.inc";

Не беспокойтесь о корне и многом другом для CSS или гиперссылок. Просто предварите их с "/".

0 голосов
/ 03 июня 2010

Я использую php_uname('n'), который возвращает имя компьютера, на котором в данный момент работает php. При этом вы можете создавать конфигурационные файлы для каждого компьютера:

$configFile = 'config/' . php_uname('n') . '.config.php';

if (file_exists($configFile)) {
    include($configFile);
}

Затем вы помещаете директивы конфигурации в config / your_computer_name.config.php и config / live_servers_name.config.php.

0 голосов
/ 03 июня 2010

Если вы не используете VirtualHosts, то $ _SERVER ['DOCUMENT_ROOT'] может не вернуть правильное значение. Для вашего сайта, похоже, он вернет "C: / wamp / www"

Вы можете использовать это простое определение, чтобы установить SERVER_ROOT в качестве текущего каталога, за которым следует косая черта (разделитель каталогов):

define('SERVER_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR);

Это должно определить SERVER_ROOT как "C: / wamp / www / site_folder /" для вашего сервера.

Однако это, вероятно, не будет работать, если все ваши файлы .php не содержатся в "C: / wamp / www / site_folder /". Определение будет возвращать различные значения для файлов .php, которые находятся в подкаталоге этой папки.

0 голосов
/ 03 июня 2010

С комбинацией относительных включений / требований и автозагрузки классов вы можете вообще не иметь SERVER_ROOT. Что-то вроде вашего SITE_ROOT входит в конфигурационный файл, который включается при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...