PHP 8.2 nevrací ve funkci date čas s timezone

Re:PHP 8.2 nevrací ve funkci date čas s timezone
« Odpověď #15 kdy: 13. 04. 2023, 15:35:05 »

Kód: [Vybrat]
root@testphp:/etc/php/8.1/cli# cat /etc/timezone
Europe/Prague

Dalsi zajimavost, proc vraci php timezone Europe/Berlin, kdyz mam nastaveno Europe/Prague :-)

php.ini nie je jediny konfigurak ktory php pouzije. Kludne to mozes mat prepisane niekde inde.
Ked tak si vypis ktore konfiguraky natahuje:
Kód: [Vybrat]
/usr/bin/php8.1 --ini

/usr/bin/php8.2 --ini


Re:PHP 8.2 nevrací ve funkci date čas s timezone
« Odpověď #16 kdy: 17. 04. 2023, 11:32:02 »

Kód: [Vybrat]
root@testphp:/etc/php/8.1/cli# cat /etc/timezone
Europe/Prague

Dalsi zajimavost, proc vraci php timezone Europe/Berlin, kdyz mam nastaveno Europe/Prague :-)

php.ini nie je jediny konfigurak ktory php pouzije. Kludne to mozes mat prepisane niekde inde.
Ked tak si vypis ktore konfiguraky natahuje:
Kód: [Vybrat]
/usr/bin/php8.1 --ini

/usr/bin/php8.2 --ini

Kód: [Vybrat]
root@testphp:~# /usr/bin/php8.1 --ini
Configuration File (php.ini) Path: /etc/php/8.1/cli
Loaded Configuration File:         /etc/php/8.1/cli/php.ini
Scan for additional .ini files in: /etc/php/8.1/cli/conf.d
Additional .ini files parsed:      /etc/php/8.1/cli/conf.d/10-opcache.ini,
/etc/php/8.1/cli/conf.d/10-pdo.ini,
/etc/php/8.1/cli/conf.d/20-calendar.ini,
/etc/php/8.1/cli/conf.d/20-ctype.ini,
/etc/php/8.1/cli/conf.d/20-exif.ini,
/etc/php/8.1/cli/conf.d/20-ffi.ini,
/etc/php/8.1/cli/conf.d/20-fileinfo.ini,
/etc/php/8.1/cli/conf.d/20-ftp.ini,
/etc/php/8.1/cli/conf.d/20-gettext.ini,
/etc/php/8.1/cli/conf.d/20-iconv.ini,
/etc/php/8.1/cli/conf.d/20-phar.ini,
/etc/php/8.1/cli/conf.d/20-posix.ini,
/etc/php/8.1/cli/conf.d/20-readline.ini,
/etc/php/8.1/cli/conf.d/20-shmop.ini,
/etc/php/8.1/cli/conf.d/20-sockets.ini,
/etc/php/8.1/cli/conf.d/20-sysvmsg.ini,
/etc/php/8.1/cli/conf.d/20-sysvsem.ini,
/etc/php/8.1/cli/conf.d/20-sysvshm.ini,
/etc/php/8.1/cli/conf.d/20-tokenizer.ini

