Limitazioni di PHP a 32 bit
Se esegui Drupal su un sistema in cui PHP è compilato o limitato all’uso di interi a 32 bit, potrai inserire solo date comprese tra il 1901 e il 2038 (in particolare, dalle 20:45:52 UTC del 13 dicembre 1901 alle 03:14:07 UTC del 19 gennaio 2038). Questo è comunemente noto come il problema dell’anno 2038.
Un sintomo comune è che la data viene visualizzata o registrata come 1970-01-01 invece del valore previsto al di fuori dell’intervallo sopra indicato. Questo influenzerà tutte le applicazioni PHP. In particolare, in Drupal influisce sui tipi di campo basati sulla data, cioè “solo data” e “data e ora”, incluso il widget “Selettore elenco”. È possibile selezionare anni al di fuori dell’intervallo 1900–2038, ma poiché PHP stesso non può gestirli, verranno salvati/visualizzati come 1970-01-01 senza alcun avviso.
Prodotti interessati
- Build ufficiali di Windows per PHP 5.x / 7.x per x86 e PHP 5.x per x64.
- Qualsiasi pacchetto di stack web (XAMPP, Wamp, ecc.) con PHP compilato per una versione a 32 bit e/o in esecuzione su un sistema a 32 bit.
- Acquia Dev Desktop 2 fino alla release del 14 giugno 2018 (ora utilizza PHP e MySQL a 64 bit).
Nota: è il modo in cui PHP stesso è stato compilato che conta: se hai una versione di PHP a 32 bit in esecuzione su un sistema operativo a 64 bit, incontrerai comunque il problema.
Verifica
Per verificare se la tua installazione di PHP è interessata, puoi eseguire questo comando (su una sola riga):
php -r "echo (date('y',strtotime('2039-01-01')) == 39 ? 'OK' : 'Y2K38 limitation') . PHP_EOL;"
Un’istanza di PHP non affetta stamperà OK, mentre un’istanza vulnerabile stamperà la limitazione Y2K38.