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

Краткое описание вопрос (s):

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

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

Author: Jonathan Leffler, 2011-11-17

1 answers

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

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

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

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

 8
Author: vascowhite, 2011-11-18 00:45:26