<?php
/************************************************** 
 *                   Proxy w PHP                  * 
 ************************************************** 
 * Wersja: 0.4 Alpha                              * 
 * Autor: Jacek Kowalski (http://jacekk.info)     * 
 *                                                * 
 * Utwór rozprowadzany na licencji                * 
 * http://creativecommons.org/licenses/by-nc/2.5/ * 
 **************************************************/

ini_set('default_charset', '');

function simple_path_adv($path) {
	$path = explode('/', simple_path($path));
	$new_path = array();
	
	foreach($path as $key => $value) {
		switch($value) {
			case '..':
				array_pop($new_path);
			break;
			case '':
			case '.':
			break;
			default:
				$new_path[] = $value;
			break;
		}
	}
	
	return '/'.implode('/', $new_path);
}

function simple_path($path) {
	$path = trim(str_replace(array('/./', '//', '\\'), '/', $path), '/');
	while(strpos($path, '//')!==FALSE OR strpos($path, '/./')!==FALSE) {
		$path = str_replace(array('/./', '//', '\\'), '/', $path);
	}
	return '/'.$path;
}

function base_path($start, $rel) {
	$start = explode('/', simple_path_adv($start));
	$rel = explode('/', $rel);
	
	foreach($rel as $value) {
		switch($value) {
			case '..':
				array_pop($start);
			break;
			case '':
			case '.':
			break;
			default:
				$start[] = $value;
			break;
		}
	}
	
	return '/'.implode('/', $start);
}

echo base_path('/home/test/..', '.././test/./../../etc');
?>