"Date (): Tidak aman untuk bergantung pada pengaturan zona waktu sistem ..."

359

Saya mendapatkan kesalahan ini ketika saya diminta untuk memperbarui versi PHP dari 5.2.17 ke PHP 5.3.21 di server.

<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>
pengguna1852837
sumber

Jawaban:

556

Anda mungkin perlu meletakkan zona waktu di baris konfigurasi di php.inifile Anda . Anda harus memiliki blok seperti ini di file php.ini Anda:

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

Jika tidak, tambahkan (ganti zona waktu dengan milik Anda). Setelah mengkonfigurasi, pastikan untuk me-restart httpd ( service httpd restart).

Berikut adalah daftar zona waktu yang didukung .

CtrlX
sumber
12
untuk menjadi jelas, setelah melakukan perubahan ini, pastikan untuk sudo service apache2 restart
Ryan
2
Ini menyelesaikannya untuk saya ketika solusi lain tidak. Saya hanya menerima kesalahan ini ketika saya menggunakan fungsi tanggal pada halaman yang sama dengan integrasi dengan Amazon SES. Mungkin itu akan membantu orang lain.
master_gracey
9
Jika Anda menggunakan PHP CLI (php -r atau php -a) dalam terminal klien Anda, Anda perlu mengedit file php.ini CLI, bukan apache2. File php.ini CL CL Anda biasanya dapat ditemukan di /etc/php5/cli/php.ini
/etc/php5/cli/php.ini justinpage
2
Seperti komentar pertama tentang Apache Anda juga harus me-restart IIS agar ini berlaku pada Windows / IIS.
jross
2
Ini menyelesaikan masalah saya! Hanya info untuk non-ahli seperti saya, untuk menemukan yang php.inidigunakan oleh apache, jalankan saja perintah berikut php -i | grep php.ini.
Joël Salamin
198

Jika Anda tidak dapat mengubah konfigurasi php.ini, Anda juga dapat menggunakan cuplikan berikut di awal kode Anda:

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

Daftar zona waktu dapat ditemukan di http://www.php.net/manual/en/timezones.php .

Babatunde Adeyemi
sumber
7
Untuk beberapa alasan pengaturan date.timezone = America / New_York di php.ini saya dan restart apache tidak menghentikan pesan kesalahan ini ketika menjalankan skrip menggunakan swiftmailer. Saya akhirnya juga harus menambahkan date_default_timezone_set ('America / New_York'); di bagian atas skrip seperti yang disarankan. Terima kasih!
kyle
Saya mencoba solusi Anda. Sekarang, kesalahan adalah 500 kesalahan server internal. Saya menggunakan apache 2.x dan codeigniter.
Hafiz Shehbaz Ali
@ShehbazAli Anda pasti melakukan sesuatu yang salah. Di skrip Anda manakah yang Anda tambahkan potongannya?
Babatunde Adeyemi
kode yang sama bekerja pada produksi. Tidak ada kesalahan. Saya telah menginstal apache, php dan MySQL secara manual di jendela 10. Pekerjaan PHP, MySQL dan Apache. Tapi, proyek ini memberikan kesalahan.
Hafiz Shehbaz Ali
72

Tambahkan berikut ini di index.phpfile Anda . Saya pertama kali menemukan ini ketika saya memindahkan aplikasi dari XAMPP saya server ke Apache 2.2 dan PHP 5.4 ...

Saya akan menyarankan Anda melakukannya di index.phpfile Anda, bukan php.inifile.

if( ! ini_get('date.timezone') )
{
    date_default_timezone_set('GMT');
}
Justis Matotoka
sumber
3
solusi luar biasa untuk ketika Anda tidak harus memiliki akses sistem penuh, tebak ini adalah untuk orang-orang dengan akses terbatas atau membutuhkan solusi yang lebih kuat, dan menggabungkan ini dengan mengedit php.ini jika Anda bisa
aqm
18
<? print(gmdate("Y")); ?> 

dari pada

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

bekerja untuk saya (menunjukkan tahun ini dan tidak lagi menunjukkan pesan kesalahan). (Terima kasih kepada Chris di atas)

Susan Taunton
sumber
15

Jika ini bukan pilihan Anda

  • Memodifikasi php.ini.
  • Menambah date_default_timezonepanggilan.

Alih-alih dateAnda bisa menggunakan gmdate.

