phpbar.de logo

Mailinglisten-Archive

[php] redirect Function

[php] redirect Function

Andreas Müller php_(at)_phpcenter.de
Mon, 21 Jan 2002 22:41:37 +0100


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