Hallo, ok, dann nehmen wir die Funktion mal auseinander.
Wir wollen uns einloggen und fragen als erstes nach der „Challenge“.
// get challenge string
$http_response = file_get_contents($loginurl);
$xml = simplexml_load_string($http_response);
$challenge=(string)$xml->Challenge;
$sid=(string)$xml->SID;
Im Feld SID sollen dabei nur „0000000“ stehen, in Challenge ein Hex-String/Zahl
Jetzt prüfen wir
- steht in $sid überhaupt was
- Der String in $sid besteht von Anfang bis Ende nur aus „0“
- Die challenge ist nicht null.
Um das zu testen, könnte man sich $sid und $challenge vorher mal ausgeben zusammen mit print_r($xml) lassen.
if ($sid && (preg_match("/^[0]+$/",$sid)) && $challenge) {
korrekter Weise sollte man schreiben
if (isset($sid) && (strlen($sid)>0) && (preg_match("/^[0]+$/",$sid)) && (isset($challenge)) && (strlen($challenge)>0) && (hexdec($challenge)>0)) {
Dann wird die erhaltene Challenge mit dem Password verknüpft, abgesendet und die Antwort ausgewertet.
//sid is null, got challenge
$sid="";
//build password response
$pass=$challenge."-".$password;
//UTF-16LE encoding as required
$pass=mb_convert_encoding($pass, "UTF-16LE");
//md5hash on top
$md5 = md5($pass);
//final answer string
$challenge_response = $challenge."-".$md5;
//send to box
$url=$loginurl."?response=".$challenge_response;
$http_response = file_get_contents($url);
//check answer
$xml = simplexml_load_string($http_response);
$sid=(string)$xml->SID;
Das Ergebnis wird gepüft, ob in $sid ein Wert drin steht, der nicht nur Nullen hat. Wenn ja, wird der Wert als Ergebnis der Funktion zurückgegeben, wenn nicht, ist das Funktionsergebniss NULL. Das führt zu der von Dir beobachteten Fehlermeldung.
Zum Testen bitte auch hier mal einen print auf auf $sid vor dem If einbauen +print_r($xml)
if ($sid && !preg_match("/^[0]+$/",$sid)) {
//is not null, bingo!
return $sid;
}
}
return null;
}//function
Schicke mir doch mal das Ergebnis der beiden neuen Prints bei If1 und If2.
Tommi