“Date (): Sistemin saat dilimi ayarlarına güvenmek güvenli değil…”


360

PHP sürümü 5.2.17 PHP PHP 5.2.21 sunucuda güncelleştirmek istediğinde bu hatayı aldım .

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

Yanıtlar:


557

Muhtemelen saat dilimini php.inidosyanızdaki bir yapılandırma satırına koymanız gerekir . Php.ini dosyanızda şöyle bir blok olmalıdır:

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

Değilse ekleyin (saat dilimini kendiniz değiştirin). Yapılandırdıktan sonra httpd ( service httpd restart) ' yi yeniden başlattığınızdan emin olun .

İşte desteklenen zaman dilimlerinin listesi .


12
Açıkçası, bu değişikliği yaptıktan sonra sudo service apache2 restart
Ryan Ryan

2
Bu, diğer çözümler işe yaramadığında benim için çözdü. Bu hatayı yalnızca Amazon SES ile entegrasyonla aynı sayfada tarih işlevlerini kullandığımda aldım. Belki bu başka birine yardım eder.
master_gracey

9
İstemci terminalinizde PHP CLI (php -r veya php -a) kullanıyorsanız, apache2'yi değil CLI php.ini dosyasını düzenlemeniz gerekir. CLI php.ini dosyanız genellikle /etc/php5/cli/php.ini adresinde bulunabilir
justinpage

2
Apache hakkındaki ilk yorum gibi, bunun Windows / IIS üzerinde etkili olması için IIS'yi yeniden başlatmanız gerekir.
jross

2
Bu benim sorunumu çözdü! Sadece benim gibi uzman olmayanlar için bir bilgi, php.iniapache tarafından kullanılan bulmak için , sadece aşağıdaki komutu çalıştırın php -i | grep php.ini.
Joël Salamin

198

Php.ini yapılandırmanızı değiştiremiyorsanız, kodunuzun başında aşağıdaki snippet'i de kullanabilirsiniz:

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

Zaman dilimleri listesini http://www.php.net/manual/en/timezones.php adresinde bulabilirsiniz .


7
Nedense php.ini dosyasında date.timezone = America / New_York ayarı yapılarak ve apache yeniden başlatıldığında swiftmailer kullanılarak bir komut dosyası çalıştırılırken bu hata mesajı durmadı. Ben de date_default_timezone_set ('America / New_York') eklemek zorunda sona erdi; komut dosyasının üst kısmında belirtildiği gibi. Teşekkürler!
kyle

Çözümünüzü denedim. Şimdi hata 500 dahili sunucu hatasıdır. Apache 2.x ve codeigniter kullanıyorum.
Hafiz Shehbaz Ali

@ShehbazAli Yanlış bir şey yapmış olmalısınız. Parçacıklarınızdan hangisine snippet eklediniz?
Babatunde Adeyemi

aynı kod üretim üzerinde de çalışıyor. Hata yok. Apache, php ve MySQL'i pencere 10'a manuel olarak yükledim. PHP, MySQL ve Apache işleri. Ancak bu proje hata veriyor.
Hafiz Shehbaz Ali

72

index.phpDosyanıza aşağıdakileri ekleyin . Uygulamamı XAMPP sunucumdan Apache 2.2 ve PHP 5.4 sürümlerine taşıdığımda ilk defa karşılaştım ...

Bunu index.phpdosya yerine dosyanızda yapmanızı öneririm php.ini.

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

3
tam sistem erişimine sahip olmadığınız zamanlar için mükemmel bir çözüm, bunun sınırlı erişime sahip veya daha sağlam bir çözüme ihtiyacı olan insanlar için olduğunu ve mümkünse bunu php.ini'yi düzenleyerek birleştirebilirsiniz
aqm

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

onun yerine

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