Saya telah menggunakan gmdate( "Y" )ketika saya membutuhkan satu tahun untuk snipplet hak cipta.

Chris
sumber
14

Jika Anda menggunakan CodeIgniter dan tidak dapat mengubah php.ini, saya menambahkan yang berikut ini ke awal index.php:

date_default_timezone_set('GMT');
Jose
sumber
Ini bekerja untuk saya, terima kasih Jose atas bantuan Anda. Salam Hormat, Sarim Ghani i-splendid.com
Sarim Shekhani
Ini berfungsi pada php asli.net/manual/id/function.date-default-timezone-set.php . TY, Anda menempatkan saya di jalur yang benar. Sehubungan lihat daftar zona waktu untuk fungsi di sini php.net/manual/en/timezones.php
Louis Loudog Trottier
11

@ Juris menunjuk saya ke arah yang benar, tetapi kodenya tidak bekerja untuk saya. Ini berhasil:

// 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');
}

Dokumentasi: http://www.php.net/manual/en/function.date-default-timezone-get.php

Solusi ini tidak hanya untuk mereka yang tidak memiliki akses sistem penuh. Ini diperlukan untuk skrip apa pun ketika Anda memberikannya kepada orang lain selain Anda. Anda tidak pernah tahu di server apa skrip akan berjalan ketika Anda mendistribusikannya ke orang lain.

John Linhart
sumber
5

Masalah ini telah mengganggu saya selama BEBERAPA waktu karena saya mencoba menyuntikkan skrip "createbucket.php" ke komposer dan saya terus diberi tahu zona waktu saya salah.

Pada akhirnya satu-satunya hal yang memperbaiki masalah ini adalah: $ sudo nano /etc/php.ini

Cari zona waktu

[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

Pastikan Anda menghapus ;

Lalu akhirnya

$ sudo service httpd restart

Dan Anda akan baik-baik saja :)

T0mmyKn1fe
sumber
5

Saya harus menuliskannya dalam tanda kutip ganda.

date_default_timezone_set("America/Los_Angeles"); // default time zone
nocturnalact
sumber
Masih tidak ada workie (di Mac OSX), jadi saya akhirnya mogok dan menambahkan/etc/php.ini: date.timezone = America/Los_Angeles
MarkHu
3

Anda dapat mengatur zona waktu di .htaccessfile Anda

php_value date.timezone UTC
Alexander Lindquist
sumber
Ini seharusnya bekerja dalam kasus php.ini masih mengembalikan peringatan meskipun sudah diatur (php 5.4. *). Bekerja untukku.
Christian Bonato
2

Selain mengatur date.timezone = sebagaimana disebutkan dalam beberapa jawaban, saya menemukan kesalahan dalam file php.ini yang membuatnya tidak sampai ke date.timezone. Cara saya menemukannya adalah dengan menjalankan php dari baris perintah di terminal. ini menyebabkan kesalahan dilaporkan pada baris 114. Dalam kasus saya, saya telah membatalkan pengaturan untuk menampilkan kesalahan yang memiliki '|' antara 2 nilai. Itu tidak suka. Saya menghapus salah satu nilai dan | dan semuanya baik setelah itu

M Graham
sumber
1

Metode sederhana untuk dua zona waktu.

<?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 
?>
Saurabh Chandra Patel
sumber
1
<? date_default_timezone_set('Europe/Istanbul'); ?>

Untuk php (atau lokasi Anda).

Mehmet Şerif Çaçan
sumber
0

Solusi cepat saat Anda memperbaiki ketidakcocokan, adalah menonaktifkan pelaporan kesalahan dalam index.phpfile Anda :

Masukkan baris di bawah ini ke index.php Anda di bawah inidefine( ‘_JEXEC’, 1 );

error_reporting( E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR |
E_COMPILE_WARNING );
Elise Oertli
sumber
0

