logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll
15/04/2025, by Ivan

PHP が 32 ビット整数を使うようにコンパイルまたは制限されているシステムで Drupal を実行している場合、入力できる日付は 1901 年から 2038 年の間(具体的には 1901 年 12 月 13 日 20:45:52 UTC から 2038 年 1 月 19 日 03:14:07 UTC まで)に限られます。これは一般に 2038 年問題 として知られています。

典型的な症状は、上記の範囲外の意図した値の代わりに、日付が 1970-01-01 として表示または保存されることです。これはすべての PHP アプリケーションに影響します。具体的には、Drupal では、「Select list(選択リスト)」ウィジェットを含む、日付ベースのフィールドタイプ――日付のみ、および日付/時刻――に影響します。1900~2038 の範囲外の年を選択できますが、PHP 自体がそれらを扱えないため、警告なしに 1970-01-01 として保存/表示されます。

影響を受ける製品

  • x86 向けの PHP 5.x / 7.x および x64 向けの PHP 5.x の公式 Windows ビルド。
  • 32 ビット用にコンパイルされた PHP、および/または 32 ビットシステムで動作している Web スタックパッケージ(XAMPP、Wamp など)。
  • 2018 年 6 月 14 日リリースより前の Acquia Dev Desktop 2(現在は 64 ビットの PHP と MySQL を使用しています)。

注意:重要なのは PHP 自体がどのようにコンパイルされているかです――64 ビット OS 上で 32 ビット版の PHP を実行している場合でも、この問題に直面します。

テスト

お使いの PHP インストールが影響を受けるかどうかを確認するには、次のコマンドを(1 行で)実行します:

php -r "echo (date('y',strtotime('2039-01-01')) == 39 ? 'OK' : 'Y2K38 limitation') . PHP_EOL;"

影響を受けない PHP インスタンスは OK と表示し、脆弱な PHP インスタンスは Y2K38 limitation と表示します。