外国のホスティング スペースを使用している友人は、タイムゾーン設定で問題に遭遇することがよくあります。 PHP スクリプト側の都市設定については、php.ini で date.timezone キーの値を「Asia/Shanghai」に設定できます。
外国のホスティングスペースを使用している友人は、タイムゾーン設定で問題に遭遇することがよくあります。 PHP スクリプト側の都市設定は、php.ini で date.timezone キーの値を「Asia/Shanghai」に設定できます。 通常、共有仮想ホスト自体には php.ini を変更する権限がありません。この時点で、それをプログラムの公開部分に追加する必要があります。 ini_set('date.timezone','Asia/Shanghai'); php.ini の設定を動的に変更します。その後、時間が正しいかどうかをテストできます: var_dump(date()); サーバーの現地時間が正しい場合、通常は問題は解決されます。 添付のとおり、PHP 5.1 以降では、対応するタイム ゾーンを変更するための特別な関数が提供されています。 date_default_timezone_set('Asia/Shanghai'); より汎用性が高いため、この関数を使用することをお勧めします。 「アジア/上海」に対応して、使用できる他の本土タイムゾーンは次のとおりです: アジア/重慶、アジア/上海、アジア/ウルムチ (順に、重慶、上海、ウルムチ) 香港と台湾で利用可能: アジア/マカオ。 、アジア/香港、アジア/台北 (マカオ、香港、台北の順)、およびシンガポール: アジア/シンガポール、その他の使用可能な値は次のとおりです: Etc/GMT-8、シンガポール、香港、中国。北京。 しかし、PHP側でタイムゾーンを正常に変更した後、日付が正しく記録されていないことがわかりました。このとき、データベースの問題ではないかと考えました。当然のことながら、プログラムによって挿入された関数は PHP の時刻を呼び出すのではなく、MySQL の CURRECT_TIMESTAMP を直接使用するためです。このとき、MySQL のタイムゾーンを変更できるかどうかを考慮する必要があります。 MySQL ドキュメントを参照すると、実行可能な SQL ステートメントが見つかりました。 SET GLOBAL タイムゾーン = '+8:00'; このうち「+8:00」は東8区の表現方法であり、他の都市部も順次推定できる。そして、データベース モデルに変更ステートメントを挿入したところ、権限が不十分であることがわかりました。 次に、次のような多くのステートメントをデバッグしました。 DATE_ADD(UTC_TIMESTAMP(), 間隔 8 時間); タイムゾーンを表示するSQL文: 「system_time_zone」などの変数を表示します。 MySQL の権限制限のため、完全な解決策はありません。グーグルで調べたところ、外国人が非常に良い解決策を持っていることがわかりました。ただし、データを挿入する各 SQL ステートメントを変更する必要があります。この解決策はあまり効果的ではありません。データベースのタイムゾーンを通常に変更した後は、対応する SQL ステートメントを元に戻す必要があります。 そして今では、PHP 側はすでに時間の問題を正しく解決できていると思います。 MySQL データベースは対応する機能を使用して解決できますが、将来別のホスト環境に移行する場合は元に戻す必要があります。対応するフィールドは TIMESTAMP 型で、デフォルト値は CURRECT_TIMESTAMP です。もちろん、時間を指定することもできます。 私のアプローチは、PHP に現在の正しい時刻を挿入させることです。そのため、それに応じてプログラムを変更する必要があります。ただし、将来構成を変更する場合は、1 か所を変更するだけで済みます。 最終的にデータベースに挿入するときは、次の形式に注意してください。 date('Y-m-d H:i:s') 参考記事: http://www.modwest.com/help/kb6-256.html 独自のホストで次のように設定できます。 SET GLOBAL タイムゾーン = '+8:00'; UNIX_TIMESTAMP() のような関数が使用できなくなったのは残念です。 |