Uzun bir parametre ile PHP ile bir C # web servisini çağırmak

3 Cevap

Biz web hizmeti PHP kodu C # ile yazılmış aramaya çalışan bir müşteri var. Web hizmeti çağrısı parametre olarak bir uzun sürüyor.

Bu çağrı, diğer müşterilerin C # veya Java arayan ancak bu müşteri geri çağrısından bir hata oluyor için çalışıyor. Ben kendi özel arama ayıklanan değil ama 64bit tamsayı bir şekilde PHP kesilir olduğunu tahmin ediyorum. Müşteri sadece bir dize ile web hizmeti çağrısı yapıyoruz diyor ama dönüşüm PHP türü bir sarıcı var. Bu sayı bilgileri kaybetme olabilir mi?

Herhangi bir bilgi için teşekkürler.

3 Cevap

PHP yüklemelerin çoğu 64 bit tamsayı desteği olmayacak - 32 max. Sen PHP_INT_SIZE sabiti (4 = 32 bit, 8 = 64bit) okuyarak bu çek veya PHP_INT_MAX'tan değerini okuyabilirsiniz.

<?php

echo PHP_INT_SIZE, "\n", PHP_INT_MAX;

?>

O kullanarak web servis sınıfı tip-dönüştürmek için bir 64 bit tamsayı dize halinde temsilini çalışıyor ise, o zaman evet, büyük olasılıkla kesilmiş veya float dönüştürülmektedir bulunuyor. Sıralamak bu basit test ile bu davranış görebilirsiniz

<?php

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

Onun uygulama ayrıntılarını bilmeden, iyi bir çözüm / çözüm olabilir ne önerme zordur.

Kesinlikle böyle büyük bir numarası almak gerekiyorsa, bu bir dize yapmak ve web hizmeti uzun dönüştürmek.

Bu diğer kullanıcılara biraz rahatsız olacak, ancak PHP kullanan müşterilerimize daha samimi olur.

PHP vahşice Eğer belirli bir yüklemek 32-bit veya 64-bit tamsayılar işlemek bilerek hiçbir öngörülebilir bir yol var noktasına, tamsayı desteğini öldürüldü.

Bu işlemek için en kolay yolu, bir dize alır, yeni bir bitiş noktası göstermek için olacak, ve sadece ucunda döküm olacaktır.

PHP'nin destansı başvuru için başarısız:

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