Zitat:
Zitat von Auf der Mauer
Meine Frage war, warum in meinem Beispiel von oben der Code dann ausgeführt wird wenn eine Zahl zurückgegeben wird und der andere Teil bei false.
|
Das ist eines der großen PHP Probleme: das automatische Typecasting.
Normalerweise dürfte
PHP-Code:
if ( $a = $b) {
}
gar nicht funktionieren, weil die Zuweisung lade $a mit dem Inhalt von $b überhaupt keinen Returnwert haben kann und haben dürfte. Weiterhin müßte der Bedingungsterm nach dem IF auf ein boolsches Ergebnis bestehen oder streiken.
Die berühmte while Schleife, um die Ergebnisse einer SQL Abfrage abzuholen, ist eigentlich auch falsch:
while ($row = $db->fetch_assoc())
While führt den Block dann aus, wenn die Bedingung wahr ist. $row = irgend was ist aber theoretisch immer wahr, weil es eine Zuweisung und keine Bedingung ist. Und irgend wann mal (nach 3 Joints und 2 Flaschen Fusel) haben sich die PHP Götter darauf geeinigt, daß zumindest bei dem SQL Fetch und bei ein paar anderen Funktionen (KA, welche) ein false == 'hab nix mehr' durchgereicht wird, damit while abbricht.
Zitat:
Bei PHP.net fand ich z.B. folgenden Code.
PHP-Code:
$size = getimagesize($filename);
if ($size) {
header("Content-type: {$size['mime']}");
exit;
} else {
// Fehler
}
# ist doch dasselbe als wenn ich folgendes schreibe.
if ($size = getimagesize($filename)) {
//--- Grafikdatei
} else {
//--- Keine Grafikdatei
}
Wenn es sich um keine Grafikdatei handelt dann liefert getimagesize false.
Erlaubt man nur einen bestimmten Grafiktyp z.B. JPG, dann muss man das natürlich noch extra prüfen.
|
Sowas ist Pfui. Wenn das Script aufgerufen wird, weil es ein Bild ausgeben soll, dann muß es auch ein Bild liefern. Also irgend was mit content-type: image...
Sonst fühlt sich der Browser verarscht, wenn er bei <mg src="fehler.php"> kein Bild sondern Text kriegt.
Für solche Fälle sollte man sich ein nettest Bildchen basteln, welches, wenn das Script auf die Fresse fällt, stattdessen abgeschickt wird.
Und weil man ja keine Lust hat, das Bild als jpg, gif und png auf den Server zu packen, schickt man den Content-type Header erst dann ab, wenn man weiß, was man hat.
Notfalls kann man ja damit nachgucken:
http://mod.php.developer.vc/content-type_1/ (Quelltext wird angezeigt)