Bitoperations- Funktionen für 64bit kompatibel machen

Atako

Grünschnabel
Hey!

Ich habe ein Skript, welches eine Serverliste von GameSpy abfragt. Leider funktioniert dieses Skript anscheinend nur auf 32bit Systemen (zB. bei mir lokal auf XAMPP), auf 64bit macht es aber Probleme (zB. bei meinem Webhoster) d.h. es werden total falsche IP's und Ports angezeigt.
An den PHP Einstellungen liegt es wohl nicht, da ich diese lokal identisch mit denen meines Webhosters eingestellt habe.

Falsche Ergebnisse siehe hier:
http://rhonkar.kilu.de/test/index2.php

Die Ports müssten alle 15425 sein, manche 15426 und 15427.. aber nicht solch ein Wirrwarr. Die IP's stimmen auch alle nicht.

Ich bin mir ziemlich sicher, dass es daran liegt dass das Skript eigene Bitoperations- Funktion verwendet, welche nur für 32bit ausgelegt sind.

Frage:
Könnte man solche Funktionen ohne großen Aufwand so umschreiben, dass sie unter 32- UND/oder 64bit laufen (UND wäre mir lieber)?

Die meiner Vermutung nach betroffenen Funktionen:

function lshiftright($var, $amt)
function _BF_SHR32($x, $bits)
function _BF_SHL32($x, $bits)
function _BF_OR32($x, $y)
function _BF_ADD32($x, $y)
function _BF_GETBYTE($x, $y)

(In SharedDecode.php)

Ich denke, mehr ist es nicht. Aber so genau weiß ich es leider nicht.
Zu finden ist das Skript hier:
http://rhonkar.kilu.de/gsquery.rar
(Größtenteils nur Decodierung und Generierung eines Validationsschlüssels)

Ich wäre sehr dankbar, wenn man mir weiterhelfen könnte. Leider habe ich mit Bitoperationen nix am Hut.

Zusatzinformation:

Code:
Webhoster:
PHP_VERSION=5.1.6
PHP_OS=Linux
PHP_INT_MAX=9223372036854775807
PHP_INT_SIZE=8
+1 -> -9223372036854775808
- -> -9223372036854775807
-1 -> -9223372036854775808
L -> dcba
N -> abcd
V -> dcba


Lokal:
PHP_VERSION=5.2.5
PHP_OS=WINNT
PHP_INT_MAX=2147483647
PHP_INT_SIZE=4
+1 -> -2147483648
- -> -2147483647
-1 -> -2147483648
L -> dcba
N -> abcd
V -> dcba

Vielen Dank!
MfG,
Atako
 
Hm, Windows Vista 64bit und PHP 5.2.6
Mein Ergebnis sieht relativ gut aus...
IPs sehen annehmbar aus und der meistgezählte Port ist 15425.
Nur der Port der letzten IP ist 24940.

Woher hast du das Skript denn?
 
Hmmm, komisch... Aber woran kann es sonst liegen?
Das Skript ist ein PHP Port aus C und der Ersteller ist nicht mehr erreichbar =(

Kannst du vielleicht zur Überprüfung mal dieses Skript bei dir laufen lassen und das Ergebnis posten?

Code:
<?php
echo "<pre>\n";
foreach(array('PHP_VERSION', 'PHP_OS', 'PHP_INT_MAX','PHP_INT_SIZE') as $c) {
    echo $c,'=', constant($c), "\n";
}
echo '+1 -> ', (int)(PHP_INT_MAX+1), "\n"; 
echo '-  -> ', (int)(-PHP_INT_MAX), "\n"; 
echo '-1 -> ', (int)(-PHP_INT_MAX-1), "\n"; 

foreach(array('L','N','V') as $f) {
    echo $f, ' -> ', pack($f, 0x61626364), "\n";
}
echo '<pre>';
?>

Danke!
MfG
 
PHP_VERSION=5.2.5
PHP_OS=WINNT
PHP_INT_MAX=2147483647
PHP_INT_SIZE=4
+1 -> -2147483648
- -> -2147483647
-1 -> -2147483648
L -> dcba
N -> abcd
V -> dcba

Ich nutze allerdings auch nur ein selbst konfiguriertes 32bit WAMP System, da ich in den 64bit Portierungen für Windows zu wenig Nutzen sehe... Liegt also wahrscheinlich daran, das es kein 64bit Build ist.
 
Ja, also liegt es wohl doch daran...
Hmm ich frage mich wie schwer es wäre, das Skript umzuschreiben...
 
Zurück