“date () : 시스템의 시간대 설정에 의존하는 것은 안전하지 않습니다…”


359

서버에서 PHP 버전을 5.2.17에서 PHP 5.3.21 로 업데이트하도록 요청했을 때이 오류가 발생했습니다 .

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead</p>
<p>Filename: libraries/Log.php</p>
<p>Line Number: 86</p>

</div>
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead in /filelocation right here/system/libraries/Log.php on line 86

Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead in /filelocation right here/system/libraries/Log.php on line 99
<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead</p>
<p>Filename: libraries/Log.php</p>
<p>Line Number: 99</p>

</div>

답변:


556

시간대를 php.ini파일 의 구성 줄에 넣어야 할 수도 있습니다. php.ini 파일에 다음과 같은 블록이 있어야합니다.

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = America/New_York

그렇지 않은 경우 시간대를 대체하여 추가하십시오. 구성 후 httpd ( service httpd restart) 를 다시 시작하십시오 .

지원되는 시간대 목록은 다음과 같습니다 .


12
명확하게,이 변경 후, 서비스 아파치 2 다시 시작 sudo
Ryan

2
이것은 다른 솔루션이 그렇지 않을 때 나를 위해 해결했습니다. Amazon SES와의 통합과 동일한 페이지에서 날짜 함수를 사용할 때만이 오류가 발생했습니다. 아마도 그것은 다른 누군가를 도울 것입니다.
master_gracey

9
클라이언트 터미널에서 PHP CLI (php -r 또는 php -a)를 사용하는 경우 apache2가 아닌 CLI php.ini 파일을 편집해야합니다. YourC CLI php.ini 파일은 보통 /etc/php5/cli/php.ini에서 찾을 수 있습니다
justinpage

2
Apache에 대한 첫 번째 의견과 마찬가지로 Windows / IIS에 적용하려면 IIS를 다시 시작해야합니다.
jross

2
이것은 내 문제를 해결합니다! php.ini아파치 가 사용하는 것을 찾으 려면 다음과 같은 명령을 실행하십시오 php -i | grep php.ini.
Joël Salamin

198

php.ini 설정을 변경할 수 없다면, 코드 시작 부분에 다음 코드를 사용하십시오 :

date_default_timezone_set('Africa/Lagos');//or change to whatever timezone you want

시간대 목록은 http://www.php.net/manual/en/timezones.php에 있습니다.


7
어떤 이유로 내 php.ini에서 date.timezone = America / New_York를 설정하고 아파치를 다시 시작하면 swiftmailer를 사용하여 스크립트를 실행할 때이 오류 메시지가 중지되지 않았습니다. 나는 또한 date_default_timezone_set ( 'America / New_York')를 추가해야했습니다. 제안한대로 스크립트 상단에 감사!
kyle

나는 당신의 해결책을 시도했습니다. 이제 오류는 500 내부 서버 오류입니다. 아파치 2.x 및 codeigniter 사용하고 있습니다.
Hafiz Shehbaz Ali

@ShehbazAli 당신은 뭔가 잘못했을 것입니다. 어느 스크립트에서 스 니펫을 추가 했습니까?
Babatunde Adeyemi

동일한 코드가 프로덕션에서 작동합니다. 오류가 없습니다. 창 10에 아파치, PHP 및 MySQL을 수동으로 설치했습니다. PHP, MySQL 및 Apache가 작동합니다. 그러나이 프로젝트는 오류가 있습니다.
Hafiz Shehbaz Ali

72

index.php파일에 다음을 추가 하십시오. XAMPP 서버에서 Apache 2.2 및 PHP 5.4 로 응용 프로그램을 옮길 때 처음 으로이 문제가 발생했습니다 ...

index.php파일 대신 파일 에서 수행하는 것이 좋습니다 php.ini.

if( ! ini_get('date.timezone') )
{
    date_default_timezone_set('GMT');
}

3
당신은 반드시이 일을 추측, 전체 시스템에 액세스 할 수없는 경우 우수한 솔루션은 제한된 액세스 또는 필요보다 강력한 솔루션, 그리고 php.ini 파일을 편집하여이 결합 가진 사람들을 위해 당신이 할 수있는 경우
AQM

18
<? print(gmdate("Y")); ?> 

대신에

<? print(date("Y")); ?>

나를 위해 일했다 (현재 연도를 표시하고 더 이상 오류 메시지를 표시하지 않음). (위의 Chris에게 감사합니다)


15

