лучший способ доступа / создания значений SITE_ROOT и SERVER_ROOT в PHP?

Мне нужно 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"/> 

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

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

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

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

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

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

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

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

и не добавляет его вверху каждого файла.

 require_once ('config.php'); 

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

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

Если вы не используете 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, которые находятся в поддиректории этой папки.

Я использую 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.

Создайте один файл в своем 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 или гиперссылках. Просто представьте их «/».