Sven Rautenberg: header location versagt wegen Leerzeichen in PHP ?

Beitrag lesen

Moin!

total seltsam.

Nö, logisch.

Das HEADER versagt wenn bereits Leerzeichen zum Browser gesendet wurden, ist klar, aber auch innerhalb PHP? Wie kann das denn?

Ist ja nicht "innerhalb" PHP.

Beispiel mit 2 Dateien
2. test.php

<?php

function test()
{
header('location:http://google.de');
}

?>

  
Wenn am Ende dieser Datei noch ein Leerzeichen steht, ist das gleichbedeutend mit dem Befehl echo " "; an dieser Stelle.  
  
Und wenn du dir dann mal den Programmfluss mit diesem zusätzlichen Echo ansiehst, wirst du feststellen, dass dein require\_once() in der index-Datei dieses Echo eben ausführt, bevor die Funktion mit dem header() aufgerufen wird. Folglich ist schon Ausgabe erfolgt, bevor der Header gesendet wird.  
  
Wenn du header() aus der Funktion herausnimmst, wird dieser Befehl ausgeführt, bevor das Leerzeichen ausgegeben wird - dann funktioniert alles.  
  
Um zu vermeiden, dass nachfolgende Leerzeichen in Includes dir die Show zerstören, ist es sinnvoll, das schließende PHP-Tag "?>" wegzulassen. Die Coding-Standards von Zend fordern das beispielsweise sogar explizit, das ist also kein "unsicheres Verlassen auf irgendeinen Automatismus", sondern gehört so. PHP ist es egal, ob die Datei "ordnungsgemäß" geschlossen wird, oder ob der PHP-Bereich offen bleibt.  
  
 - Sven Rautenberg