Разделители каталогов 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 отбрасывать назад косые пути файловой системы, независимо от ОС сервера", кроме этой. Я предполагаю, что он может быть обернут в вспомогательный класс, но это все еще дает вам произвольную зависимость в вашем коде.