note 112367 added to function.realpath
| From: | runeimp at gmail dot com | Date: | Fri, 07 Jun 2013 11:37:14 +0000 |
| Subject: | note 112367 added to function.realpath | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-195098@lists.php.net to get a copy of this message | ||
Needed a method to normalize a virtual path that could handle .. references that go beyond the
initial folder reference. So I created the following.
<?php
function normalizePath($path)
{
$parts = array();// Array to build a new path from the good parts
$path = str_replace('\\', '/', $path);// Replace backslashes with
forwardslashes
$path = preg_replace('/\/+/', '/', $path);// Combine multiple slashes into a
single slash
$segments = explode('/', $path);// Collect path segments
$test = '';// Initialize testing variable
foreach($segments as $segment)
{
if($segment != '.')
{
$test = array_pop($parts);
if(is_null($test))
$parts[] = $segment;
else if($segment == '..')
{
if($test == '..')
$parts[] = $test;
if($test == '..' || $test == '')
$parts[] = $segment;
}
else
{
$parts[] = $test;
$parts[] = $segment;
}
}
}
return implode('/', $parts);
}
?>
Will convert /path/to/test/.././..//..///..///../one/two/../three/filename
to ../../one/three/filename
----
Server IP: 69.147.83.199
Probable Submitter: 98.151.158.232
----
Manual Page -- http://php.net/manual/en/function.realpath.php
Edit -- https://master.php.net/note/edit/112367
Del: integrated -- https://master.php.net/note/delete/112367/integrated
Del: useless -- https://master.php.net/note/delete/112367/useless
Del: bad code -- https://master.php.net/note/delete/112367/bad+code
Del: spam -- https://master.php.net/note/delete/112367/spam
Del: non-english -- https://master.php.net/note/delete/112367/non-english
Del: in docs -- https://master.php.net/note/delete/112367/in+docs
Del: other reasons-- https://master.php.net/note/delete/112367
Reject -- https://master.php.net/note/reject/112367
Search -- https://master.php.net/manage/user-notes.php