>데이터 베이스 >MySQL 튜토리얼 >서버 구성을 수정하지 않고 웹 애플리케이션 내에서 PHP와 MySQL의 시간대를 어떻게 동기화할 수 있습니까?

서버 구성을 수정하지 않고 웹 애플리케이션 내에서 PHP와 MySQL의 시간대를 어떻게 동기화할 수 있습니까?

DDD
DDD원래의
2024-11-03 20:07:30521검색

How can I synchronize PHP's and MySQL's timezones within my web application without modifying server configurations?

PHP와 MySQL의 시간대 동기화

웹 애플리케이션에서는 다양한 시간대에 걸쳐 날짜/시간 값을 정확하게 처리하는 것이 중요합니다. 그러나 PHP와 MySQL의 기본 시간대 설정이 다를 수 있으므로 날짜 계산에 불일치가 발생할 수 있습니다. 이 기사에서는 PHP와 MySQL 모두에서 시간대를 설정할 때 발생하는 문제를 살펴보고 서버 구성을 수정하지 않고도 포괄적인 솔루션을 제공합니다.

딜레마: 다른 시간대

PHP 날짜를 사용할 때 () 함수(예: date('Y-m-d H:i:s'))에는 PHP 시간대 설정이 적용됩니다. 반대로, MySQL의 NOW() 함수는 MySQL 서버의 시간대 설정을 사용합니다. 이러한 불일치로 인해 잘못된 날짜 비교 및 ​​계산이 발생할 수 있습니다.

시도 실패

개발자는 이전에 다음을 포함하여 시간대를 변경하기 위해 다양한 방법을 시도했습니다.

  • date_default_timezone_set('Europe/Paris') 사용은 PHP에만 영향을 미칩니다.
  • PHP를 통해 date.timezone 설정은 MySQL에 영향을 미치지 않습니다.
  • SELECT CONVERT_TZ(now(), 'GMT 사용) ', 'MET')는 빈 결과를 반환합니다.
  • MySQL 콘솔에서 SET time_zone = 'Europe/Paris' 실행이 실패합니다.

해결책: 동기화

애플리케이션 내에서 PHP와 MySQL 시간대를 동기화하려면 다음 접근 방식을 권장합니다.

1. PHP 시간대 구성

<code class="php">define('TIMEZONE', 'Europe/Paris');
date_default_timezone_set(TIMEZONE);</code>

상수 TIMEZONE을 정의하고 이를 사용하여 PHP의 기본 시간대를 설정합니다.

2. MySQL 시간대 계산

<code class="php">$now = new DateTime();
$mins = $now->getOffset() / 60;
$sgn = ($mins < 0 ? -1 : 1);
$mins = abs($mins);
$hrs = floor($mins / 60);
$mins -= $hrs * 60;
$offset = sprintf('%+d:%02d', $hrs*$sgn, $mins);

서버 시간과 원하는 시간대 사이의 오프셋을 계산합니다.

3. MySQL 시간대 설정

<code class="php">// Your DB Connection - sample
$db = new PDO('mysql:host=localhost;dbname=test', 'dbuser', 'dbpassword');
$db->exec("SET time_zone='$offset';");</code>

MySQL 시간대를 계산된 오프셋으로 설정하는 쿼리를 실행합니다.

이 솔루션을 구현하면 애플리케이션 내의 PHP와 MySQL 시간대가 동기화됩니다. , 서버 구성에 관계없이 정확한 날짜/시간 계산 및 비교를 보장합니다.

위 내용은 서버 구성을 수정하지 않고 웹 애플리케이션 내에서 PHP와 MySQL의 시간대를 어떻게 동기화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.