“ 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
เพื่อให้ชัดเจนหลังจากทำการเปลี่ยนแปลงนี้แล้วให้แน่ใจว่าได้รีสตาร์ท apache2 ของบริการ sudo
Ryan

2
วิธีนี้แก้ไขได้สำหรับฉันเมื่อโซลูชันอื่นไม่ได้ ฉันได้รับข้อผิดพลาดนี้เฉพาะเมื่อฉันใช้ฟังก์ชั่นวันที่ในหน้าเดียวกับการรวมกับ Amazon SES อาจจะช่วยคนอื่นได้
master_gracey

9
หากคุณใช้ PHP CLI (php -r หรือ php -a) ภายในเทอร์มินัลไคลเอนต์ของคุณคุณต้องแก้ไขไฟล์ CLI php.ini ไม่ใช่ apache2 ไฟล์ YourC CLI php.ini สามารถพบได้ที่ /etc/php5/cli/php.ini
justinpage

2
เช่นเดียวกับความคิดเห็นแรกเกี่ยวกับ Apache คุณต้องรีสตาร์ท IIS เพื่อให้มีผลกับ Windows / IIS
ข้าม

2
นี่เป็นการแก้ปัญหาของฉัน! เพียงแค่ข้อมูลสำหรับผู้เชี่ยวชาญที่ไม่ชอบก็เพื่อที่จะหาสิ่งที่php.iniใช้โดย Apache 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
ด้วยเหตุผลบางอย่างการตั้งค่า date.timezone = อเมริกา / New_York ใน php.ini ของฉันและรีสตาร์ท apache ไม่ได้หยุดข้อผิดพลาดนี้เมื่อเรียกใช้สคริปต์โดยใช้ swiftmailer ฉันสิ้นสุดต้องเพิ่ม date_default_timezone_set ('อเมริกา / New_York'); ที่ด้านบนของสคริปต์ตามที่แนะนำ ขอบคุณ!
kyle

ฉันลองวิธีแก้ปัญหาของคุณ ตอนนี้ข้อผิดพลาดคือข้อผิดพลาดเซิร์ฟเวอร์ภายใน 500 ข้อ ฉันใช้ apache 2.x และ codeigniter
Hafiz Shehbaz Ali

@ShehbazAli คุณต้องทำอะไรผิดไป สคริปต์ของคุณเพิ่มสนิปเพตในบทใด
Babatunde Adeyemi

รหัสเดียวกันทำงานในการผลิต ไม่มีข้อผิดพลาด ฉันได้ติดตั้ง apache, php และ MySQL ด้วยตนเองบนหน้าต่าง 10 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")); ?>

ทำงานให้ฉัน (แสดงปีปัจจุบันและไม่แสดงข้อความแสดงข้อผิดพลาดอีก) (ขอบคุณคริสข้างต้น)


15

หากสิ่งเหล่านี้ไม่ใช่ตัวเลือกของคุณ

  • php.iniแก้ไข
  • กำลังเพิ่มการdate_default_timezoneโทร

แทนที่จะคุณสามารถใช้dategmdate

ฉันใช้gmdate( "Y" )เมื่อฉันต้องการปีสำหรับตัวอย่างข้อมูลลิขสิทธิ์


14

หากคุณใช้ CodeIgniter และไม่สามารถเปลี่ยน php.ini ได้ฉันจะเพิ่มสิ่งต่อไปนี้ที่จุดเริ่มต้นของ index.php:

date_default_timezone_set('GMT');

มันใช้งานได้สำหรับฉันขอบคุณ Jose สำหรับความช่วยเหลือของคุณ ด้วยความเคารพ Sarim Ghani i-splendid.com
Sarim Shekhani

นี้ทำงานบน PHP พื้นเมืองphp.net/manual/en/function.date-default-timezone-set.php คุณวางฉันลงบนเส้นทางที่ถูกต้องแล้ว ในความสัมพันธ์ดูรายการเขตเวลาสำหรับฟังก์ชั่นที่นี่php.net/manual/en/timezones.php
Louis Loudog Trottier


11