benim için çalıştı (geçerli yılı gösterir ve artık hata mesajını göstermez). (Yukarıdaki Chris'e teşekkürler)


15

Bunlar seçenekleriniz değilse

  • Değiştiriliyor php.ini.
  • date_default_timezoneÇağrı ekleniyor .

Bunun yerine datekullanabilirsiniz gmdate.

gmdate( "Y" )Bir telif hakkı snipleti için bir yıla ihtiyacım olduğunda kullandım .


14

CodeIgniter kullanıyorsanız ve php.ini değiştiremiyorsanız, index.php başlangıcına aşağıdakileri ekledim:

date_default_timezone_set('GMT');

Benim için çalışıyor, yardımın için teşekkürler Jose. Saygılarımla, Sarim
Sarim Shekhani

Bu, yerel php.net/manual/tr/function.date-default-timezone-set.php üzerinde çalışır . TY, beni doğru yola koydun. İlişki için buradaki işlev için saat dilimi listesine bakın php.net/manual/tr/timezones.php
Louis Loudog Trottier


11

@Justis beni doğru yöne çekti, ama kodu benim için çalışmadı. Bu yaptı:

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

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

Bu çözüm yalnızca tam sistem erişimi olmayanlar için değildir. Herhangi bir komut dosyası için sizden başka birine komut verdiğinizde gereklidir. Komut dosyasını başka birine dağıtırken hangi sunucuda çalışacağını asla bilemezsiniz.


5

Bu besteci im besteci içine bir "createbucket.php" komut dosyası enjekte etmeye çalışıyorum ve ben benim zaman dilimi yanlış söylendi tutmak BAZ zaman için beni rahatsız ediyor.

Sonunda sorunu çözen tek şey: $ sudo nano /etc/php.ini

Saat dilimi ara

[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

Kaldırdığınızdan emin olun. ;

En sonunda

$ sudo service httpd restart

Ve gitmek için iyi olacaksın :)


5

Çift tırnak içine almak zorunda kaldı.

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

Hala hiçbir workie (Mac OSX'te), bu yüzden sonunda bozuldu ve ekledim/etc/php.ini: date.timezone = America/Los_Angeles
MarkHu

3

.htaccessDosyanızda saat dilimini ayarlayabilirsiniz

php_value date.timezone UTC

Bu ayar php.ini ayarlanmış olmasına rağmen hala uyarıyı döndürmesi durumunda çalışmalıdır (php 5.4. *). Benim için çalıştı.
Christian Bonato

2

Date.timezone = birkaç cevapta belirtildiği gibi ayarlamaya ek olarak, php.ini dosyasında date.timezone'a ulaşmasını engelleyen bir hata buldum. Ben buldum yolu bir terminalde komut satırından php çalıştırmak oldu. Bu durum 114 numaralı satırda bir hata bildirilmesine neden oldu. Benim durumumda '|' hatalarını görüntülemek için bir ayar önerisi almamıştım. 2 değer arasında. Beğenmedi. Değerlerden birini ve | ve ondan sonra her şey güzeldi


1

İki saat dilimi için basit bir yöntem.

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

Uyumsuzlukları giderirken hızlı bir çözüm, index.phpdosyanızdaki hata raporlamayı devre dışı bırakmaktır :

Senin içine aşağıdaki satırı ekleyin index.php altındadefine( ‘_JEXEC’, 1 );

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

0

EC2 ve S3 kepçemi us-west-2 (Oregon) bölgesinde ağırlıyorum. Ben $s3client->listBuckets()php mevcut kovaları listelemek için çağırırken , ben istisna alıyordu - "Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings...". ben çalışması için aşağıdaki değişiklikleri yaptı. Birinin benzer bir sorunla karşılaşması ve yukarıdaki yanıtlardan herhangi birinin yardımcı olmaması durumunda bu ayrıntıları paylaşmak.

  1. AWS Ağ Zaman Protokolü'nü (NTP) Yapılandırma belgelerine dayanarak, ntpd hizmet durumunun ntpstatkomutu çalıştırarak iyi olduğunu onayladım . Hata alırsanız, bu bağlantı neyin yanlış gittiğini bilmenize yardımcı olur.
  2. /Etc/php.ini dosyasını açıldı (bazıları yüklü php sürümüne göre farklı bir yolda olabilir) ve date.timezoneherhangi bir değere ayarlanmadığını ve varsayılan olarak yorumlandığını buldu. ';' İşaretini kaldırarak yorum yapmadım Bu satırdan önce değerini ayarlayın "UTC"ve dosyayı kaydedin.
  3. Http ve ntp artalan süreçleri sudo service httpd restartve sudo service ntpd restartkomutları kullanılarak yeniden başlatıldı .

Bundan sonra istisnasız olarak kovaları başarıyla listeleyebiliyorum. Bu yardımcı olur umarım.


0

Plesk kullanıyorsanız, ilk olarak, PHP Ayarlarını Aç'ı deneyin, sayfanın alt kısmında date.timezone öğesini VARSAYILAN'dan UTC'ye değiştirin.

resim açıklamasını buraya girin

resim açıklamasını buraya girin


0

Ben bir chroot hapiste php-fpm çalışan bu hata vardı. Chroot dizininde etc / php.ini ve / usr / share / zoneinfo oluşturmayı denedim ama işe yaramadı. Ben bile hangi dosya eksik olduğunu görmek için php-fpm daemons strace-ing denedim - hiçbir şey dışarı atladı.

Dolayısıyla, Google'ın sizi buraya getirmesi durumunda /etc/php-fpm.d/www.conf, chroot için yapılandırılmış php-fpm kullanırken bu hatayı alırsanız, muhtemelen bu satırı ENV bölümüne ekleyerek düzeltebilirsiniz :

env[TZ] = America/New_York

Bir php-fpm yeniden başlatmanın etkili olması için normalde gereklidir. Umarım bu birisine yardım eder.


0

Benim durumumda, PHP PHP-FPM (FastCGI Process Manager) kullanmak için yapılandırılmış var. phpinfo()CLI yürütürken php.ini içinde ayarladığım doğru zaman dilimi gördüm, ancak yine de tarayıcıda yanlış ve kodumun başarısız olmasına neden oldu. Sadece php-fpmsunucuda hizmeti yeniden başlatmam gerekiyordu .

service rh-php56-php-fpm restart

httpdDüzenlediyseniz hizmeti yeniden başlatmanız da gerekebilirphp.ini

service httpd restart

0

CtrlX'ten yukarıda verilen bu cevap doğru cevaptır, ancak tamamen işe yaramayabilir. Bu satırı php.ini dosyama ekledim :

date.timezone = "America/Los_Angeles"

ancak bazı PHP komut dosyalarım alt klasörler içinde olduğu için tüm dosyalarım için PHP hatasını kaldırmadı. Bu yüzden tekrarlayan (alt klasörlerde) kullanılmak üzere php.ini kurmak için .htaccess dosyasını düzenlemek zorunda kaldı :

suphp_configpath /home/account_name/public_html

Burada account_name, cpanel hesap adınız ve public_html, php.ini dosyanızın bulunduğu klasördür.


0

Docker kullanıcısı için: Projenizde yerel bir timezone.ini dosyası oluşturun, docker-compose.yml dosyasında yapılandırmayı ayarlayın,

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

timezone.ini

    date.timezone=Australia/Sydney

0

Dosyaya erişiminiz yoksa alan adınızın veya alt öğenizin kök dizininde php.inibir .htaccessdosya oluşturun veya düzenleyin ve ekleyin (cpanel tarafından oluşturulur):

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

Normal kasa kuralının söylemek istediklerinizi ifade edebilmesi için lütfen büyük kelimeler kullanmamaya çalışın.
shizhen

0

Bunu çözmek için iki seçenek vardır

İlk olarak, php.ini dosyasına değiştirin ve varsayılan saat dilimini koyun

date.timezone = "America/New_York"

Bir kez, php.ini içinde saat dilimi ayarladıktan sonra sunucuyu yeniden başlatın

İkincisi, ihtiyacınıza göre çalışma zamanı atama saat dilimini değiştirin

date_default_timezone_set('America/New_York');

-1

Bağlantı sayfanıza date_default_timezone_set("Africa/Johannesburg");geçerli konumunuza göre böyle bir kod koyun .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.