Frage

Wir haben einen Kunden, dass unser Web-Service versucht, in C # von PHP-Code geschrieben zu nennen. Der Web-Service-Aufruf dauert lange als Parameter.

Dieser Aufruf funktioniert für andere Kunden fein von C # oder Java aufrufen, aber dieser Kunde einen Fehler wird immer von dem Rückruf. Ich habe nicht ihren spezifischen Anruf debuggt, aber ich vermute, dass die 64-Bit-Integer-irgendwie von PHP abgeschnitten zu werden. Der Kunde sagt, sie machen nur den Web-Service-Aufruf mit einem String aber gibt es einen Wrapper in PHP, die Konvertierung funktioniert eingeben. Könnte dies die Zahl Informationen verlieren?

Vielen Dank für jede Info.

War es hilfreich?

Lösung

Die meisten PHP-Installationen werden nicht 64-Bit-Integer unterstützen - 32 ist der max. Sie können dies überprüfen, indem Sie die PHP_INT_SIZE Konstante Lesung (4 = 32 Bit, 8 = 64 Bit) oder den PHP_INT_MAX Wert lesen.

<?php

echo PHP_INT_SIZE, "\n", PHP_INT_MAX;

?>

Wenn die Web-Service-Klasse ist er mit versucht, eine String-Darstellung eines 64-Bit-Integer-typ zu konvertieren, dann ja, es ist meistens wahrscheinlich in einen Schwimmer abgeschnitten oder umgewandelt wird. Sie können eine Art dieses Verhalten mit diesem einfachen Test sehen

<?php

echo intval( "12345678901234567890" );
// prints 2147483647, the max value for a 32 bit signed int.

Ohne die Einzelheiten seiner Implementierung zu kennen, ist es schwierig, auf postulieren, was eine gute Lösung / Abhilfe könnte sein.

Andere Tipps

Wenn Sie unbedingt eine große Anzahl so nehmen muss, macht es zu einem String und wandelt es in lange in Ihrem Web-Service.

Dies wird Ihre andere Benutzer ein wenig Mühe, aber wäre es freundlich zu Ihren PHP-mit Kunden machen.

PHP brutal ermordet seine ganze Zahl Unterstützung, bis zu dem Punkt, wo Sie nicht vorhersehbarer Weise haben es zu wissen, eine bestimmte installieren 32-Bit oder 64-Bit-Integer behandeln.

Der einfachste Weg, dies zu handhaben wäre, einen neuen Endpunkt zu machen, die einen String und wirft es einfach auf Ihrer Seite.

Bezug auf PHP episches ausfallen:

http: //www.mysqlperformanceblog.com/2007/03/27/integers-in-php-running-with-scissors-and-portability/

Ich schrieb einen Artikel über PHP nusoap mit einem C # Web-Service anrufen ... noch nicht das Problem mit langen int Umwandlungen begegnet, aber ich werde auf jeden Fall einige Tests laufen, um zu sehen, ob ich es in meinen Artikel hinzufügen soll . Danke, Sean http://seanmcilvenna.com/blog/7-general/24- windows-pHP-Entwicklung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top