Mailinglisten-Archive |
Hallo zusammen, ich hab hier eine "kleine" Funktion die sicher auch für andere interessant sein dürfte. Oft benötigt man die Funktionsweise eines redirect mittels header("Location: $path") Da dies gerade auch bei Sessions zu Problemen führen kann und da man für diesen Redirect auch stets eine vollständige URL angeben sollte (siehe vergangene postings zu dem Thema) soll diese Funktion das etwas vereinfachen: function redirect($url) { // Ziel-URL auseinandernehmen $url_parts = parse_url($url); // Kein Protokoll? Dann "http" als Protokoll if (!$url_parts["scheme"]) { $url_parts["scheme"]="http"; } // Kein Host? Dann den aktuellen Host einsetzen if (!$url_parts["host"]) { $url_parts["host"]=$GLOBALS["HTTP_HOST"]; } // Der Pfad beginnt nicht mit einem /? -> rel. Pfad zu absolutem Pfad machen. // ToDo: "/x/../y.php" muss nocht vereinfacht werden if ($url_parts["path"]) { if (substr($url_parts["path"],0,1)!="/") { $s=$GLOBALS["SCRIPT_NAME"]; $url_parts["path"]=substr($s,0,strrpos($s,"/")+1).$url_parts["path"]; } } // evtl. Session anhängen $SID=session_id(); if (($SID) && (!strcasecmp($url_parts["host"],$GLOBALS["HTTP_HOST"])) && (!ini_get("session.use_cookies"))) { $s=$url_parts["query"]; $url_parts["query"]=$s.(($s)?"&":"").session_name()."=$SID"; } // neue URL zusammenbauen $url=$url_parts["scheme"]."://"; if (($url_parts["user"]) || ($url_parts["pass"])) { $url.=$url_parts["user"].":".$url_parts["pass"]."_(at)_"; } $url.=$url_parts["host"]; if ($url_parts["port"]) { $url.=":".$url_parts["port"]; } $url.=$url_parts["path"]; if ($url_parts["query"]) { $url.="?".$url_parts["query"]; } if ($url_parts["fragment"]) { $url.="#".$url_parts["fragment"]; } // Redirect ausführen header("Location: ".$url); exit; } Irgendjemand Anmerkungen, Ideen oder weitere Vorschläge ? Insbesondere für das ToDo mit dem Pfad. Gruß, Andreas
php::bar PHP Wiki - Listenarchive