У нас есть клиент, который пытается вызвать нашу веб-службу, написанную на C#, из кода PHP. Вызов веб-службы требует длинного параметра.
Этот вызов отлично работает для других клиентов, звонящих с C# или Java, но этот клиент получает сообщение об ошибке в ответ на вызов. Я не отлаживал их конкретный вызов, но предполагаю, что 64-битное целое число каким-то образом урезается из PHP. Заказчик говорит, что он просто выполняет вызов веб-службы со строкой, но есть ли в PHP оболочка, которая выполняет преобразование типов. Может быть, это потеря информации о номере?
Спасибо за любую информацию.





Большинство установок PHP не поддерживают 64-битные целые числа - 32 - максимум. Вы можете проверить это, прочитав константу PHP_INT_SIZE (4 = 32 бит, 8 = 64 бит) или прочитав значение PHP_INT_MAX.
<?php
echo PHP_INT_SIZE, "\n", PHP_INT_MAX;
?>
Если используемый им класс веб-службы пытается преобразовать строковое представление 64-битного целого числа, то да, скорее всего, оно усекается или преобразуется в число с плавающей запятой. Вы можете увидеть это поведение с помощью этого простого теста
<?php
echo intval( "12345678901234567890" );
// prints 2147483647, the max value for a 32 bit signed int.
Не зная подробностей его реализации, трудно предположить, какое может быть хорошее решение / обходной путь.
Если вам абсолютно необходимо взять такое большое число, превратите его в строку и преобразуйте в длинное в своем веб-сервисе.
Это немного побеспокоит других ваших пользователей, но сделает его более удобным для пользователей, использующих PHP.
PHP жестоко убил свою целочисленную поддержку до такой степени, что у вас нет предсказуемого способа узнать, что конкретная установка будет обрабатывать 32-битные или 64-битные целые числа.
Самый простой способ справиться с этим - открыть новую конечную точку, которая принимает строку, и просто применить ее к вам.
Для справки об эпическом провале PHP:
Я написал статью о PHP, использующем nuSoap для вызова веб-службы C# ... Еще не сталкивался с проблемой с длинными преобразованиями int, но я определенно проведу несколько тестов, чтобы увидеть, следует ли мне добавить ее в свою статью. Спасибо, Шон http://seanmcilvenna.com/blog/7-general/24-windows-php-development