PHP: хороший способ универсализации путей между операционными системами (наклонная черта) - PullRequest
7 голосов
/ 13 апреля 2011

Моя простая задача заключается в возможности обрабатывать пути между операционными системами, в основном в отношении обратной и прямой косой черты для разделителей каталогов.

Я использовал DIRECTORY_SEPARATOR, однако:

  1. Долго писать

  2. Пути могут исходить изразличные источники, не обязательно контролируемые вами

Я сейчас использую:

    function pth($path)
    {
        $runningOnWindows = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN');
        $slash = $runningOnWindows ? '\\' : '/';
        $wrongSlash = $runningOnWindows ? '/' : '\\' ;
        return (str_replace($wrongSlash, $slash, $path));
    }

Просто хочу знать, что в языке ничего не существуетчто я изобретаю,

Есть ли уже встроенная функция PHP для этого?

Ответы [ 4 ]

29 голосов
/ 13 апреля 2011

Я знаю о DIRECTORY_SEPARATOR,

Однако: 1. Долго писать

Лень никогда не является причиной для чего-либо

$path = (DIRECTORY_SEPARATOR === '\\')
      ? str_replace('/', '\\', $subject)
      : str_replace('\\', '/', $subject);

или

$path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path);

Это за один шаг заменит «правильный» на себя, но это не имеет никакого значения.

Если вы точно знаете, что путь существует,вы можете использовать realpath ()

$path = realpath($path);

Однако это совсем не требуется, поскольку каждая ОС понимает косую черту / как действительный разделитель каталогов (даже окна).

5 голосов
/ 13 апреля 2011

Вам не хватает предопределенной постоянной DIRECTORY_SEPARATOR.

1 голос
/ 13 апреля 2011

Если вы собираетесь передать эти пути стандартным функциям PHP, вам не нужно исправлять пути, насколько я могу судить.Базовые функции, такие как file_get_contents или fopen, прекрасно работают с любыми путями, которые вы им выбрасываете.

0 голосов
/ 28 февраля 2018
  static function fx_slsh($path) {
    $path = str_replace(['/','\\'], DIRECTORY_SEPARATOR, $path);
    return substr($path, -1) == DIRECTORY_SEPARATOR ? $path : $path . DIRECTORY_SEPARATOR;
  }

этот также обеспечит наличие косой черты

...