ob_start() und header() ?

So habe es nun ohne ob_start() gemacht nachdem mir eingefallen ist das eh nix vorher wie echo oder print kommt :-)

Habe auch was Falsch verstanden mit ob_start()

so schauts dann insgesammt aus wenns Interessiert!
access.php
PHP:
<?php
#--> SESSID definieren und starten.
session_name("SESSID");
session_start();

#--> Klassen Dateien Laden.
include("../class/TPLManager.php");
include("../class/MySQL.php");

#--> Konfigurationsdatei Laden.
include("config.php");

#--> Funktionsdatei Laden.
include("function.php");

#--> Globale Datei Laden.
include("global.php");

#--> Überprüfen ob User schon eigeloggt ist.
if($LOG == TRUE)
  {
	header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/index.php$Session2");
	die(); 
}

#--> Userdaten Überprüfen auf Rechte und Richtigkeit.
if(isset($_POST['login']) && !empty($_POST['adminname']) && !empty($_POST['adminpassword']))
  {
	$admin = $DB->dbActionQuery("SELECT userid,username,password,permission FROM ".$Config_MySQLPrefix."members WHERE username='".strtolower($_POST['adminname'])."' AND password='".MD5(strtolower($_POST['adminpassword']))."'");
	if(!empty($admin)) $Permission = $DB->dbActionQuery("SELECT pid,view_acp FROM ".$Config_MySQLPrefix."permission WHERE pid=$admin[permission]");  
}

#--> Textfelder auf Inhalt und Gültigkeit überprüfen.
if(isset($_POST['adminname']) && empty($_POST['adminname']))
  {
	$ErrorMessage = "Du hast kein Benutzernamen eingegeben.";
	$MatchError = TRUE;  
}
elseif(isset($_POST['adminpassword']) && empty($_POST['adminpassword']))
  {
	$ErrorMessage = "Du hast kein Password eingegeben.";  
	$MatchError = TRUE;
}
elseif(isset($_POST['login']) && empty($admin))
  {
	$ErrorMessage = "Dein Benutzername oder dein Passwort ist nicht G&uuml;ltig.";
	$MatchError = TRUE;  
}
elseif(isset($_POST['login']) && $Permission['view_acp'] != TRUE)
  {
	$ErrorMessage = "Du hast nicht die erfoderlichen Rechte um diesen Bereich betreten zu k&ouml;nnen."; 
	$MatchError = TRUE;  
}

if(!isset($_POST['login']) || $MatchError == TRUE)
  {
	/////// Anmelde Formular ausgeben ///////
	$TPL = new TPL_Manager();
	$TPL->TemplatesPath = "templates/";
	$TplFile['_ACCESS_'] = "access.htm";
	$TPL->DefineTPL($TplFile);
	  $TPL->keyword('POST_ADMINNAME',$_POST['adminname']);
	  $TPL->keyword('MATCH_ERROR',"<br>$ErrorMessage<br>");
	$TPL->ParseTPL("_ACCESS_");
	$TPL->OutPut();
}

#--> Wenn alle Daten Ok sind Session Id mit allen Informationen in der DB speichern.
if(isset($_POST['login']) && $MatchError != TRUE)
  {
	$DB->dbActionQuery("INSERT INTO ".$Config_MySQLPrefix."adminsession (sessionid,userid,ipadress,useragent,starttime,lastactivity) VALUES ('".session_id()."','$admin[userid]','$_SERVER[REMOTE_ADDR]','$_SERVER[HTTP_USER_AGENT]','".time()."','".time()."')");
	header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/index.php$session2");
	die();
}
?>

@Ben Ben vielleicht verstehst du ja jetzt was ich meine :-)

MfG Funjoy
 
Jo, ist mir so klar und so hatte ich es auch gemeint, die beiden header() stören sich ja nciht, da ja kein Output erfolgt... ;)
 
Hallo

ich löse dir dein Script nicht aber was dir helfen Sollte
OB_START() hebt sich alle ausgaben auf, so lange bis
OB_END_FLUSH() kommt! oder der Script abgearbeitet ist.
Dabei werden alle Ausgaben in ein Buffer geladen. Möchtest du also ein Cookie setzten unerwtrtet in einem Script so bringt dir dies den Vorteil den Cookie zu setzten und wegzuheadern, ohne dass ein echo stören kann. Vergiss aber nie falls du dein echo ausgeben möchtest OB_END _FLUSH anzugeben, denn sonst kannst du schnell an Probleme stossen. Unter Windows kannst du dir die Funktion fast sparen aber Linux sieht das nicht gerne, sobald OB_END_FLUSH() nicht gestzt wird!

Bedenke setzt du OB_END_FLUSH nicht und hederst einen Download so wir der nie übertragen, obwohl er gestartet wird!

Mein Tipp:

Anfang als aller erstes OB_START() setzten

Das letzte im Script ist dann OB_END_FLUSH()

... dazwischen Cookie Header oder EXIT;
PHP:
if($LOG == TRUE) 
  { 
    $OUT; 
    EXIT;
}  else { echo "bal";}

OB_END_FLUSH();


BZW
PHP:
if($LOG == TRUE) 
  { 
    $OUT; 
    EXIT; 
}  else { header(); Exit;} 

OB_END_FLUSH();

Wobei das OB_END_FLUSH irgendwann am ende auftauchen kann!
 
Zuletzt bearbeitet von einem Moderator:
Zurück