PHP: fakepath() to clean up a file path
Needed a quick function to remove relative elements from a path. Similar to PHP's realpath() but doesn't require the file to exist on the local filesystem. This also works for URLs.
function fakepath($url) {
$split = preg_split("|/|",$url);
$first = substr($url,0,1);
foreach ($split as $item) {
if ($item === "." || $item === "") {
// If it's a ./ then it's nothing (just that dir) so don't add/delete anything
} elseif ($item === "..") {
// Remove the last item added since .. negates it.
$removed = array_pop($ret);
} else {
$ret[] = $item;
}
}
// Rebuild the string
$ret = join("/",$ret);
// Remove dupe /
$ret = preg_replace("!/+!","/",$ret);
// Restore the double / after the HTTP:
$ret = preg_replace("!(https?:/)!","$1/",$ret);
if ($first === '/') {
$ret = "/$ret";
}
return $ret;
}