- 25 Agosto 2015
- 23
- 0
- Miglior risposta
- 0
Questa mattina mentre stavo cercando una soluzione per un mio problema mi sono inbattuto in una cosa riguardante il PHP che vorrei condividere con voi, in quanto ritengo interessante.
Come sapete il PHP ha un bel numero di costanti predefinito che coprono molti aspetti della programmazione con questo linguaggio; in
Dato che stavo cercando un modo per limitare i danni di un numero passato via get mi sono imbattuto in una discussione su Stackoverflow proprio riguardando il mio problema ed ho scoperta la costante PHP_INT_MAX, ma soprattutto dell'uso che se può fare.
Il "tipo" la utilizzava per poter verificare se un numero fornito via get fosse o meno all'interno del range di numeri gestibili del PHP:
dove $number è il numero passato via GET.
Manco a dirlo questo ha scatenata la mia curiosità e infatti mi sono messo a fare delle prove ed ho scoperto una cosa curiosa:
Sulla macchina in prova un windows 7 a 32 bit con php e apache 2. PHP_INT_MAX ha come valore massimo 2147483647.
La prima volta che ho usato il mio programma di prova ho messo come number 12 e il confronto mi ha restituito 12 come doveva avvenire, ma quando ho passato il numero che vedete, cioè un numero oltre il valore contenuto in PHP_INT_MAX è andato in palla!
Mi ha restituito 21474836470 cioè invece di 2miliardi eccetera è diventato 21miliardi eccetera; guardando il risultato si vede che restituisce 2147483647 con uno zero alla fine.
Provando con 2147483670 mi da 214748364722 cioè 22 oltre il numero max.
In pratica la macchina fa un calcolo semplicissimo; nel primo caso 48 è maggiore di un'unità rispetto a 47 e infatti aggiunge un'unità al numero max diventando 470, nel secondo caso è maggiore di 23 e infatti aggiunge 22, cioè 22 + 0 ( che qui è un'unità e va contato come uno quindi 23 ) in pratica conta quante unità oltre il massimo intero processabile e poi le aggiunge alla cifra.
E' il limite del PHP installato sulla macchina dell'esempio e non è superabile in nessun modo.
Ma non è finita qui, ho aggiunto al mio script questa istruzione:
non mi aspettavo che la processasse e infatti non l'ha fatto, non esce nulla perché un numero maggiore di PHP_INT_MAX non è processabile!
Concludendo, possiamo solo conoscere qual'è il massimo intero processabile dalla versione del PHP montato sul nostro server ma oltre a questo non ci serve a molto altro.
Io volevo controllare che un GET che fornisse un numero intero non superasse un numero troppo grande e per farlo pensavo di usare
ma non è possibile perché se $numero è ben maggiore di PHP_INT_MAX questo impalla il PHP.
Come sapete il PHP ha un bel numero di costanti predefinito che coprono molti aspetti della programmazione con questo linguaggio; in
Perfavore,
Entra
oppure
Registrati
per vedere i Link!
potete vederli tutti e sotto di essi c'è una piccola spiegazione su cosa forniscono.Dato che stavo cercando un modo per limitare i danni di un numero passato via get mi sono imbattuto in una discussione su Stackoverflow proprio riguardando il mio problema ed ho scoperta la costante PHP_INT_MAX, ma soprattutto dell'uso che se può fare.
Il "tipo" la utilizzava per poter verificare se un numero fornito via get fosse o meno all'interno del range di numeri gestibili del PHP:
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Manco a dirlo questo ha scatenata la mia curiosità e infatti mi sono messo a fare delle prove ed ho scoperto una cosa curiosa:
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
La prima volta che ho usato il mio programma di prova ho messo come number 12 e il confronto mi ha restituito 12 come doveva avvenire, ma quando ho passato il numero che vedete, cioè un numero oltre il valore contenuto in PHP_INT_MAX è andato in palla!
Mi ha restituito 21474836470 cioè invece di 2miliardi eccetera è diventato 21miliardi eccetera; guardando il risultato si vede che restituisce 2147483647 con uno zero alla fine.
Provando con 2147483670 mi da 214748364722 cioè 22 oltre il numero max.
In pratica la macchina fa un calcolo semplicissimo; nel primo caso 48 è maggiore di un'unità rispetto a 47 e infatti aggiunge un'unità al numero max diventando 470, nel secondo caso è maggiore di 23 e infatti aggiunge 22, cioè 22 + 0 ( che qui è un'unità e va contato come uno quindi 23 ) in pratica conta quante unità oltre il massimo intero processabile e poi le aggiunge alla cifra.
E' il limite del PHP installato sulla macchina dell'esempio e non è superabile in nessun modo.
Ma non è finita qui, ho aggiunto al mio script questa istruzione:
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Concludendo, possiamo solo conoscere qual'è il massimo intero processabile dalla versione del PHP montato sul nostro server ma oltre a questo non ci serve a molto altro.
Io volevo controllare che un GET che fornisse un numero intero non superasse un numero troppo grande e per farlo pensavo di usare
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!