Pergunta

Temos um cliente que está tentando chamar o nosso serviço web escrito em C # a partir do código PHP. A chamada de serviço web leva muito como parâmetro.

Essa chamada funciona bem para outros clientes que ligam do C # ou Java, mas este cliente está recebendo uma volta de erro da chamada. Eu não tenho depurado seu chamado específico, mas eu estou supondo que o número inteiro de 64 bits está sendo truncado de alguma forma de PHP. O cliente diz que eles estão apenas fazendo a chamada de serviço web com uma corda, mas há um invólucro em PHP que faz a conversão de tipo. Poderia ser este perder as informações número?

Obrigado por qualquer informação.

Foi útil?

Solução

instalações mais PHP não vai apoiar 64 bit inteiros - 32 é o máximo. Você pode verificar isso lendo a constante PHP_INT_SIZE (4 = 32 bits, 8 = 64 bits) ou ler o valor PHP_INT_MAX.

<?php

echo PHP_INT_SIZE, "\n", PHP_INT_MAX;

?>

Se a classe de serviço web que ele está usando está tentando digitar-converter uma representação de cadeia de um número inteiro de 64 bits, então sim, é mais provável a ser truncado ou convertido em um float. Você pode tipo de ver esse comportamento com este teste simples

<?php

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

Sem saber os detalhes de sua implementação, é difícil postulado sobre o que uma boa solução / solução alternativa poderia ser.

Outras dicas

Se você absolutamente deve ter um grande número assim, torná-lo uma corda, e convertê-lo para muito tempo em seu serviço web.

Isso vai incomodar seus outros usuários um pouco, mas torná-lo mais amigável para seus clientes-usando PHP.

PHP brutalmente assassinado seu apoio inteiro, até o ponto onde você não tem nenhuma forma previsível de saber que instalar um específico irá lidar com inteiros de 32 bits ou de 64 bits.

A maneira mais fácil de lidar com isso seria para expor um novo ponto de extremidade que recebe uma string, e apenas lançá-lo em seu final.

Para referência no épico de PHP falhar:

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

Eu escrevi um artigo sobre PHP usando NuSOAP chamar um serviço C # web ... ainda não encontrou o problema com conversões int longos, mas eu definitivamente a execução de alguns testes para ver se eu adicioná-lo em meu artigo . Obrigado, Sean http://seanmcilvenna.com/blog/7-general/24- windows-php-desenvolvimento

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top