@ จัสติสชี้ให้ฉันในทิศทางที่ถูกต้อง แต่รหัสของเขาไม่ทำงานสำหรับฉัน สิ่งนี้ทำ:

// 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

ยังไม่มี workie (ใน Mac OSX) ดังนั้นในที่สุดฉันก็พังและเพิ่ม/etc/php.ini: date.timezone = America/Los_Angeles
MarkHu

3

คุณสามารถตั้งค่าเขตเวลาใน.htaccessไฟล์ของคุณ

php_value date.timezone UTC

สิ่งนี้ควรใช้งานได้ในกรณีที่ php.ini ยังคงส่งกลับคำเตือนแม้จะตั้งค่าไว้แล้ว (php 5.4. *) ทำงานให้ฉัน
Christian Bonato

2

นอกเหนือจากการตั้งค่า date.timezone = ตามที่กล่าวไว้ในคำตอบหลายข้อฉันพบข้อผิดพลาดในไฟล์ php.ini ที่ป้องกันไม่ให้ไปที่ date.timezone วิธีที่ฉันพบว่ามันคือการรัน php จากบรรทัดคำสั่งใน terminal สิ่งนี้ทำให้เกิดข้อผิดพลาดที่ต้องรายงานที่บรรทัด 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

ฉันกำลังโฮสต์ที่ฝากข้อมูล EC2 และ S3 ของฉันในภูมิภาค us-west-2 (ออริกอน) เมื่อฉันโทร$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)ฉันยืนยันว่าสถานะการบริการ ntpd นั้นใช้ได้โดยใช้ntpstatคำสั่ง หากคุณได้รับข้อผิดพลาดลิงค์นี้จะช่วยให้คุณรู้ว่าเกิดอะไรขึ้น
  2. ไฟล์ /etc/php.ini ที่เปิด (บางไฟล์อาจอยู่ในพา ธ ที่แตกต่างกันตามเวอร์ชันของการติดตั้ง php) และพบdate.timezoneว่าไม่ได้ตั้งค่าเป็นค่าใด ๆ ฉันไม่ได้แสดงความคิดเห็นโดยลบ ';' หน้าบรรทัดนี้และตั้งค่าเป็น"UTC"และบันทึกไฟล์
  3. รีสตาร์ท http และ ntp daemons โดยใช้sudo service httpd restartและsudo service ntpd restartคำสั่ง

หลังจากนี้ฉันสามารถแสดงรายการถังได้สำเร็จโดยไม่มีข้อยกเว้น หวังว่านี่จะช่วยได้


0

หากคุณใช้ Plesk ให้ลองใช้ก่อนอื่นเปิดการตั้งค่า PHP ที่ด้านล่างของหน้าเปลี่ยน date.timezone จาก DEFAULT เป็น UTC

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่


0

ฉันมีข้อผิดพลาดนี้ทำงาน php-fpm ในคุก chroot ฉันพยายามสร้าง etc / php.ini และ / usr / share / zoneinfo ในไดเรกทอรี chroot แต่มันก็ไม่ได้ผล ฉันยังลอง stem-ing php-fpm daemons เพื่อดูไฟล์ที่หายไป - ไม่มีอะไรโดดออกมาเลย

ดังนั้นในกรณีที่ Google นำคุณมาที่นี่เพราะคุณได้รับข้อผิดพลาดนี้เมื่อใช้ php-fpm ที่กำหนดค่าไว้สำหรับ chroot คุณสามารถแก้ไขได้โดยเพิ่มบรรทัดนี้/etc/php-fpm.d/www.confในส่วน ENV:

env[TZ] = America/New_York

โดยปกติการรีสตาร์ท php-fpm นั้นจะต้องมีผล หวังว่านี่จะช่วยให้ใครบางคนที่นั่น


0

ในกรณีเฉพาะของฉันฉันมี PHP ที่กำหนดค่าให้ใช้ PHP-FPM (FastCGI Process Manager) เมื่อดำเนินการ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

สำหรับผู้ใช้นักเทียบท่า: สร้างไฟล์ timezone.ini ท้องถิ่นในโครงการของคุณตั้งค่า config ใน 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.