“Date (): não é seguro confiar nas configurações de fuso horário do sistema…”

359

Eu tenho esse erro quando eu solicitado para atualizar o PHP versão de 5.2.17 para PHP 5.3.21 no servidor.

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

Respostas:

556

Você provavelmente precisará colocar o fuso horário em uma linha de configuração no seu php.iniarquivo. Você deve ter um bloco como este no seu arquivo php.ini:

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

Caso contrário, adicione-o (substituindo o fuso horário pelo seu). Após a configuração, reinicie o httpd ( service httpd restart).

Aqui está a lista de fusos horários suportados .

CtrlX
fonte
12
para ficar claro, depois de fazer essa alteração, certifique-se de sudo service apache2 restart
Ryan
2
Isso resolveu para mim quando outras soluções não. Só recebi esse erro quando usei funções de data na mesma página da integração com o Amazon SES. Talvez isso ajude alguém.
master_gracey
9
Se você estiver usando PHP CLI (php -r ou php -a) dentro do terminal do cliente, precisará editar o arquivo php.ini da CLI, não o apache2. O arquivo php.ini da CLI do YourC geralmente pode ser encontrado em /etc/php5/cli/php.ini
justinpage
2
Como o primeiro comentário sobre o Apache, você também deve reiniciar o IIS para que isso entre em vigor no Windows / IIS.
precisa saber é
2
Isso resolve meu problema! Apenas uma informação para não especialistas como eu, para encontrar o php.iniusado pelo apache, basta executar o seguinte comando php -i | grep php.ini.
Joël Salamin
198

Se você não pode modificar sua configuração do php.ini, também pode usar o seguinte snippet no início do seu código:

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

A lista de fusos horários pode ser encontrada em http://www.php.net/manual/en/timezones.php .

Babatunde Adeyemi
fonte
7
Por algum motivo, definir date.timezone = America / New_York no meu php.ini e reiniciar o apache não interrompeu essa mensagem de erro ao executar um script usando o swiftmailer. Acabei também tendo que adicionar date_default_timezone_set ('America / New_York'); na parte superior do script, conforme sugerido. Obrigado!
Kyle
Eu tentei sua solução. Agora, o erro é 500 erro interno do servidor. Estou usando o apache 2.xe codeigniter.
Hafiz Shehbaz Ali 15/12/15
@ShehbazAli Você deve ter feito algo errado. Em quais scripts você adicionou o snippet?
Babatunde Adeyemi
o mesmo código está trabalhando na produção. Não há erro. Eu instalei o apache, php e MySQL manualmente na janela 10. PHP, MySQL e Apache funcionam. Mas, este projeto está dando erro.
Hafiz Shehbaz Ali
72

Adicione o seguinte no seu index.phparquivo. Me deparei com isso quando mudei meu aplicativo do meu servidor XAMPP para o Apache 2.2 e PHP 5.4 ...

Aconselho que você faça isso no seu index.phparquivo, e não no php.iniarquivo.

if( ! ini_get('date.timezone') )
{
    date_default_timezone_set('GMT');
}
Justis Matotoka
fonte
3
excelente solução para quando você não necessariamente tem acesso total ao sistema, acho que este é para pessoas com acesso limitado ou precisa de uma solução mais robusta, e combinando isso com a edição do php.ini, se possível
aqm
18
<? print(gmdate("Y")); ?> 

ao invés de

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

funcionou para mim (mostra o ano atual e não mostra mais a mensagem de erro). (Graças a Chris acima)

Susan Taunton
fonte
15

Se essas não são suas opções

  • Modificando php.ini.
  • Adicionando date_default_timezonechamada.

Em vez de datevocê poderia usar gmdate.

Usei gmdate( "Y" )quando precisei de um ano para um snipplet de direitos autorais.

Chris
fonte
14

Se você estiver usando o CodeIgniter e não puder alterar o php.ini, adicionei o seguinte ao início do index.php:

date_default_timezone_set('GMT');
Jose
fonte
Funciona para mim, obrigado José pela ajuda. Com os melhores cumprimentos, Sarim Ghani i-splendid.com
Sarim Shekhani
Isso funciona no php nativo php.net/manual/en/function.date-default-timezone-set.php . TY, você me colocou no caminho certo. Em relação ver lista fuso horário para a função aqui php.net/manual/en/timezones.php
Louis Loudog Trottier
13

Eu sempre mantenho essa linha dentro da raiz do codeigniter index.php. Para que meu código funcione em qualquer servidor

date_default_timezone_set('Asia/Dhaka');

Lista de fusos horários suportados aqui

Shaiful Islam
fonte
11

@ Justis me indicou a direção certa, mas seu código não funcionou para mim. Isso fez:

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

Documentação: http://www.php.net/manual/en/function.date-default-timezone-get.php

Essa solução não é apenas para quem não tem acesso total ao sistema. É necessário para qualquer script quando você o fornece a mais alguém além de você. Você nunca sabe em qual servidor o script será executado quando você o distribuir para outra pessoa.

John Linhart
fonte
5

Esse problema está me incomodando há algum tempo, pois estou tentando injetar um script "createbucket.php" no compositor e continuo sendo informado de que meu fuso horário está incorreto.

No final, a única coisa que corrigiu o problema foi: $ sudo nano /etc/php.ini

Pesquisar por fuso horário

[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

Certifique-se de remover o ;

Então finalmente

$ sudo service httpd restart

E você estará pronto para ir :)

T0mmyKn1fe
fonte
5

Eu tive que colocá-lo entre aspas.

