Всякий раз, когда я работаю с PHP ( часто ), я обычно работаю в окне Windows, однако я ( стараюсь ) разрабатывать агностические приложения платформы; одним из основных моментов является использование разделителей каталогов.
Как многие знают, что любая файловая система работает в среде Windows на PHP, вы можете использовать косые черты вместо обратной, а PHP сортирует ее под капотом. Это прекрасно, когда дело доходит до использования строковых литералов для прохождения пути к fopen()
или к чему-либо; но при извлечении путей, будь то __FILE__
или расширении с помощью realpath()
, извлеченные пути, конечно, используются с помощью соответствующих косой черты ОС. Кроме того, я заметил некоторые несоответствия в концевых косых чертах. Один или два раза realpath()
один ( обратная косая черта ) и realpath()
тоже ( я предпочитаю realpath()
косую черту, но не прерывисто )
Это явно проблема для сравнения строк, потому что вместо этого:
compare_somehow('path/to/file.php', __DIR__);
Ради надежности я должен идти:
compare_somehow('path/to/file.php', rtrim(strtr(__DIR__, '\\', '/'), '/') . '/');
Это похоже на много работы. Я могу бросить его в функцию, конечно; теперь я застрял в зависимости от произвольной функции во всем моем OO-коде.
Я понимаю, что PHP не идеален, и нужно создавать устройства, но, конечно же, должно существовать какое-то агностическое решение для платформы, чтобы заставить хиты файловой системы извлекать перекошенные прорези пути или, по крайней мере, неинтрузивный способ введения независимой от класса функции для этой цели.
Сводный вопрос ( ы ):
Вперед косой чертой. Даже если разделитель ОС хоста – #*&@
.
Поскольку я комментировал, я не могу понять, почему вы должны это сделать (мне было бы интересно узнать о конкретной проблеме, которую вы __FILE__
), но вот возможное решение с использованием вывода __FILE__
в качестве примера: –
$path = str_replace('\\', '/', __FILE__);
Это будет (должно?) Работать независимо от * слэшей, возвращаемых ОС (я думаю).
К сожалению, я не знаю о «волшебном (хотя и надежном) обходном пути, взломе или другом, чтобы заставить PHP отбросить назад разреженные пути файловой системы, независимо от ОС сервера», кроме этого. Я предполагаю, что это может быть завернуто в класс-помощник, но это все равно дает вам произвольную зависимость вашего кода.