Я знаю, что это старая нить, но это действительно полезно.
Я встречаюсь с странным Phar::interceptFileFuncs вопросом, когда я применил относительный путь в phpctags, realpath()
действительно действительно глючит внутри phar.
Благодаря этой теме дайте мне немного света, здесь идет моя реализация, основанная на реализации christian из этой темы и этой comments.
Надеюсь, это сработает для вас.
function relativePath($from, $to)
{
$fromPath = absolutePath($from);
$toPath = absolutePath($to);
$fromPathParts = explode(DIRECTORY_SEPARATOR, rtrim($fromPath, DIRECTORY_SEPARATOR));
$toPathParts = explode(DIRECTORY_SEPARATOR, rtrim($toPath, DIRECTORY_SEPARATOR));
while(count($fromPathParts) && count($toPathParts) && ($fromPathParts[0] == $toPathParts[0]))
{
array_shift($fromPathParts);
array_shift($toPathParts);
}
return str_pad("", count($fromPathParts)*3, '..'.DIRECTORY_SEPARATOR).implode(DIRECTORY_SEPARATOR, $toPathParts);
}
function absolutePath($path)
{
$isEmptyPath = (strlen($path) == 0);
$isRelativePath = ($path{0} != '/');
$isWindowsPath = !(strpos($path, ':') === false);
if (($isEmptyPath || $isRelativePath) && !$isWindowsPath)
$path= getcwd().DIRECTORY_SEPARATOR.$path;
// resolve path parts (single dot, double dot and double delimiters)
$path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path);
$pathParts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen');
$absolutePathParts = array();
foreach ($pathParts as $part) {
if ($part == '.')
continue;
if ($part == '..') {
array_pop($absolutePathParts);
} else {
$absolutePathParts[] = $part;
}
}
$path = implode(DIRECTORY_SEPARATOR, $absolutePathParts);
// resolve any symlinks
if (file_exists($path) && linkinfo($path)>0)
$path = readlink($path);
// put initial separator that could have been lost
$path= (!$isWindowsPath ? '/'.$path : $path);
return $path;
}
пожалуйста перейдите на страницу [bugs.php.net] (http://bugs.php.net «Ошибка Bugtracker») и посмотрите, не были ли уже обнаружены ошибки. Если нет, напишите отчет об ошибке, чтобы они были исправлены. – Gordon
Они задокументированы, однако, даже если они не были патчем, не могут помочь ранее («стабильным») версиям PHP ... Мне нужно работать над чем-то, что действительно работает. – Christian
Уход за сообщениями об ошибках? –