Kann mir jemand sagen, warum bei der Auswahl einer PSD-Datei die if-Anweisung im PHP-Code als wahr und echos "image / vnd.adobe.photoshop" durchgeht?
%Vor%Weil das falsch ist
%Vor%Sollte
sein %Vor%Oder sogar
%Vor%Das heißt, weil eine nicht leere Zeichenfolge als wahr betrachtet wird, wurde die IF-Bedingung erfüllt.
Dies liegt daran, dass der bitweise Operator eine niedrigere Priorität als die Gleichheitsprüfung hat. Es geht so:
Sie haben
%Vor%Gleichheit wird zuerst in den booleschen Wert aufgelöst, und Ihr Ausdruck wird zu
%Vor% Nicht leere Strings werden wie true
behandelt, wenn sie in Ausdruck verwendet werden. Das heißt, wir haben
Und das Ergebnis davon ist natürlich true
, also wird der if-Block ausgeführt.
Sie können auch folgende Bedingung haben:
%Vor%Die anderen Antworten sind gut, das ist nur eine andere Möglichkeit, es zu lösen:)
Die if-Anweisung, wie Sie sie geschrieben haben, würde als TRUE erwartet.
Dies liegt daran, dass Sie "image / gif" nicht mit irgendetwas vergleichen, sondern lediglich als booleschen Wert. PHP konvertiert Zeichenfolgenwerte (die nicht "0"
oder leer sind ( ""
)) auf TRUE, wenn sie als Boolean ausgewertet werden. Im Wesentlichen sagt Ihre IF-Anweisung also: "Wenn $imagetype
gleich "image/jpeg"
OR "image/gif"
ist TRUE ist, dann tu das Zeug.
Ihre if-Bedingung wird immer bestehen, weil "image / gif" IMMER als wahr gewertet wird, also ist es egal, welcher $imagetype
s-Wert tatsächlich ist.
ist äquivalent zu:
%Vor%was in diesem Fall als
ausgewertet wird %Vor% was zu true zählt, unabhängig vom Wert von $condition1
weil if(false || true)
true
Ein anderer Punkt: Ich schlage vor, anstelle von == den Operator === zu verwenden. Der endgültige Code sollte also lauten:
%Vor%Tags und Links php