Это надлежащий путь к define
включать путь и для *отклоняет и для Windows?
define( 'INCPATH', realpath( dirname( __FILE__ ) ) . '/' );
Отметьте запаздывающую наклонную черту вправо, которую я включал выше. Наклонная черта вправо для, включает/требует то же для обеих ОС, также?
РЕДАКТИРОВАНИЕ (ОБНОВЛЕННЫЙ С ОТВЕТОМ):
Из того, что я могу собраться, мой код ниже является надлежащим способом универсально определить включать/требовать путь и для *, отклоняют и Windows ОС. Не стесняйтесь исправлять что-либо в комментариях ниже.
Вещью, которая смутила меня, были много примеров, из которых я видел замену показа back-slashes (\)
в forward-slashes(/)
. На основе некоторых ответов ниже, это является ненужным.
Таким образом, заключительный правильный код (для пуриста):
define( 'INCPATH', realpath( dirname( __FILE__ ) ) . DIRECTORY_SEPARATOR );
Тот код приводит к следующим результатам:
*nix: /path/to/the/file/
Windows: C:\Path To\the\file\
Краткое объяснение, прокладывающее себе путь с внутренней части (__FILE__
) (realpath()
):
ЗАРЕГИСТРИРУЙТЕ полный путь и имя файла файла. Всегда содержит полный путь с разрешенными символьными ссылками.
dirname () возвращаемая строка является путем с любым запаздыванием / удаленный компонент. Ответственный за удаление имени файла.
realpath () Возвраты каноническое (нормализовал/стандартизировал) абсолютный путь на успехе. Получающийся путь не будет иметь никакой символьной ссылки, '/./'
или '/../'
компоненты. Я предполагаю, что это включено для тщательности потому что __FILE__
уже символьные ссылки твердости. Или возможно это включено для разрешения относительных путей? Так или иначе это, кажется, укрепляет нашу цель.
Прямая косая черта будет работать для обеих ОС, и это правильный вариант.
Я не смог найти абсолютную ссылку на это, но она указана в нескольких местах в руководство по PHP, например здесь и здесь . И это работает для меня, пользователя Windows и Linux.
Наконец, вы можете указать смешанные пути в Windows, например c: \\ apache \\ htdocs \\ myapp / index.php
, , и все работает нормально.
К удивлению многих, /
отлично работает в Windows и MSDOS. Внутри имен путей он работает даже в OpenVMS.
Однако, если вы делаете что-то в PHP для путей, массив будет более удобной структурой, чем строка.
$MYPATH = array ('.', '/usr/lib/', '/usr/share/lib');
Или вы можете использовать предопределенную константу PHP DIRECTORY_SEPARATOR
, которая выдаст вам разделитель директорий, специфичный для операционной системы. See http://www.php.net/manual/en/dir.constants.php also.