Как разработчики устанавливают ваши пути для шаблонов? - PullRequest
1 голос
/ 22 апреля 2011

Я подумал, что смогу спросить, смогу ли я сделать это лучше.

На моем локальном компьютере (WAMP) все мои веб-сайты находятся в папке www. (C:\wamp\www)

Теперь я делаю это, когда включаю файл:

require_once("".$_SERVER['DOCUMENT_ROOT']."/lib/config.php");

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

Может кто-нибудь сказать мне, если я должен делать это таким образом?

Я хочу обеспечить максимальную совместимость; Это означает, что пути не прервутся, если я, например, переместу сайт с локального на любой веб-хостинг, который я решил использовать, или если я, например, перейду с одного хоста на другой.

Может быть, есть более пуленепробиваемый способ сделать это?

Ответы [ 4 ]

2 голосов
/ 22 апреля 2011

Проблема с использованием $_SERVER['DOCUMENT_ROOT'] заключается в том, что он сломается, если вы переместите ваши PHP-скрипты вверх или вниз на уровне каталога.Вместо этого используйте это:

require_once(dirname(__FILE__) . "/lib/config.php");

__FILE__ - это абсолютный путь скрипта.dirname() удаляет последний компонент пути (имя файла скрипта), чтобы вы могли добавлять к нему другие компоненты пути, например /lib/config.php или /../../lib/config.php или что-то еще.Это будет работать везде.

В PHP 5.3 введено сокращение для dirname(__FILE__), которое называется __DIR__, но это не работает в <5.3. </p>

2 голосов
/ 22 апреля 2011

Вы должны увидеть Включить путь . Для этого полезно set_include_path .

1 голос
/ 22 апреля 2011

Обычно я делаю конфигурационный файл make 1 (который может включать другие) с несколькими очень простыми константами:

define('PROJECT_ROOT', dirname(dirname(__FILE__))); // or dirname(__DIR__) for PHP 5.3
define('PROJECT_WEB', $_SERVER['DOCUMENT_ROOT']);
// etc

Все мои другие файлы / включения будут основаны на этих очень простых константах.Мне никогда не понадобятся относительные пути и никогда не будет include_path, потому что и PROJECT_ROOT, и PROJECT_WEB являются 'реальными' / абсолютными.

Другими полезными (?) Константами будут PROJECT_LOGIC и / или PROJECT_CONTROLLERSи / или PROJECT_3RD_PARTY и т. д.

1 голос
/ 22 апреля 2011

Это прекрасно работает для включения файла конфигурации (хотя я бы избавился от начальных кавычек)

require_once( $_SERVER['DOCUMENT_ROOT'] . "/lib/config.php" );

Это действительно единственный способ сделать это, если вы включаете файл конфигурации из группыиз разных каталогов.

В более крупных проектах говорят, что «большинство» разработчиков имеют фронт-контроллер , из которого загружаются все скрипты.Этот фронт-контроллер загружает файл конфигурации, и поскольку его один и тот же файл всегда включает файл конфигурации, нет необходимости в $_SERVER['DOCUMENT_ROOT'].

...