PHP: default Zweig in switch will nicht anspringen
bearbeitet von Rolf B*(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 der einzige Fall, für den ich mir vorstellen kann, dass der Header nicht gesetzt wird. Aber in deiner gezeigten Situation ist der Parameter da, das ist also aktuell nicht das Problem.
> `exit(header(...));`{: .bad}
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:
~~~php,good
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
PHP: default Zweig in switch will nicht anspringen
bearbeitet von Rolf B*(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 der einzige Fall, für den ich mir vorstellen kann, dass der Header nicht gesetzt wird. Aber in deiner gezeigten Situation ist der Parameter da, das ist also aktuell nicht das Problem.
> `exit(header(...));`{: .bad}
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:
~~~php,good
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-Paramter vorhanden und nicht länger als 3 Stellen ist?
_Rolf_
--
sumpsi - posui - obstruxi
PHP: default Zweig in switch will nicht anspringen
bearbeitet von Rolf BHallo 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 der einzige Fall, für den ich mir vorstellen kann, dass der Header nicht gesetzt wird. Aber in deiner gezeigten Situation ist der Parameter da, das ist also aktuell nicht das Problem.
> `exit(header(...));`{: .bad}
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:
~~~php,good
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-Paramter vorhanden und nicht länger als 3 Stellen ist?
_Rolf_
--
sumpsi - posui - obstruxi