이것들이 당신의 선택이 아닌 경우

  • 수정 php.ini.
  • date_default_timezone전화 추가 .

대신을 date사용할 수 있습니다 gmdate.

1 gmdate( "Y" )년 동안 저작권을 침해 받았을 때 사용 했습니다.


14

CodeIgniter를 사용하고 있고 php.ini를 변경할 수없는 경우 index.php의 시작 부분에 다음을 추가했습니다.

date_default_timezone_set('GMT');

도움을 주셔서 감사합니다. 감사합니다, Sarim
Sarim Shekhani

이것은 네이티브 PHP php.net/manual/en/function.date-default-timezone-set.php 에서 작동합니다 . TY, 당신은 저를 올바른 길로 안내했습니다. 관련하여 기능 여기 시간대의 목록을 볼 수 php.net/manual/en/timezones.php
루이 Loudog Trottier


11

@Justis는 나를 올바른 방향으로 지적했지만 그의 코드는 나를 위해 작동하지 않았습니다. 이것은했다 :

// set the default timezone if not set at php.ini
if (!date_default_timezone_get('date.timezone')) {
    // insert here the default timezone
    date_default_timezone_set('America/New_York');
}

설명서 : http://www.php.net/manual/en/function.date-default-timezone-get.php

이 솔루션은 전체 시스템 액세스 권한이없는 사용자를위한 것이 아닙니다. 다른 사람에게 스크립트를 제공 할 때는 모든 스크립트가 필요합니다. 스크립트를 다른 사람에게 배포 할 때 어떤 서버에서 스크립트를 실행할지 알 수 없습니다.


5

이 문제는 작곡가에 "createbucket.php"스크립트를 삽입하려고 할 때 일부 시간대에 버그를 일으켰으며 시간대가 잘못되었다는 메시지가 계속 표시됩니다.

결국 문제를 해결 한 유일한 것은 다음과 같습니다. $ sudo nano /etc/php.ini

시간대 검색

[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = UTC

제거하십시오 ;

마지막으로

$ sudo service httpd restart

그리고 당신은 갈 것입니다 :)


5

큰 따옴표로 묶어야했습니다.

date_default_timezone_set("America/Los_Angeles"); // default time zone

여전히 /etc/php.ini: date.timezone = America/Los_Angeles
MacieX

3

.htaccess파일 에서 시간대를 설정할 수 있습니다

php_value date.timezone UTC

이것은 php.ini가 경고를 설정했지만 (php 5.4. *) 여전히 경고를 반환하는 경우에 작동합니다. 나를 위해 일했다.
Christian Bonato

2

여러 답변에서 언급 한대로 date.timezone =을 설정하는 것 외에도 php.ini 파일에서 date.timezone에 도달하지 못하게하는 오류가 발견되었습니다. 내가 찾은 방법은 터미널의 명령 줄에서 php를 실행하는 것입니다. 이로 인해 114 행에 오류가보고되었습니다. 제 경우에는 '|'가있는 오류를 표시하기위한 설정을 주석 해제했습니다. 2 개의 값 사이 마음에 들지 않았습니다. 값 중 하나를 제거하고 | 그 후 모든 것이 좋았습니다.


1

두 시간대에 대한 간단한 방법입니다.

<?php 
$date = new DateTime("2012-07-05 16:43:21", new DateTimeZone('Europe/Paris')); 

date_default_timezone_set('America/New_York'); 

echo date("Y-m-d h:iA", $date->format('U')); 

// 2012-07-05 10:43AM 
?>


0

비 호환성을 수정하는 동안 빠른 해결책은 index.php파일 에서 오류보고를 비활성화하는 것입니다 .

당신에 아래 라인을 삽입 index.php를 아래define( ‘_JEXEC’, 1 );

error_reporting( E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR |
E_COMPILE_WARNING );

0

us-west-2 (오레곤) 리전에서 EC2 및 S3 버킷을 호스팅하고 있습니다. $s3client->listBuckets()내 PHP에 기존 버킷을 나열하기 위해 전화 할 때 예외가 발생 "Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings...". 했습니다. 작동하도록 아래 변경 사항을 적용했습니다. 누군가가 비슷한 문제에 직면하고 위의 답변 중 어느 것도 도움이되지 않은 경우 이러한 세부 정보를 공유하십시오.

  1. @ AWS 구성 NTP (Network Time Protocol) 문서를 기반으로 , ntpstat명령 을 실행하여 ntpd 서비스 상태가 양호 함을 확인했습니다 . 오류가 발생하면이 링크를 통해 무엇이 잘못되었는지 알 수 있습니다.
  2. /etc/php.ini 파일을 열 었는데 (일부는 설치된 PHP 버전에 따라 다른 경로에있을 수 있음) date.timezone값으로 설정되지 않았으며 기본적으로 주석 처리되었습니다. ';'을 제거하여 주석을 제거했습니다. 이 줄 앞에 값을 설정하고 "UTC"파일을 저장하십시오.
  3. sudo service httpd restartsudo service ntpd restart명령을 사용하여 http 및 ntp 데몬을 다시 시작했습니다 .

