Есть ли PHP-эквивалентная функция для Python os.path.normpath ()? - PullRequest
6 голосов
/ 19 апреля 2010

Есть ли PHP-эквивалентная функция для Python os.path.normpath()?
Или как я могу получить точно такую ​​же функциональность в PHP?

Ответы [ 2 ]

6 голосов
/ 20 апреля 2010

Вот мое переписывание 1: 1 метода normpath () из posixpath.py Python в PHP:

function normpath($path)
{
    if (empty($path))
        return '.';

    if (strpos($path, '/') === 0)
        $initial_slashes = true;
    else
        $initial_slashes = false;
    if (
        ($initial_slashes) &&
        (strpos($path, '//') === 0) &&
        (strpos($path, '///') === false)
    )
        $initial_slashes = 2;
    $initial_slashes = (int) $initial_slashes;

    $comps = explode('/', $path);
    $new_comps = array();
    foreach ($comps as $comp)
    {
        if (in_array($comp, array('', '.')))
            continue;
        if (
            ($comp != '..') ||
            (!$initial_slashes && !$new_comps) ||
            ($new_comps && (end($new_comps) == '..'))
        )
            array_push($new_comps, $comp);
        elseif ($new_comps)
            array_pop($new_comps);
    }
    $comps = $new_comps;
    $path = implode('/', $comps);
    if ($initial_slashes)
        $path = str_repeat('/', $initial_slashes) . $path;
    if ($path)
        return $path;
    else
        return '.';
}

Это будет работать точно так же, как os.path.normpath() в Python

2 голосов
/ 19 апреля 2010

Да, команда realpath вернет нормализованный путь. Это похоже на комбинированную версию Python os.path.normpath и os.path.realpath.

Однако он также разрешает символические ссылки. Я не уверен, что бы ты сделал, если бы не хотел такого поведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...