[quote=“sumatra70”]@chrisb:
Schaue dir das Script noch einmal ganz genau an und gehe dann logisch vor.[/quote]
Gut, dann mache du bitte das gleiche - mit mir zusammen.
&& bindet stärker als ||, da sind wir uns einig?
Dann kann man deine verknüpften Bedingungen also an den Stellen, wo || steht, auseinandernehmen, und einzeln betrachten.
var_dump($ip=="69.162.71.138");
var_dump($host=="138-71-162-69.reverse.lstn.net" && $ip=="193.137.102.7");
var_dump($host=="falcon.mat.uc.pt");
var_dump($browser=="libwww-perl/5.805" && $ip=="69.162.94.221");
var_dump($host=="server5.tshostez.com.br");
var_dump($browser=="OPWV-SDK/62 UP.Browser/6.2.2.1.208 (GUI) MMP/2.0" && $ip=="94.102.63.13");
var_dump($host=="94.102.63.13");
var_dump($browser=="Mozilla/4.7 (compatible; OffByOne; Windows 2000) Webster Pro V3.4");
Das var_dump habe ich jeweils darum herum gesetzt, damit wir als Kontrollausgabe angezeigt bekommen, was die jeweilige Teilbedingung für ein Ergebnis hat.
Jetzt nehmen wir mal folgende Beispieldaten:
$ip='193.137.102.7';
$host='falcon.mat.uc.pt';
Das, was bei $host als Wert steht ist das, was gethostbyaddr für 193.137.102.7 liefert.
Das sind also Daten, die zusammengehören, sind wir uns da auch noch einig? Wenn die IP 193.137.102.7 ist, dann liefert gethostbyaddr ‘falcon.mat.uc.pt’.
So, und was kommt jetzt raus, wenn wir obigen Code - wie gesagt, deine Bedingungen 1:1 übernommen, an den Stellen, wo du || gesetzt hast, in einzelne Bedinungen aufgetrennt - mit diesen Daten ausführen?
Das hier:
bool(false)
bool(false)
bool(true)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
Du siehst, nur die dritte Bedingung liefert wahr. (Da du alles mit || verknüpft hast, kommt damit am Ende immer noch das raus, was du gerne hättest.)
Aber die Bedingung, in der exakt die IP drin steht, die wir gerade überprüfen wollen -
Lediglich die nachfolgende Abfrage des Hostnamen,
“rettet” dich hier - die Gesamtbedingung wird immer noch wahr, so wie du es haben wolltest.
Aber erscheint dir das sinnvoll? Die Abfrage, in der du explizit die IP “193.137.102.7” eingesetzt hast, ergibt falsch - da muss dir doch eigentlich selber auch auffallen, dass die Formulierung dieser Bedingungen nicht besonders sinnvoll ist, oder?
Es liegt kein “Fehler” vor im Sinne von “das Script tut das, was der Scriptersteller wollte”. Allerdings muss dort noch das Wörtchen “zufällig” eingefügt werden.
Es liegt aber sehr wohl ein Fehler vor im Sinne von “die Bedingungen sind logisch korrekt gewählt”.
Der einizge “Sinn”, den das hier ergibt, ist der, dass es dein Script “rettet”. Durch es geht dein Script auch dann noch in den IF-Zweig, wenn die zu überprüfende IP “193.137.102.7” ist - obwohl die Bedingung, in der du diese IP überprüfst, falsch ergibt.
Dieses doppelte Gemoppel ist also nur deshalb “notwendig”, weil du die Bedingung, die die IP überprüft falsch formuliert hast - falsch dadurch, dass du sie per && mit der Bedingung $host==“138-71-162-69.reverse.lstn.net” verbunden hast, denn diese beiden werden nie gleichzeitig wahr werden.
Hättest du die Gesamtbedingung logisch und vernünftig formuliert, sprich die einzelnen Teilbedingungen mit dem passenden logischen Operator verknüpft und ggf. Klammerung von Teilausdrücken eingefügt - dann würdest du auch ohne gethostbyaddr das “richtige”, das gewünschte, Ergebnis bekommen.
Ich hoffe, das ist nun klar geworden.
Bitte versuchse dich nicht in Sarkasmus in Situationen, in denen er deinerseits komplett unangebracht ist.
Ich versuche dir hier zu erklären, wo dein Script unsinnig aufgebaut ist.
Und deine Reaktion ist mal wieder die, die ich von dir schon gewohnt bin - du zeigst dich uneinsichtig, und versuchst zu bestreiten, dass der Fehler bei dir liegt.
Ich habe schon im vorherigen Beitrag klar zu machen versucht, wo der Unsinn darin liegt - und zwar an Hand konkreter Code-Zeilen. Du könntest echt etwas hinzu lernen, wenn du das mal annimmst.
Du hingegen erklärst nicht an Hand von einzelnen Zeilen, was dein Script im einzelnen deiner Meinung nach machen soll. Ich vermute einfach deshalb, weil du es gar nicht so genau kannst.
Dass du dann aber ohne eine solche Erklärung mir sagst, ich solle es mir noch mal “genau anschauen” und “logisch vorgehen”, ist ein ziemliche Frechheit. Allerdings bin ich auch das von dir schon gewohnt.