이 후 예외없이 버킷을 성공적으로 나열 할 수 있습니다. 도움이 되었기를 바랍니다.


0

Plesk를 사용하는 경우 먼저 페이지 하단의 PHP 설정 열기를 시도하여 date.timezone을 DEFAULT에서 UTC로 변경하십시오.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


0

chroot jail에서 php-fpm을 실행하면이 오류가 발생했습니다. chroot 디렉토리에 etc / php.ini 및 / usr / share / zoneinfo를 만들려고 시도했지만 작동하지 않았습니다. 심지어 php-fpm 데몬을 추적하여 누락 된 파일을 확인하려고 시도했습니다.

chroot에 대해 구성된 php-fpm을 사용할 때이 오류가 발생하여 Google에서 여기 /etc/php-fpm.d/www.conf에 표시하는 경우 ENV 섹션에 다음 줄을 추가하여 문제를 해결할 수 있습니다 .

env[TZ] = America/New_York

일반적으로 PHP-fpm 재시작이 필요합니다. 이것이 누군가를 도울 수 있기를 바랍니다.


0

필자의 경우에는 PHP-FPM (FastCGI Process Manager)을 사용하도록 PHP를 구성했습니다. phpinfo()CLI에서 실행할 때 php.ini에서 설정 한 올바른 시간대를 보았지만 브라우저에서 여전히 잘못되어 코드가 실패했습니다. php-fpm서버 에서 서비스 를 다시 시작해야했습니다 .

service rh-php56-php-fpm restart

httpd편집 한 경우 서비스 를 다시 시작해야 할 수도 있습니다 .php.ini

service httpd restart

0

위의 CtrlX 답변 은 정답이지만 완전히 작동하지 않을 수 있습니다. 이 줄을 php.ini 파일에 추가했습니다 .

date.timezone = "America/Los_Angeles"

그러나 일부 PHP 스크립트가 하위 폴더에 있기 때문에 모든 파일의 PHP 오류를 제거하지 않았습니다. 그래서 .htaccess 파일 을 편집 하여 php.ini를 재귀 적으로 (하위 폴더에서) 사용하도록 설정해야했습니다.

suphp_configpath /home/account_name/public_html

여기서 account_name은 cpanel 계정 이름이고 public_html은 php.ini 파일이있는 폴더입니다.


0

docker 사용자의 경우 : 프로젝트에서 로컬 timezone.ini 파일을 만들고 docker-compose.yml에서 구성을 설정하십시오.

    volumes:
        - "./docker/config/timezone.ini:/usr/local/etc/php/conf.d/timezone.ini"

timezone.ini

    date.timezone=Australia/Sydney

0

파일에 액세스 할 수없는 경우 도메인 또는 서브의 루트에서 파일 php.ini을 작성 또는 편집하고 .htaccess이를 cpanel에서 생성하여 추가하십시오.

<IfModule mime_module>
AddType application/x-httpd-ea-php56 .php .php5 .phtml
</IfModule>

<IfModule php5_module>
php_value date.timezone "America/New_York"
</IfModule>

<IfModule lsapi_module>
php_value date.timezone "America/New_York"
</IfModule>

일반적인 케이싱 규칙이 원하는 것을 표현할 수 있도록 대문자를 사용하지 마십시오.
shizhen

0

이 문제를 해결하기위한 두 가지 옵션이 있습니다

먼저 php.ini 파일로 변경하고 기본 시간대를 설정하십시오

date.timezone = "America/New_York"

일단 php.ini 에서 시간대를 설정했습니다 하면 서버가 다시 시작됩니다

둘째, 필요에 따라 런타임 할당 시간대를 변경하십시오.

date_default_timezone_set('America/New_York');

-1

연결 페이지 date_default_timezone_set("Africa/Johannesburg");에서 현재 위치를 기반으로 이와 같은 코드 를 입력하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.