1

PHPコードからC#で記述されたWebサービスを呼び出そうとしている顧客がいます。Webサービス呼び出しはパラメータとして時間がかかります。

この呼び出しは、C#またはJavaから呼び出している他のお客様には問題なく機能しますが、このお客様は呼び出しからエラーが返されます。私は彼らの特定の呼び出しをデバッグしていませんが、64ビット整数がPHPから何らかの形で切り捨てられていると推測しています。顧客は、文字列を使用してWebサービス呼び出しを行っているだけだと言っていますが、型変換を行うラッパーがPHPにあります。これは番号情報を失っている可能性がありますか?

情報をありがとう。

4

4 に答える 4

1

ほとんどのPHPインストールは64ビット整数をサポートしません-32が最大です。これは、PHP_INT_SIZE定数(4 = 32ビット、8 = 64ビット)を読み取るか、PHP_INT_MAX値を読み取ることで確認できます。

<?php

echo PHP_INT_SIZE, "\n", PHP_INT_MAX;

?>

彼が使用しているWebサービスクラスが64ビット整数の文字列表現を型変換しようとしている場合は、そうです。ほとんどの場合、切り捨てられるか、floatに変換されます。この簡単なテストでこの動作を確認できます

<?php

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

彼の実装の詳細を知らなければ、良い解決策/回避策が何であるかを推測することは困難です。

于 2008-10-14T20:09:18.867 に答える
0

どうしてもそのような大きな数を取る必要がある場合は、それを文字列にして、Webサービスでlongに変換します。

これにより、他のユーザーは少し煩わしくなりますが、PHPを使用するコスチュームにとってはより使いやすくなります。

于 2008-10-14T23:05:32.397 に答える
0

PHPはその整数サポートを残酷に殺害し、特定のインストールが32ビットまたは64ビット整数を処理することを予測できる方法がないところまで行きました。

これを処理する最も簡単な方法は、文字列を受け取る新しいエンドポイントを公開し、それを自分の側にキャストすることです。

PHPの叙事詩の失敗に関する参考資料:

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

于 2008-10-14T23:22:41.787 に答える
0

nuSoap を使用して C# Web サービスを呼び出す PHP に関する記事を書きました... long int 変換の問題はまだ発生していませんが、記事に追加する必要があるかどうかを確認するためにいくつかのテストを実行する予定です。ありがとう、ショーン http://seanmcilvenna.com/blog/7-general/24-windows-php-development

于 2009-10-01T01:49:07.187 に答える