(Gepostet, als von Raketenwillis Posting erst der Stand von 9:09 sichtbar war, daher einige Redundanzen damit)
Hallo claus,
if(strlen($_GET['kap']) > 3 )
exit(header('Status: 403', TRUE, 403));
// homjhjhj erfüllt sonst case hom
Sagt wer?! PHP von v4.4.9 bis 8.1.3 machen keinen Prefixvergleich, sondern einen vollständigen Vergleich. Diese Abfrage ist unnötig.
if(isset($_GET['kap'])) { ... }
Was tust Du, wenn der Parameter nicht gesetzt ist? Wird dieser Fall außerhalb dessen, was Du vorgezeigt hast, behandelt? Dies ist einer von zwei Fällen, für die ich mir vorstellen kann, dass der Header nicht gesetzt wird (der andere kommt weiter unten). Aber in deiner gezeigten Situation ist der Parameter da, das ist also aktuell nicht das Problem.
exit(header(...));
Wrong. Die Funktion header liefert void
- also gar nüscht - zurück. Ihr Ergebnis kann daher nicht als Argument für eine andere Funktion verwendet werden. Mach es so, auch wenn das zwei Zeilen sind:
header(...);
exit();
Ansonsten bin ich der Raketenmeinung: irgendwas anderes ist das Problem. Der gezeigte Code sollte bei index.php?kap=sub definitiv einen 403 Status erzeugen. Das könnte höchstens dann schiefgehen, wenn vor dem header-Aufruf eine andere Ausgabe gemacht wurde, die dazu führte, dass die Header bereits gesendet wurden. In dem Fall ist ein header-Aufruf wirkungslos.
Das Problem ist das Leerzeichen im URI, sehe ich das richtig?
Ich sehe kein Leerzeichen in der URI. Wo ist eins?
Kann es sein, dass Du vor dem gezeigten Code noch etwas machst, das Ausgaben produziert, wenn der kap-Parameter vorhanden und nicht länger als 3 Stellen ist?
Rolf
sumpsi - posui - obstruxi