Hallo Bastian,
mach Dir klar, wie der Ablauf ist.
Mal angenommen, dass deine while-Schleife in einem run_test.php steckt.
Dann würde dies passieren:
- Der Browser ruft run_test.php ab
- run_test.php wird ausgeführt und der Browser erwartet eine HTML Seite als Antwort (die wirst Du sicherlich erzeugen, aber zeigst es nicht, weil es nicht zum Problem gehört; alles gut)
- Diese Antwort ist eine HTTP Nachricht. Sie besteht aus
- einer Kopfzeile (z.B. HTTP/1.1 200 OK)
- einigen Header-Zeilen (von denen Location eine ist)
- einer Leerzeile
- dem Dokument, das der Browser anzeigen soll (zumeist also das HTML)
D.h. run_test wird einmal aufgerufen schickt eine Antwort und der Browser muss dann damit etwas anfangen. Wenn Du einen Location-Header sendest, tut PHP automatisch noch etwas mehr: Es setzt den HTTP Statuscode auf 302 (sofern nicht ein anderer Statuscode gesetzt wurde), und DER führt dazu, dass der Browser nach einem Location Header sucht, um zu wissen, wohin er weiterleiten soll.
Deine While-Schleife erzeugt fünf solcher Header. Allerdings rufst Du die header-Funktion ohne zweiten Parameter auf, und deshalb ersetzt PHP einen vorhandenen Location Header durch den neuen. Es bleibt also nur
Location: test.php?param=5
übrig, und dies ruft der Browser nun ab. Wenn test.php keine Ausgaben macht, führt das zu einem leeren Bildschirm.
Es bleibt also die Frage nach den Alternativen. Dazu müsste man wissen, was test.php tun soll. Es macht keine Ausgaben, sagst Du. Sondern? Was tut es? Und wozu verwendet es den Parameter?
Meine erste Annahme wäre, dass man den Code in test.php in eine Funktion packen sollte. In deiner while-Schleife kannst Du dann einfach die Funktion fünf mal aufrufen. Wie man das genau tun muss, hängt von diversen Dingen ab und lässt sich nicht ohne weitere Informationen sagen. Das Grundgerüst sähe so aus:
$i=0;
while($i < 5) {
test($i);
$i++;
}
function test($param)
{
echo "Hallo Welt $param \n";
}
Aber ob das für Dich so passt, kann ich ohne weiteres nicht sagen.
Rolf
sumpsi - posui - obstruxi