현재 위치: > 최신 기사 목록> 서버 PHP 기본 설정에 영향을 줄 때 date_sunset ()에 영향을 미치는 숨겨진 문제

서버 PHP 기본 설정에 영향을 줄 때 date_sunset ()에 영향을 미치는 숨겨진 문제

M66 2025-05-31

php의 date_sunset () 함수는 주어진 날짜, 위도 및 경도 및 기타 매개 변수에 따라 일몰 시간을 계산하는 데 사용됩니다. 그러나이 기능을 사용하면 많은 개발자들이 반환 된 결과가 예상과 몇 시간이 지나도 부정확하다는 것을 알게 될 것입니다. 이 문제는 기능 자체의 버그 인 것처럼 보이지만 실제로는 PHP의 기본 구성, 특히 설정과 관련이 있습니다.

1. date_sunset ()는 어떻게 작동합니까?

date_sunset () 의 구문은 다음과 같습니다.

 date_sunset(
    int $timestamp,
    int $format = SUNFUNCS_RET_STRING,
    float $latitude = ini_get("date.default_latitude"),
    float $longitude = ini_get("date.default_longitude"),
    float $zenith = ini_get("date.sunset_zenith"),
    float $gmt_offset = 0
): string|int|float|false

이 함수는 타임 스탬프 (일반적으로 strtotime () 의 결과)과 일련의 지리적 매개 변수를 취한 다음 일몰 시간을 반환합니다. 키는 마지막 매개 변수에 있습니다 : $ gmt_offset , 즉 GMT 오프셋입니다.

$ gmt_offset을 제공하지 않으면 PHP는 현재 시간대 구성 (예 : date.timezone )을 사용하여 오프셋을 계산하려고합니다. 시간대가 잘못 설정되었는지 여부에 관계없이 계산 결과는 실제 값에서 벗어납니다.

2. 결과에 대한 기본 시간대의 영향

호환성의 이유로, 많은 서버가 PHP의 기본 시간대에 설정되지 않았거나 UTC 로 설정 될 수 있습니다. 이것은 다음을 의미합니다.

  • 일몰 시간은 현지 시간이 아닌 UTC 시간으로 반환됩니다.

  • 이 시간을 문자열로 직접 출력하거나 형식화하면 해당 지역의 실제 일몰 시간과 일치하지 않습니다.

예를 들어:

 echo date_sunset(strtotime('2025-04-26'), SUNFUNCS_RET_STRING, 31.2304, 121.4737); // 상하이 좌표

기본 UTC 시간대에서 반품은 "09:54"일 수 있지만, 예상되는 것은 저녁 시간입니다.

3.이 문제를 해결하는 방법은 무엇입니까?

방법 1 : 시간대를 명시 적으로 설정합니다

가장 권장되는 방법은 스크립트에서 필요한 시간대를 명시 적으로 설정하는 것입니다. 예를 들어:

 date_default_timezone_set('Asia/Shanghai');

이것은 date_sunset () 을 포함하여 모든 시간 함수에 영향을 미칩니다. 상하이 좌표와 함께 사용되면 반환 시간은 동쪽 8 번째 지구 시간입니다.

방법 2 : GMT 오프셋을 수동으로 전달합니다

글로벌 시간대 설정을 수정하지 않으려면 $ gmt_offset 매개 변수를 전달하여 시간대 오프셋을 수동으로 지정할 수도 있습니다. 예를 들어:

 echo date_sunset(strtotime('2025-04-26'), SUNFUNCS_RET_STRING, 31.2304, 121.4737, 90.83, 8);

여기서 마지막 매개 변수 8은 동일대 (GMT+8)를 나타냅니다.

방법 3 : php.ini를 구성합니다

서버 레벨에서 PHP 구성 파일 (php.ini)을 수정할 수 있습니다.

 date.timezone = "Asia/Shanghai"

수정 후 웹 서버 (예 : Nginx 또는 Apache)를 다시 시작하십시오.

4. 권장 관행

  • 응용 프로그램의 경우 항상 시간대를 명시 적으로 설정하는 것이 가장 안전합니다.

  • 프레임 워크 프로젝트의 경우 기본 시간대가 프레임 워크 초기화에 설정되어 있는지 확인하십시오.

  • 여러 장소에 배포 된 시스템의 경우 사용자 위치에 따라 $ gmt_offset을 동적으로 조정하는 것을 고려하십시오.

5. 요약

date_sunset () 함수의 동작은 현재 시간대 구성에 따라 다르며 날짜를 설정하지 않으면 시간 올바르게 설정하지 않으면 일몰 시간이 완전히 부정확 할 수 있습니다. PHP가 시간대를 처리하는 방법을 이해하고 필요에 따라 합리적으로 설정하는 것이 그러한 시간 기능을 사용하는 열쇠입니다.

개발 및 배포 중에 혼란스러운 시간 오류를 피하기 위해 PHP 구성을 확인하십시오.