Saya hosting ember EC2 dan S3 di wilayah us-west-2 (Oregon). Ketika saya menelepon $s3client->listBuckets()untuk mendaftar ember yang ada di php saya, saya mendapatkan pengecualian - "Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings...". saya membuat perubahan di bawah ini untuk membuatnya berfungsi. Membagikan detail ini seandainya seseorang menghadapi masalah yang sama dan salah satu jawaban di atas tidak membantu.

  1. Berdasarkan dokumentasi @ AWS Mengkonfigurasi Protokol Waktu Jaringan (NTP) , saya mengkonfirmasi status layanan ntpd baik-baik saja dengan menjalankanntpstat perintah. Jika Anda mendapatkan kesalahan, tautan ini membantu Anda mengetahui apa yang salah.
  2. Membuka file /etc/php.ini (beberapa mungkin memilikinya di jalur berbeda berdasarkan versi php yang diinstal) dan menemukan bahwa date.timezonetidak disetel ke nilai apa pun dan juga dikomentari secara default. Saya membatalkan komentar dengan menghapus ';' sebelum baris ini dan atur nilainya ke "UTC"dan simpan file.
  3. Daemon http dan ntp yang diaktifkan kembali menggunakan sudo service httpd restartdan sudo service ntpd restartperintah.

Setelah ini, saya dapat membuat daftar ember dengan sukses tanpa kecuali. Semoga ini membantu.

Maruti C
sumber
0

Jika Anda menggunakan Plesk, cobalah, Pertama, Buka Pengaturan PHP, di bagian bawah halaman, ubah date.timezone dari DEFAULT ke UTC.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Latief Anwar
sumber
0

Saya mengalami kesalahan ini menjalankan php-fpm di penjara chroot. Saya mencoba membuat etc / php.ini dan / usr / share / zoneinfo di direktori chroot, tetapi tidak berhasil. Saya bahkan mencoba strace-ing daemon php-fpm untuk melihat file apa yang hilang - tidak ada yang keluar.

Jadi jika Google membawa Anda ke sini karena Anda mendapatkan kesalahan ini saat menggunakan php-fpm yang dikonfigurasi untuk chroot, Anda mungkin dapat memperbaikinya dengan menambahkan baris ini ke /etc/php-fpm.d/www.confdalam bagian ENV:

env[TZ] = America/New_York

Restart php-fpm biasanya diperlukan untuk mulai berlaku. Semoga ini bisa membantu seseorang di luar sana.

Don Law
sumber
0

Dalam kasus khusus saya, saya memiliki PHP yang dikonfigurasi untuk menggunakan PHP-FPM (FastCGI Process Manager). Ketika mengeksekusi phpinfo()dari CLI saya melihat zona waktu yang benar yang telah saya atur di php.ini, namun itu masih salah di browser dan menyebabkan kode saya gagal. Saya hanya perlu me-restart php-fpmlayanan di server.

service rh-php56-php-fpm restart

Anda mungkin juga perlu memulai kembali httpdlayanan jika Anda mengeditphp.ini

service httpd restart
EternalHour
sumber
0

Jawaban di atas dari CtrlX ini adalah jawaban yang benar, tetapi mungkin tidak berfungsi sepenuhnya. Saya menambahkan baris ini ke file php.ini saya :

date.timezone = "America/Los_Angeles"

tetapi itu tidak menghapus kesalahan PHP untuk semua file saya karena beberapa skrip PHP saya ada di subfolder. Jadi saya harus mengedit file .htaccess untuk mengatur php.ini untuk digunakan secara rekursif (dalam subfolder):

suphp_configpath /home/account_name/public_html

di mana account_name adalah nama akun cpanel Anda dan public_html adalah folder tempat file php.ini Anda berada.

Jeff Baker
sumber
0

Untuk pengguna buruh pelabuhan: Buat file timezone.ini lokal di proyek Anda, atur konfigurasi di docker-compose.yml,

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

timezone.ini

    date.timezone=Australia/Sydney
Jin
sumber
0

Jika Anda tidak memiliki akses ke file php.ini, buat atau edit .htaccessfile di root domain atau sub Anda dan tambahkan ini (dihasilkan oleh 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>
pengguna3724176
sumber
Cobalah untuk tidak menggunakan kata-kata kapital jika konvensi casing normal dapat mengungkapkan apa yang ingin Anda katakan.
shizhen
0

Ada dua opsi untuk menyelesaikan ini

Pertama, ubah ke file php.ini dan masukkan zona waktu default

date.timezone = "America/New_York"

Setelah, Anda telah mengatur zona waktu di php.ini restart server

Kedua, Ubah zona waktu tetapkan jangka waktu berdasarkan kebutuhan Anda

date_default_timezone_set('America/New_York');
Nikunj K.
sumber
-1

Di halaman koneksi Anda, letakkan kode seperti ini date_default_timezone_set("Africa/Johannesburg");berdasarkan lokasi Anda saat ini.

CuteDevIT
sumber