diff options
Diffstat (limited to 'phpBB/phpbb/filesystem.php')
| -rw-r--r-- | phpBB/phpbb/filesystem.php | 50 | 
1 files changed, 50 insertions, 0 deletions
| diff --git a/phpBB/phpbb/filesystem.php b/phpBB/phpbb/filesystem.php new file mode 100644 index 0000000000..77517082e5 --- /dev/null +++ b/phpBB/phpbb/filesystem.php @@ -0,0 +1,50 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +namespace phpbb; + +/** +* A class with various functions that are related to paths, files and the filesystem +*/ +class filesystem +{ +	/** +	* Eliminates useless . and .. components from specified path. +	* +	* @param string $path Path to clean +	* @return string Cleaned path +	*/ +	public function clean_path($path) +	{ +		$exploded = explode('/', $path); +		$filtered = array(); +		foreach ($exploded as $part) +		{ +			if ($part === '.' && !empty($filtered)) +			{ +				continue; +			} + +			if ($part === '..' && !empty($filtered) && $filtered[sizeof($filtered) - 1] !== '.' && $filtered[sizeof($filtered) - 1] !== '..') +			{ +				array_pop($filtered); +			} +			else +			{ +				$filtered[] = $part; +			} +		} +		$path = implode('/', $filtered); +		return $path; +	} +} | 
