protected function _normpath($path)
{
if (empty($path)) {
$path = '.';
}
// path must be start with /
$path = preg_replace('|^\\.\\/?|', $this->separator, $path);
$path = preg_replace('/^([^\\/])/', "/\$1", $path);
if ($path[0] === $this->separator) {
$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($this->separator, $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($this->separator, $comps);
if ($initial_slashes) {
$path = str_repeat($this->separator, $initial_slashes) . $path;
}
return $path ? $path : '.';
}