Domanda

Abbiamo un cliente che sta cercando di chiamare il nostro servizio web scritto in C # dal codice PHP. La chiamata al servizio Web richiede molto tempo come parametro.

Questa chiamata funziona bene per altri clienti che chiamano da C # o Java ma questo cliente sta ricevendo un errore dalla chiamata. Non ho eseguito il debug della loro chiamata specifica, ma suppongo che il numero intero a 64 bit venga troncato in qualche modo da PHP. Il cliente dice che sta solo effettuando la chiamata al servizio web con una stringa ma c'è un wrapper in PHP che digita la conversione. Questo potrebbe perdere le informazioni sul numero?

Grazie per qualsiasi informazione.

È stato utile?

Soluzione

La maggior parte delle installazioni PHP non supporta numeri interi a 64 bit - 32 è il numero massimo. Puoi verificarlo leggendo la costante PHP_INT_SIZE (4 = 32 bit, 8 = 64 bit) o ??leggi il valore PHP_INT_MAX.

<?php

echo PHP_INT_SIZE, "\n", PHP_INT_MAX;

?>

Se la classe di servizi Web che sta usando sta cercando di convertire una rappresentazione di stringa di un numero intero a 64 bit, allora sì, probabilmente è troncata o convertita in un float. Puoi vedere questo comportamento con questo semplice test

<?php

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

Senza conoscere i dettagli della sua implementazione, è difficile postulare su quale potrebbe essere una buona soluzione / soluzione alternativa.

Altri suggerimenti

Se devi assolutamente prendere un numero così grande, trasformalo in una stringa e convertilo in long nel tuo servizio web.

Ciò disturberà un po 'gli altri utenti, ma lo renderebbe più amichevole con i clienti che utilizzano PHP.

PHP ha brutalmente ucciso il suo supporto per numeri interi, al punto che non hai un modo prevedibile di conoscerlo, una specifica installazione gestirà numeri interi a 32 o 64 bit.

Il modo più semplice per gestirlo sarebbe quello di esporre un nuovo endpoint che prende una stringa e lanciarlo semplicemente alla tua estremità.

Per riferimento sull'epico fallimento di PHP:

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

Ho scritto un articolo su PHP usando nuSoap per chiamare un servizio web C # ... Non ho ancora riscontrato il problema con conversioni int lunghe, ma sicuramente eseguirò alcuni test per vedere se dovrei aggiungerlo nel mio articolo . Grazie Sean http://seanmcilvenna.com/blog/7-general/24- finestre-php-sviluppo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top