문제

PHP 코드에서 C#로 작성된 웹 서비스를 호출하려는 고객이 있습니다. 웹 서비스 호출은 매개 변수만큼 오래 걸립니다.

이 통화는 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.

그의 구현의 세부 사항을 알지 못하면 좋은 솔루션/해결 방법이 무엇인지에 대해 가정하기가 어렵습니다.

다른 팁

그런 큰 숫자를 절대적으로 가져 가야한다면 문자열로 만들고 웹 서비스에서 Long으로 변환하십시오.

이것은 다른 사용자를 조금 귀찮게하지만 PHP 사용 의상에 더 친숙하게 만들 것입니다.

PHP는 정수 지원을 잔인하게 살해하여 특정 설치가 32 비트 또는 64 비트 정수를 처리 할 예측 가능한 방법이없는 시점까지 살해했습니다.

이것을 처리하는 가장 쉬운 방법은 문자열을 취하는 새로운 엔드 포인트를 노출시키고 끝에 캐스팅하는 것입니다.

PHP의 서사시 실패에 대한 참조 :

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

NUSOAP를 사용하여 C# 웹 서비스를 호출하기 위해 PHP에 관한 기사를 썼습니다 ... 아직 긴 int 변환으로 문제가 발생하지는 않았지만 기사에 추가 해야하는지 확인하기 위해 일부 테스트를 실행할 것입니다. 고마워요, 션http://seanmcilvenna.com/blog/7-general/24-windows-php-development

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top