WordPress (또는 과거 PHP 프로그램) 에서 UTC 시각이 잘못 표시될 때
▶ 문제점
– WordPress 설정에서 UTC 시각이 표현되야 하는 부분에서 UTC 시각이 아닌 현지 시각이 표시되는 문제가 발견됨
– 이는 워드프레스 게시글 발행 시간이 한국 같은 경우에는 9시간 전으로 표시되는 등, 시각 표시가 이상해지는 문제를 발생시켰음
– 서버 시간은 정상적으로 표시되고 있었던 것으로 보아, 문제는 PHP 또는 웹서버에서 나타날 가능성이 높았음
▶ 해결책 모색
– 일단 PHP에서 UTC로 시각을 변환한 다음에 표기하는 소스를 활용하여 테스트를 진행함
<?php echo "Now Datetime Zone is : <strong>" . date_default_timezone_get() . "</strong><br />"; date_default_timezone_set("UTC"); echo "If right timezone is UTC, your PHP is working great. -- <strong>" . date_default_timezone_get() . "</strong><br />"; echo "Upside zone's time is here -- <strong>" . date('Y-m-d G:i:s') . "</strong><br />"; echo "gmdate()'s result is it -- <strong>" . gmdate('Y-m-d G:i:s') . "</strong>"; ?>
– 표시 결과가 UTC로 변경하였음에도 로컬 타임을 UTC로 착각하고 있음 (슬프게도, 한국 시간대인 KST를 평양 시간대로 이해하고 있다. 정말 어이가 없다…ㅠㅠ)
– 하지만, UTC/GST 시각을 반드시 표기해야 하는 gmdate()는 정상적으로 표시되고 있는 부분이 이상함.
– 결론적으로 PHP 공식 홈페이지에서 확인한 결과, UTC라는 타임존으로 변경하는 것은 앞으로 지양하길 바란다는 메시지를 확인할 수 있었음 (여기)
▶ 해결책
– 일단, date_default_timezone_set(“UTC”); 를 통해 시간존을 바꿀 때는 ‘UTC’라는 표현을 사용하지 않아야 함. (작동하지 않는 경우가 발생하므로)
– UTC 대신, ” Etc/GMT “, 즉 date_default_timezone_set(“Etc/GMT”); 를 사용하면 정상 작동함을 확인할 수 있음
– 워드프레스의 경우, UTC 시간대를 정해주는 부분이 wordpress 폴더의 wp-settings.php에 위치하고 있으므로, 그 부분의 소스코드를 찾아 다음과 같이 변경할 필요가 있음
// Disable magic quotes at runtime. Magic quotes are added using wpdb later in wp-settings.php. @ini_set( 'magic_quotes_runtime', 0 ); @ini_set( 'magic_quotes_sybase', 0 ); // WordPress calculates offsets from UTC. // 여기 부분이 문제입니다! 아래에 있던 UTC를 주석처리한 후, 다음과 같이 변경합니다. // date_default_timezone_set( 'UTC' ); date_default_timezone_set( 'Etc/GMT' ); // Turn register_globals off. wp_unregister_GLOBALS();
– 다음과 같이 변경하면, UTC 시각이 정상 표시되어 시각에 문제가 발생하지 않음을 알 수 있음
▶ 원인 분석
– 아마도 PHP5때는 잘 작동하던 것이, PHP7이 되면서 잘 작동하지 않는 것 같음 (분명한 사실은 아님)
– 앞으로 PHP 프로그램에서 이런 문제가 파악될 때는, 대체로 ⓐ서버 시간이 제대로 설정되어 있는지, ⓑPHP 소스 코드에서 UTC로 시각을 변환해주는 부분에 문제가 있는지, 를 파악하면 될 것 같음