Разделители каталогов PHP, принудительная косая черта; ненавязчивый

Всякий раз, когда я работаю с 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 ):

  • Есть ли какое-нибудь волшебное (, хотя и надежное ) обходное решение, взлом или иным образом, чтобы заставить PHP отбросить вперед косые пути файловой системы, независимо от операционной системы сервера?
  • Я предполагаю, что ответ нет на вышеизложенный, так что продолжаем; какие положения я могу сделать для принудительного использования косой черты ( или любой другой вариант, на самом деле ) в качестве разделителя каталогов? Я предполагаю, что через вышеупомянутую функцию фильтра, но куда она должна идти?

Прямая косая черта для всего. Даже если разделителем ОС хоста является # * & @ .

13
задан Jonathan Leffler 9 September 2015 в 18:21
поделиться