Limitations de PHP 32 bits
Si vous exécutez Drupal sur un système où PHP est compilé ou limité à l’utilisation d’entiers 32 bits, vous ne pourrez saisir que des dates comprises entre 1901 et 2038 (plus précisément, du 13 décembre 1901 à 20:45:52 UTC au 19 janvier 2038 à 03:14:07 UTC). Ceci est largement connu comme le problème de l’an 2038.
Un symptôme courant est que la date s’affiche ou s’enregistre comme 1970-01-01 au lieu de la valeur attendue hors de cette plage. Cela affectera toutes les applications PHP. En particulier, dans Drupal, cela impacte les types de champs basés sur la date, c’est-à-dire uniquement la date ou la date et l’heure, y compris le widget « Sélecteur de liste ». Vous pouvez choisir des années hors de la plage 1900 à 2038, mais comme PHP lui-même ne peut pas les gérer, elles seront sauvegardées/affichées comme 1970-01-01 sans avertissement.
Produits affectés
- Les builds officiels Windows de PHP 5.x / 7.x pour x86 et PHP 5.x pour x64.
- Tout paquet de stack web (XAMPP, Wamp, etc.) avec PHP compilé pour version 32 bits et/ou fonctionnant sur un système 32 bits.
- Acquia Dev Desktop 2 avant la sortie du 14 juin 2018 (qui utilise maintenant PHP 64 bits et MySQL).
Note : c’est la manière dont PHP est compilé qui compte : si vous avez une version 32 bits de PHP fonctionnant sur un OS 64 bits, vous aurez quand même ce problème.
Test
Pour vérifier si votre PHP est concerné, vous pouvez exécuter cette commande (en une ligne) :
php -r "echo (date('y',strtotime('2039-01-01')) == 39 ? 'OK' : 'Limitation Y2K38') . PHP_EOL;"
Un PHP non affecté affichera OK, tandis qu’un PHP vulnérable affichera Limitation Y2K38.