header(), kapier ich nicht....

markusdobmann hat gesagt.:
Oh mei oh Mei.............

Ganz simples Beispiel:
PHP:
html-tags....
<?php
header("Location: index.php");
?>

Funktioniert, aber warum? ich habe trotzdem vorher html ausgegeben

mfg
markus
Erstaunlicherweise funktioniert das bei mir auch (Win2k, localhost, Apache2, PHP5, Firefox).
Das ist aber kein Grund, weiterhin [phpf]header[/phpf] entgegen des Manuals zu verwenden, denn eigentlich sollte dies nicht funktionieren und nur weil es unter einer bestimmten Server-Client-Kombination und -Konfiguration mit einem bestimmten Quelltext klappt ist es nicht gleich richtig.

Gruß hpvw
 
Besser wäre noch die Daten vor jeglicher Ausgabe zu verarbeiten:
PHP:
<?php
	ob_start();
	if( /* Bedingung */ ) {
		header('Location: http://example.org/');
		exit;
	}
?>

[…]

<?php
	ob_end_flush();
?>

Ich hab übrigens gerade dein vorheriges Beispiel ausprobiert und es funktioniert tatsächlich. Dies wird jedoch möglicherweise daran liegen, dass PHP vor Versenden des tatsächlichen Inhalts alle HTTP-Header sammelt und diese zuerst versendet. Denn zwingt man PHP zuR Ausgabe des Inhalt durch die flush()-Funktion, wird der letzte HTTP-Header nicht mehr gesendet.
 
ABER das würde funktionieren?
PHP:
<?php
ob_start();
?>
html-tags... (Formular, usw...)
<?php
if (isset($_POST[eintragen]))
{
  # Daten speichern
  header("Location: index.php?action=gbook");
}
ob_end_flush();
?>

oder?
 
markusdobmann hat gesagt.:
ABER das würde funktionieren?
PHP:
<?php
ob_start();
?>
html-tags... (Formular, usw...)
<?php
if (isset($_POST[eintragen]))
{
  # Daten speichern
  header("Location: index.php?action=gbook");
}
ob_end_flush();
?>

oder?
Da sind noch zwei Fehler drin:
1. Du verwendest im Array $_POST eine Konstante. Diese ist zufällig gleich dem ihrem Namen entsprechenden String, wenn die Konstante vorher nicht definiert wurde. Im Klartext: eintragen muss in Anführungszeichen stehen.
2. Du verweist mit Deiner Location auf einen relativen URI, was jedoch nicht mit jedem Client funktionieren muss, da das HTTP-Protokoll für Location ausschließlich einen absoluten URI vorsieht.

Ansonsten sollte das funktionieren.

Wobei ich Gumbos letzte Lösung jedoch bevorzugen würde, da wären die Ausgabesteuerungsfunktionen sogar überflüssig.
 
Komisch ist er nicht :P


Mal ne andere Frage zu Headern,

welche Funktionen zählen alles zum header? Gibt es nochmehr als set_cookie() session_start() und header()
 
Zuletzt bearbeitet von einem Moderator:
Zurück