Всякий раз, когда я работаю с 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 откатываться назад по разреженным путям файловой системы, независимо от операционной системы сервера?
- Я собираюсь предположить, что ответ не соответствует вышеуказанному, так что продолжайте; какие положения я могу сделать, чтобы принудительно использовать косую черту (или какой-либо выбор, действительно) в качестве разделителя каталогов? Я предполагаю через вышеупомянутую функцию фильтра, но теперь, куда он должен идти?
Вперед косой чертой. Даже если разделитель ОС хоста #*&@
.