Weiterleitung nach Verwendung von "include"

little_pixel

Aktives Mitglied
Thread Starter
Mitglied seit
06.06.2006
Beiträge
4.629
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:
D

dms

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.
 

little_pixel

Aktives Mitglied
Thread Starter
Mitglied seit
06.06.2006
Beiträge
4.629
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
 

msslovi0

Aktives Mitglied
Mitglied seit
20.03.2005
Beiträge
2.727
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).
 

msslovi0

Aktives Mitglied
Mitglied seit
20.03.2005
Beiträge
2.727
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.
 

little_pixel

Aktives Mitglied
Thread Starter
Mitglied seit
06.06.2006
Beiträge
4.629
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
 
D

dms

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]
 

msslovi0

Aktives Mitglied
Mitglied seit
20.03.2005
Beiträge
2.727
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?
 

little_pixel

Aktives Mitglied
Thread Starter
Mitglied seit
06.06.2006
Beiträge
4.629
Mit Taco geöffnet und in der Tat ist ein Zeilenumbruch nachgestellt.
Absolut dubios...

Vielen Dank habe wieder etwas gelernt!
 

UDH5

Mitglied
Mitglied seit
05.07.2007
Beiträge
429
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.
 
Oben