Всякий раз, когда я работаю с PHP ( часто ), я обычно работаю с Windows, однако я ( пытаюсь ) разрабатывать приложения, не зависящие от платформы; одной из основных проблем является использование разделителей каталогов.
Как многие знают, выполняя любую работу с файловой системой в среде Windows в PHP, вы можете использовать косую черту вместо обратной, и PHP сортирует это под капотом. Это нормально, когда дело доходит до использования строковых литералов для передачи пути к fopen ()
или какому-либо другому; но при извлечении путей, будь то __ FILE __
или расширение с помощью realpath ()
, извлеченные пути, конечно, используют соответствующие косые черты ОС. Кроме того, я заметил некоторые несоответствия в конце косой черты.Один или два раза __ DIR __
добавил один ( обратную косую черту ) и realpath ()
тоже ( Я предпочитаю конечную косую черту, но не периодически )
Это явно проблема для сравнения строк, потому что вместо того, чтобы делать:
compare_somehow('path/to/file.php', __DIR__);
Для надежности я должен пойти:
compare_somehow('path/to/file.php', rtrim(strtr(__DIR__, '\\', '/'), '/') . '/');
Это похоже на большую работу. Конечно, я могу передать это в функцию; теперь я застрял с произвольной зависимостью функций во всем моем объектно-ориентированном коде.
Я понимаю, что PHP несовершенен, и необходимо внести некоторые коррективы, но, безусловно, должен существовать какой-то обходной путь, не зависящий от платформы, чтобы заставить обращения файловой системы извлекать прямые косые пути, или, по крайней мере, ненавязчивый способ введения класса -независимая функция для этого.
Сводный вопрос ( s ):
Прямая косая черта для всего. Даже если разделителем ОС хоста является # * & @
.