root@testphp:~# /usr/bin/php8.2 --ini
Configuration File (php.ini) Path: /etc/php/8.2/cli
Loaded Configuration File:         /etc/php/8.2/cli/php.ini
Scan for additional .ini files in: /etc/php/8.2/cli/conf.d
Additional .ini files parsed:      /etc/php/8.2/cli/conf.d/10-opcache.ini,
/etc/php/8.2/cli/conf.d/10-pdo.ini,
/etc/php/8.2/cli/conf.d/20-calendar.ini,
/etc/php/8.2/cli/conf.d/20-ctype.ini,
/etc/php/8.2/cli/conf.d/20-exif.ini,
/etc/php/8.2/cli/conf.d/20-ffi.ini,
/etc/php/8.2/cli/conf.d/20-fileinfo.ini,
/etc/php/8.2/cli/conf.d/20-ftp.ini,
/etc/php/8.2/cli/conf.d/20-gettext.ini,
/etc/php/8.2/cli/conf.d/20-iconv.ini,
/etc/php/8.2/cli/conf.d/20-phar.ini,
/etc/php/8.2/cli/conf.d/20-posix.ini,
/etc/php/8.2/cli/conf.d/20-readline.ini,
/etc/php/8.2/cli/conf.d/20-shmop.ini,
/etc/php/8.2/cli/conf.d/20-sockets.ini,
/etc/php/8.2/cli/conf.d/20-sysvmsg.ini,
/etc/php/8.2/cli/conf.d/20-sysvsem.ini,
/etc/php/8.2/cli/conf.d/20-sysvshm.ini,
/etc/php/8.2/cli/conf.d/20-tokenizer.ini

Zadny rozdil...

RDa

  • *****
  • 2 618
    • Zobrazit profil
    • E-mail
Re:PHP 8.2 nevrací ve funkci date čas s timezone
« Odpověď #17 kdy: 17. 04. 2023, 11:57:08 »
Hele, a ono to je nejaky Debian / Ubuntu, protoze to distribuce dokazou nekdy pekne zm**at, jsem stahnul source package z:

https://packages.ubuntu.com/lunar/php8.1-cli

A vidim tam soubor:  ./patches/0022-Use-system-timezone.patch - ktery natajnacku cuca TZ ze systemovyho locale.

A taky obsahuje velice vystizny popis v hlavicce, ze to lidem radi rozbijeme napric nazoru upstreamu:

Kód: [Vybrat]
From: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org>
Date: Sat, 2 May 2015 10:26:56 +0200
Subject: Use system timezone

Upstream don't want this patch. See
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=730771 for a summary.

This delta is recovered from previous versions of the system timezone patch in
Debian, and appears to have inadvertently been dropped. Author unknown.

To be used in tandem with use_embedded_timezonedb.patch and use_embedded_timezonedb_fixes.patch.
---
 ext/date/php_date.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 9844618..1a30313 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -545,6 +545,23 @@ static char* guess_timezone(const timelib_tzdb *tzdb)
                DATEG(timezone_valid) = 1;
                return DATEG(default_timezone);
        }
+       /* Try to guess timezone from system information */
+       {
+               struct tm *ta, tmbuf;
+               time_t     the_time;
+               char      *tzid = NULL;
+
+               the_time = time(NULL);
+               ta = php_localtime_r(&the_time, &tmbuf);
+               if (ta) {
+                       tzid = timelib_timezone_id_from_abbr(ta->tm_zone, ta->tm_gmtoff, ta->tm_isdst);
+               }
+               if (! tzid) {
+                       tzid = "UTC";
+               }
+
+               return tzid;
+       }
        /* Fallback to UTC */
        return "UTC";
 }

Imho v 8.2 tento patch mozna uz neni a pochopili ze vnaset odlisnosti nestoji za to.. takze s 8.2 sedi PHP dokumentace uz presne.

Re:PHP 8.2 nevrací ve funkci date čas s timezone
« Odpověď #18 kdy: 17. 04. 2023, 12:15:57 »
Je to sice debian 11, ale php je z packages.sury.org/php

V release notes pro packages.debian.org je v release notes akorat info o prechod na 8.2 :D No uz je to tak nejak fuk, holt se to nastavi nekterym z uvedenych zpusobu a nebude se uz spolehat na automaticke vyuziti systemovych nastaveni.

Kit

  • *****
  • 705
    • Zobrazit profil
    • E-mail
Re:PHP 8.2 nevrací ve funkci date čas s timezone
« Odpověď #19 kdy: 17. 04. 2023, 13:12:14 »
Po zkušenostech raději tahám datum a čas z databáze. Už se mi totiž stalo, že se čas v PHP a v databázi rozešly a bylo to docela nepříjemné.