Question

Nous avons un client qui tente d'appeler notre service Web écrit en C # à partir de code PHP. L’appel du service Web prend beaucoup de temps comme paramètre.

Cet appel fonctionne bien pour les autres clients appelant depuis C # ou Java, mais ce client reçoit une erreur de la part de l'appel. Je n'ai pas débogué leur appel spécifique, mais je suppose que le nombre entier de 64 bits est en quelque sorte tronqué à partir de PHP. Le client dit qu'il appelle simplement le service Web avec une chaîne, mais existe-t-il un wrapper en PHP qui effectue la conversion de type. Cela pourrait-il être perdre les informations de numéro?

Merci pour toute information.

Était-ce utile?

La solution

La plupart des installations PHP ne supportent pas les entiers 64 bits - 32 est le maximum. Vous pouvez vérifier cela en lisant la constante PHP_INT_SIZE (4 = 32 bits, 8 = 64 bits) ou en lisant la valeur PHP_INT_MAX.

<?php

echo PHP_INT_SIZE, "\n", PHP_INT_MAX;

?>

Si la classe de service Web qu'il utilise tente de convertir une représentation sous forme de chaîne d'un entier de 64 bits sous forme de chaîne, elle est probablement tronquée ou convertie en un nombre flottant. Vous pouvez en quelque sorte voir ce comportement avec ce test simple

<?php

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

Sans connaître les détails de son implémentation, il est difficile de postuler sur ce que pourrait être une bonne solution / solution de contournement.

Autres conseils

Si vous devez absolument prendre un grand nombre comme celui-là, faites-en une chaîne et convertissez-la longtemps dans votre service Web.

Cela dérangera un peu vos autres utilisateurs, mais le rendra plus convivial pour vos clients utilisant PHP.

PHP a brutalement assassiné son support entier, au point que vous n'avez aucun moyen prévisible de le savoir, une installation spécifique gérera des entiers 32 bits ou 64 bits.

Le moyen le plus simple de gérer cela consiste à exposer un nouveau point de terminaison prenant une chaîne et à le lancer de votre côté.

Pour référence sur l'échec épique de PHP:

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

J'ai écrit un article sur l'utilisation de nuSoap par PHP pour appeler un service Web C # ... Je n'ai pas encore rencontré le problème des conversions int longues, mais je vais effectuer des tests pour voir si je devrais l'ajouter à mon article. . Merci Sean http://seanmcilvenna.com/blog/7-general/24- windows-php-development

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top