Pregunta

Tenemos un cliente que intenta llamar a nuestro servicio web escrito en C # desde el código PHP. La llamada al servicio web toma mucho tiempo como parámetro.

Esta llamada funciona bien para otros clientes que llaman desde C # o Java, pero este cliente está recibiendo un error de la llamada. No he depurado su llamada específica, pero supongo que el entero de 64 bits se está truncando de alguna manera desde PHP. El cliente dice que solo está haciendo la llamada al servicio web con una cadena, pero hay un contenedor en PHP que sí convierte la conversión. ¿Podría estar perdiendo la información del número?

Gracias por cualquier información.

¿Fue útil?

Solución

La mayoría de las instalaciones PHP no admiten enteros de 64 bits: 32 es el máximo. Puede verificar esto leyendo la constante PHP_INT_SIZE (4 = 32bit, 8 = 64bit) o ??leyendo el valor PHP_INT_MAX.

<?php

echo PHP_INT_SIZE, "\n", PHP_INT_MAX;

?>

Si la clase de servicio web que está utilizando está intentando convertir una representación de cadena de un entero de 64 bits, entonces sí, lo más probable es que esté truncada o convertida en flotante. Puedes ver este comportamiento con esta simple prueba

<?php

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

Sin conocer los detalles de su implementación, es difícil postular sobre lo que podría ser una buena solución / solución.

Otros consejos

Si es absolutamente necesario tomar un número grande como ese, conviértalo en una cadena y conviértalo a largo en su servicio web.

Esto molestará un poco a tus otros usuarios, pero lo hará más amigable para tus clientes que usan PHP.

PHP asesinó brutalmente su soporte de enteros, hasta el punto de que no tiene una forma predecible de saberlo, una instalación específica manejará enteros de 32 o 64 bits.

La forma más fácil de manejar esto sería exponer un nuevo punto final que toma una cadena y simplemente lanzarlo en su extremo.

Para referencia sobre el error épico de PHP:

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

Escribí un artículo sobre PHP usando nuSoap para llamar a un servicio web de C # ... Aún no he encontrado el problema con conversiones largas de int, pero definitivamente haré algunas pruebas para ver si debo agregarlo a mi artículo. . Gracias, Sean http://seanmcilvenna.com/blog/7-general/24- windows-php-development

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top