Location: PHPKode > scripts > Link converter > convertir_enlace_inc.php
<?php
class convertir_enlace
{
 	public $log = array();
 	public $este = array();
 	public $es = "";
 	private $re_dir = '%[\w\%\d\-]+/%i';
 	private $re_prev = '%\.\./%i';
 	function dir_enlace(){
		$this->este["raiz"] = str_replace('\x5c','/',$_SERVER["DOCUMENT_ROOT"]);
		$this->este["relativa"] = str_replace('\x5c','/',dirname($_SERVER["PHP_SELF"]));
 	 
		if(isset($_SERVER["HTTP_REFERER"]) && is_string($_SERVER["HTTP_REFERER"])){
			$httpas = preg_replace('%'.preg_quote($_SERVER["SCRIPT_NAME"]).'.*$%','',$_SERVER["HTTP_REFERER"]);			
		}else{
		 	$prot = (empty($_SERVER["HTTPS"])||$_SERVER["HTTPS"]=='off')?"http":"https";
		 	$httpas = $prot."://".$_SERVER["SERVER_NAME"].'/'.substr($this->este["relativa"],1).'/';
		}
		$this->este["url"] = str_replace('\x5c','/',$httpas);
		$this->este["url_arr"] = parse_url($this->este["url"]);
		
		$this->este["ruta"] = $this->este["raiz"].$this->este["relativa"];
		$este_inf = parse_url($this->este["raiz"]);
		$this->este["esquema"] = $este_inf["scheme"];
	}
	function convertir_enlace(){
	 	$link = (func_num_args()>0)?func_get_arg(0):$_SERVER["PHP_SELF"];
	 	$toUrl = (func_num_args()>1)?func_get_arg(1):true;
		$this->dir_enlace();
	 	if($toUrl){
			$this->es = $this->desde_ruta($link);
		}else{ // to relative path;
			$this->es = $this->desde_url($link);
		}
	}
	function desde_ruta($link){
		$info = parse_url($link);
		$este_inf = parse_url($this->este["ruta"]);
		if(!isset($info["scheme"]) || $info["scheme"]==$this->este["esquema"]){
		 	if(isset($info["scheme"])){
				$link = preg_replace('%'.preg_quote($this->este["raiz"]).'/%ims','',$link);
			}
			$info = pathinfo($link);
			$dirname = str_replace('\x5c','/',$info["dirname"]);
			$dirname = preg_replace('%([^\.])\./%','$1',$info["dirname"]);
			$retr = preg_match_all($this->re_prev,$info["dirname"]."/",$retrasos);
			$rtrn = true;
			$urldir = "/";

			if($retr>0){
				$prof = preg_match_all($this->re_dir,$this->este["url_arr"]["path"],$dirs);
				if($retr>$prof){
					$this->log[] = "Path is deeper than url in ".$link;
					$rtrn = false;
				}else{
					for($p=0;$p<($prof-$retr);$p++){
						$urldir .= $dirs[0][$p];
					}
				}
				$link = preg_replace($this->re_prev,'',$link);
			}
			if($rtrn){
				$urldir .= preg_replace($this->re_prev,'',$link);
				$rtrn = $this->este["url_arr"]["scheme"]."://".$this->este["url_arr"]["host"].$urldir;
			}
		}else{
			$rtrn = $link;			
		}
		return $rtrn;		
	}
	function desde_url($link){
		$info = parse_url($link);
		if(isset($info["scheme"])){
			$a_este = str_split($this->este["url"]);
			$a_link = str_split($link);
			$debe = implode("",array_diff_assoc($a_link,$a_este));
			$sobra = implode("",array_diff_assoc($a_este,$a_link));
			$sobra = preg_replace('%//$%','/',$sobra);
			$profundiza = (strlen($sobra)>0)?preg_replace($this->re_dir,'../',$sobra):"";

			$rtrn = $profundiza.$debe;			
		}else{
			$rtrn = $link;
		}
		return $rtrn;
	}
}
?>
Return current item: Link converter