Разделители каталогов 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__, '\\', '/'), '/') . '/');

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

Я понимаю, что PHP не совершенен, и необходимо принять меры, но, безусловно, должен существовать некоторый независимый от платформы обходной путь, чтобы заставить хиты файловой системы извлекать пути с прямой косой чертой или, по крайней мере, ненавязчивый способ введения функции, независимой от класса для этого.

Краткий вопрос (ы):

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

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

1 ответ

Решение

Как я прокомментировал, я не могу понять, почему вы должны это делать (мне было бы интересно получить краткое описание конкретной проблемы, которую вы решаете), но вот возможное решение с использованием вывода __FILE__ В качестве примера:-

$path = str_replace('\\', '/', __FILE__);

Это будет (должно?) Работать независимо от слешей, возвращаемых ОС (я думаю).

К сожалению, я не знаю о "каком-то волшебном (хотя и надежном) обходном пути, взломе или иным образом, чтобы заставить PHP отбрасывать назад косые пути файловой системы, независимо от ОС сервера", кроме этой. Я предполагаю, что он может быть обернут в вспомогательный класс, но это все еще дает вам произвольную зависимость в вашем коде.

Другие вопросы по тегам