date_default_timezone_set("America/Los_Angeles"); // default time zone
efeito noturno
fonte
Ainda não há workie (em Mac OSX), então eu finalmente quebrou e acrescentou/etc/php.ini: date.timezone = America/Los_Angeles
MarkHu
3

Você pode definir o fuso horário no seu .htaccessarquivo

php_value date.timezone UTC
Alexander Lindquist
fonte
Isso deve funcionar no caso em que o php.ini ainda retorne o aviso apesar de ter sido definido (php 5.4. *). Trabalhou para mim.
Christian Bonato
2

Além de definir o date.timezone = conforme mencionado em várias respostas, encontrei um erro no arquivo php.ini que impedia que ele chegasse ao date.timezone. A maneira que eu achei foi executando o php na linha de comando em um terminal. isso causou um erro a ser relatado na linha 114. No meu caso, eu havia descomentado uma configuração para exibir erros que tinham '|' entre 2 valores. Não gostou. Eu removi um dos valores e o | e tudo foi bom depois disso

M Graham
fonte
1

Um método simples para dois fusos horários.

<?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
fonte
1
<? date_default_timezone_set('Europe/Istanbul'); ?>

Para php (ou sua localização).

Mehmet Şerif Çaçan
fonte
0

Uma solução rápida, enquanto você corrige as incompatibilidades, é desativar o relatório de erros no seu index.phparquivo:

Insira a linha abaixo no seu index.php abaixodefine( ‘_JEXEC’, 1 );

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

Estou hospedando meu bucket EC2 e S3 na região us-west-2 (Oregon). Quando eu estava ligando $s3client->listBuckets()para listar os buckets existentes no meu php, estava recebendo uma exceção - "Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings...". fiz as alterações abaixo para fazê-lo funcionar. Compartilhar esses detalhes caso alguém esteja enfrentando um problema semelhante e alguma das respostas acima não tenha ajudado.

  1. Com base na documentação @ AWS Configuring Network Time Protocol (NTP) , confirmei que o status do serviço ntpd está correto executando o ntpstatcomando Se você receber um erro, este link o ajudará a saber o que está errado.
  2. Abriu o arquivo /etc/php.ini (alguns podem tê-lo em um caminho diferente, com base na versão do php instalada) e descobriram que date.timezonenão estava definido com nenhum valor e também foi comentado por padrão. Eu não comentei removendo ';' antes desta linha e defina seu valor como "UTC"e salve o arquivo.
  3. Reiniciei os daemons http e ntp usando sudo service httpd restarte sudo service ntpd restartcomandos.

Depois disso, consigo listar os buckets com êxito, sem exceção. Espero que isto ajude.

Maruti C
fonte
0

Se você estiver usando o Plesk, tente: Primeiro, abra as Configurações do PHP, na parte inferior da página, altere date.timezone de DEFAULT para UTC.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Latief Anwar
fonte
0

Eu tive esse erro ao executar o php-fpm em uma prisão chroot. Tentei criar o etc / php.ini e / usr / share / zoneinfo no diretório chroot, mas simplesmente não funcionou. Eu até tentei rastrear os daemons php-fpm para ver qual arquivo estava faltando - nada pulou.

Portanto, caso o Google o traga aqui porque você recebe esse erro ao usar o php-fpm configurado para chroot, provavelmente é possível corrigi-lo adicionando esta linha /etc/php-fpm.d/www.confna seção ENV:

env[TZ] = America/New_York

Normalmente, é necessário reiniciar o php-fpm para que ele entre em vigor. Espero que isso ajude alguém lá fora.

Don Law
fonte
0

No meu caso particular, tenho o PHP configurado para usar o PHP-FPM (FastCGI Process Manager). Ao executar a phpinfo()partir da CLI, vi o fuso horário correto que eu havia definido no php.ini, no entanto, ele ainda estava incorreto no navegador e estava causando falha no meu código. Eu simplesmente precisava reiniciar o php-fpmserviço no servidor.

service rh-php56-php-fpm restart

Você também pode precisar reiniciar o httpdserviço se tiver editado ophp.ini

service httpd restart
EternalHour
fonte
0

Esta resposta acima do CtrlX é a resposta correta, mas pode não funcionar completamente. Adicionei esta linha ao meu arquivo php.ini :

date.timezone = "America/Los_Angeles"

mas não removeu o erro PHP de todos os meus arquivos porque alguns dos meus scripts PHP estão em subpastas. Então eu tive que editar o arquivo .htaccess para configurar o php.ini para ser usado recursivamente (em subpastas):

suphp_configpath /home/account_name/public_html

onde account_name é o nome da sua conta cpanel e public_html é a pasta em que o arquivo php.ini está.

Jeff Baker
fonte
0

Para usuário do docker: Crie um arquivo timezone.ini local no seu projeto, configure a configuração em docker-compose.yml,

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

timezone.ini

    date.timezone=Australia/Sydney
Jin
fonte
0

Se você não tiver acesso ao arquivo php.ini, crie ou edite um .htaccessarquivo na raiz do seu domínio ou sub e adicione-o (gerado pelo 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>
user3724176
fonte
Tente não usar letras maiúsculas no caso de uma convenção de caixa normal poder expressar o que você quer dizer.
shizhen 25/07/19
0

Existem duas opções para resolver isso

Primeiro, mude para o arquivo php.ini e coloque o fuso horário padrão

date.timezone = "America/New_York"

Depois de definir o fuso horário no php.ini, reinicie o servidor

Em segundo lugar, altere o fuso horário de tempo de execução com base em sua necessidade

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

Em sua página de conexão colocar um código como este date_default_timezone_set("Africa/Johannesburg");com base em sua localização atual.

CuteDevIT
fonte