Подтвердить что ты не робот

Разделители каталога 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 откатываться назад по разреженным путям файловой системы, независимо от операционной системы сервера?
  • Я собираюсь предположить, что ответ не соответствует вышеуказанному, так что продолжайте; какие положения я могу сделать, чтобы принудительно использовать косую черту (или какой-либо выбор, действительно) в качестве разделителя каталогов? Я предполагаю через вышеупомянутую функцию фильтра, но теперь, куда он должен идти?

Вперед косой чертой. Даже если разделитель ОС хоста #*&@.

4b9b3361

Ответ 1

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

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

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

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