на системах Windows. Но это только мои 0,02 доллара ...

азработке своего веб-сайта я вызывал все включения в моих php-файлах, вызывая один единственный файл, называемый include.

Код этого файла выглядел примерно так: (Я адаптировал его из руководства Lynda)

defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);

defined('SITE_ROOT') ? null :
    define('SITE_ROOT', 'C:'.DS.'wamp'.DS.'www'.DS.'ArmyCreator');

defined('LIB_PATH') ? null : define('LIB_PATH', SITE_ROOT.DS.'includes');
defined('PUB_PATH') ? null : define('PUB_PATH', SITE_ROOT.DS.'public');


// load config file first
require_once(LIB_PATH.DS."helper".DS.'config.php');

Теперь, когда я развертываю свой веб-сайт, я не могу понять, как объявить SITE_ROOt, чтобы он работал правильно?

РЕДАКТИРОВАТЬ

Это нормально для такого кода:require_once("../../includes/helper/initialize.php"); больше не работать после развертывания на веб-сайте?

Ответы на вопрос(4)

не злоупотребляйте троичным синтаксисом. Вместоdefined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);, вы можете использоватьOR оператор (который будет замыкать логический истинный результат):

defined('DS') OR define('DS', DIRECTORY_SEPARATOR);

Во-вторых, если это внутри файла начальной загрузки, положение которого вы знаете, просто используйтеdirname(__FILE__):

defined('SITE_ROOT') OR define('SITE_ROOT', dirname(__FILE__));

В противном случае, если вы знаете относительную позицию корня, вы можете использовать несколькоdirname звонки. Так что, если это родительский каталог текущего:

defined('SITE_ROOT') OR define('SITE_ROOT', dirname(dirname(__FILE__)));

Не использовать$_SERVER['DOCUMENT_ROOT'] или жеcwd() или жестко закодируйте свой путь. Всегда используйтеdirname(__FILE__) определить абсолютный путь. Для получения дополнительной информации о том, почемуЭтот ответ

 ircmaxell19 янв. 2011 г., 17:40
Совершенно верно @mfonda, но есть грань между многословием и беспорядком. Имея целую кучуif операторы (занимающие от 2 до 3 строк каждое, поскольку я не знаю единого стандарта кодирования, который допускает встроенные операторы if), более беспорядочный, чем может стоить ... Но каждому свое ...
 mfonda19 янв. 2011 г., 17:37
Даже чище чемor было быif (!defined('...')) { define('...') }

C:/wamp/www а такжеC:\wamp\www :-) ЧетныйC:\wamp\www/project Это хорошо.

Еслиincludes.php находится, скажем, вlib/includes.php (относительно корня вашего проекта), затем сделайте это:

define('SITE_ROOT', realpath('../'));

Это будет динамическиSITE_ROOT.

 ircmaxell19 янв. 2011 г., 17:37
DS это не БС. Конечно, Windows поддерживает оба пути синтаксиса, но это неоднозначно и не будет соответствовать результатуrealpath(), Я считаю это очень плохой практикой слепо использовать/ на системах Windows. Но это только мои 0,02 доллара ...
Решение Вопроса

относящиеся к каталогу includes.php, выполнив:

<?
$basePath = dirname(__FILE__);
require_once($basePath . "relative/path/from/basePath"); // replace the string with your real relative path
 Alix Axel19 янв. 2011 г., 17:32
Или же__DIR__, начиная с PHP 5.3.0.
 Marin12 мар. 2014 г., 06:29
спасибо @dorkitude
 Pillblast19 янв. 2011 г., 17:36
Я еще не использую 5.3. @dorkitude. Я использовал это, но я не вижу, работает ли это, потому что я понял, что все формулировки, которые я сделал с require_once ("../../ includes / helper / initialize.php"); тоже не работает
 Kyle Wild22 янв. 2011 г., 21:25
Вы должны добавить$basePath как в моем примере, а не делать относительные пути
 confiq19 янв. 2011 г., 17:15
к сожалению IDE не любит переменные в путях :(

Ты захочешьSITE_ROOT быть абсолютным путем к каталогу, в котором находятся ваши файлы. Например, в приведенном выше коде этот каталогC:\wamp\www\ArmyCreator, Вы можете определить это вручную, если вы знаете каталог, или динамически, используя предопределенный__DIR__ константа (PHP 5.3+) илиdirname(__FILE__) если вы еще не на 5.3.

Включение сразу нескольких файлов обычно считается плохой практикой, и вместо этого следует использовать автозагрузку. Это даст вам лучшую производительность, а также четко определенную структуру каталогов и схему именования, что приведет к улучшению кода. Для этого вы можете использоватьspl_autoload_register() функция.

Ваш ответ на вопрос