Правильный способ установить PHP включает путь для * Nix и Windows - PullRequest
7 голосов
/ 25 декабря 2009

Это правильный путь к define включаемому пути для и * nix, и Windows ?

define( 'INCPATH', realpath( dirname( __FILE__ ) ) . '/' );

Обратите внимание на завершающий слеш, который я включил выше. Является ли косая черта для включений / требуется одинаковой для обеих ОС?

РЕДАКТИРОВАТЬ (ОБНОВЛЕНО ОТВЕТОМ):

Исходя из того, что я могу извлечь, мой код ниже является правильным способом универсального определения пути include / require для * nix и ОС 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()):

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

dirname () Возвращаемая строка - path с удаленным конечным элементом / компонентом. Ответственный за удаление имени файла.

realpath () Возвращает канонизированный (нормализованный / стандартизированный) абсолютный путь в случае успеха. Полученный путь не будет иметь символической ссылки, компонентов '/./' или '/../'. Я предполагаю, что это включено для тщательности, потому что __FILE__ уже разрешает символические ссылки. Или, может быть, он включен для разрешения относительных путей? В любом случае, это, кажется, укрепляет нашу цель.

Ответы [ 3 ]

8 голосов
/ 25 декабря 2009

Прямая косая черта будет работать для обеих ОС, и это путь.

Я не смог найти абсолютную ссылку на это, но это указано в нескольких местах в руководстве по PHP, как здесь и здесь . И это работает для меня, пользователя Windows & Linux.

Наконец, вы можете указать смешанные пути в Windows, такие как c:\\apache\\htdocs\\myapp/index.php, , и все будет работать нормально.

4 голосов
/ 25 декабря 2009

В качестве альтернативы вы можете использовать предопределенную константу PHP DIRECTORY_SEPARATOR, которая даст вам специфический для ОС разделитель каталогов. См. Также http://www.php.net/manual/en/dir.constants.php.

2 голосов
/ 25 декабря 2009

К удивлению многих, / отлично работает в Windows и MSDOS. В путевых именах это работает даже на OpenVMS.

Однако, если вы делаете что-то в PHP для путей, массив будет более удобной структурой, чем строка.

$MYPATH = array ('.', '/usr/lib/', '/usr/share/lib');
...