Weiterleitung nach Verwendung von "include"

L

little_pixel

Aktives Mitglied
Thread Starter
Dabei seit
06.06.2006
Beiträge
4.706
Reaktionspunkte
1.658
Hallo zusammen,

mit der Bitte um kurze Klärung:

Code:
<?php

if($_REQUEST['login']){

	// Nullen
	$msgNr = "0";
	$msgTXT = "";
	
	// DB Zugriff
	include "../0001_Data/_Global/Global.php";

	// Lokalisierte TXT-Datei
	include "../0001_Data/_Global/Msg_deutsch.txt";

	// Verbindung zur DB aufbauen
	$dbConnection = mysql_connect($pathToServer, $serverUserName, $serverUserPW);

	--------- usw.......

	// Verbindung wieder schließen
	mysql_close($dbConnection);

	// weiterleiten
	if($msgNr == "1") {
		header('Location: [url]http://www.web.de/');[/url]
	}
	else {
		header('Location: [URL]http://www.google.de/');[/URL]
	}

}

?>


Die Weiterleitung funktioniert leider nicht. Lösche ich die "include"-Anweisungen, dann funktioniert es.
Leider ist mir nicht bekannt weshalb.

Vielen Dank für Infos vorab.

Viele Grüße
 
Zuletzt bearbeitet von einem Moderator:
Da gibt es zwei Möglichkeiten.

Die Unwahrscheinlichere ist, dass in einer der Includes explizit ein exit/die definiert ist.

Die Wahrscheinlichere: In einem der Includes geschieht eine Ausgabe. Wurde schon Text ausgegeben, kann kein Header mehr gesendet werden. I.d.R. führt dies auch zu einer aussagekräftigen Fehlermeldung. Sämtliche Ausgaben in Deinen Includes müssen weg. Achte mal auf Zeilenumbrüche ganz oben und ganz unten in den Dateien, das ist der häufigste Fehler.
 
Hallo,

vielen Dank für die schnelle Hilfe.

Ich habe die Weiterleitungen durch triviale "echo"-Anweisungen ersetzt.
Das funktioniert ebenfalls problemlos.

In den Dateien, die via "include" eingebunden werden sind lediglich Variablen-Zuweisungen.

Viele Grüße
 
Was steht denn in der Datei drin:
Code:
include "../0001_Data/_Global/Msg_deutsch.txt";

Kommt da einfach normaler Text oder wird der von
Code:
<?php
[...]
?>[/php] umschlossen? Steht da normaler Text, dann ist es logisch, dass es knallt (bei neueren php-Versionen sieht man den Knall per default aber nicht mehr im Browser, sondern nur noch im Logfile).
 
Vergessen: Um zu verhindern, dass Code, der nach dem Location-Header steht, möglicherweise doch noch ausgeführt wird, sollte auf jeden Fall ein
Code:
exit;
folgen.
 
Hallo,

Inhalt von "Msg_deutsch.txt":
Code:
<?php

$msg0 = "...";
$msg1 = "Es konnte keine Verbindung zur Datenbank aufgebaut werden:\n";

//usw...

?>

Trotz, dass keine Anweisungen mehr folgen habe ich "exit;" eingefügt. Leider keine Besserung.

Wenn ich den Inahlt der zwei Dateien herauskopiere und die "include"-Anweisungen damit überschreibe, dann funktioniert es problemlos.

Die Ursache muss somit direkt auf das "include" zurückzuführen sein.

Viele Grüße
 
Und ich wette mit Dir dass es ein Whitespace oder Zeilenubruch ganz unten hinter ?> ist.

Aber um es nicht zu kompliziert zu machen ;) kannst du es auch so lösen:
Code:
<?
           [B]ob_start();[/B]
	
	// DB Zugriff
	include "../0001_Data/_Global/Global.php";

	// Lokalisierte TXT-Datei
	include "../0001_Data/_Global/Msg_deutsch.txt";

           [B]ob_end_clean();[/B]
 
Und in beiden includes keine Leerzeilen/Leerzeichen vor dem öffnenden <?php oder nach dem schließenden ?>? Hast du das Logfile auf Fehler hin überprüft?
 
Mit Taco geöffnet und in der Tat ist ein Zeilenumbruch nachgestellt.
Absolut dubios...

Vielen Dank habe wieder etwas gelernt!
 
Msg_deutsch.txt ist nicht klug gewählt.

Ein Browser kann Text-Daten öffenen, ohne dass der Inhalt als PHP geparst wird. Wenn du also sensible Daten wie Mysql-Verbindung etc. in eine Text-Datei schreibst, und diese nicht außerhalb des http-Bereiches lagern, bekommst du eventuell unerwartete Teilhaber, die deine Website nach ihrem Geschmack umfunktionieren; wenn Google die Dateien indiziert wirds noch ärger. Vor Jahren hatte phpNuke mal diese Sicherheitslücke populär gemacht.

Msg_deutsch.inc.php wäre eine bessere Wahl.
 
Zurück
Oben Unten