PHP スクリプト側の都市設定は、php.ini で date.timezone キーの値を「Asia/Shanghai」に設定できます。ただし、通常、共有仮想ホスト自体には php.ini を変更する権限がありません。このとき、php.ini の設定を動的に変更するには、プログラムの public 部分に
ini_set('date.timezone','Asia/Shanghai'); を追加する必要があります。次に、時間が正しいかどうかをテストできます:
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 time_zone = '+8:00'; ここで、'+8:00' は東 8 区の表現方法であり、他の都市部の場合も同様です。 。そして、このステートメントをデータベース モデルに挿入すると、権限が不十分であることがわかりました (仮想ホスト プロバイダー)。次に、次のような多くのステートメントをデバッグしました:
DATE_ADD(UTC_TIMESTAMP(), INTERVAL 8 HOUR); タイムゾーンを表示する SQL ステートメント:
SHOW VARIABLES LIKE '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
http://topic.csdn.net/t/20060503/07/4728521.html
http : //www.phpchina.com/5173/viewspace_5132.html
http://www.phpx.com/pth110355.php
更新: wiLdGoose 兄弟も同じ問題に遭遇したが、解決できなかったと言いました。その結果、さまざまな推測と判断を経て、最終的には Zend Studio のタイムゾーン設定の問題であることがわかりました(汗)。動作環境だけでなく、開発環境も以下の点に注意する必要があるようです。
私も今日この問題に遭遇しました。私自身のホストでは、次のことができます。
はは、関数を使用できないのは残念です。もう UNIX_TIMESTAMP() のようなものです。