Upgrade PHP7.4 a potíže s desetinnou čárkou rubrika: Programování: PHP

4 Jirka Chmiel
položil/-a 9.7.2020
 
upravil/-a 9.7.2020

Ahoj.

Mám jednoduchý skript na vypsání desetinného čísla

echo strval(2.35);

Sputím-li skript přes PHP CLI 5.6 dostávám

"2.35"

pokud ale tentýž skript na témže notebooku spustím přes PHP CLI 7.4 dostávám

"2,35"

Jako oddělovač desetinných míst je nově použita čárka místo tečky, což mi činí neskonalé potíže, protože jsem ve svých skriptech tak něják předpokládal, že když přetypuju desetinné číslo na string tak vždy dostanu číslo s tečkou a né čárkou.

Vypátral jsem, že potíž je v nastavení lokalizace, resp. z nějakého mě neznámého důvodu obě verze nastavují lokalizaci jinak, PHP5.6 ji nastavuje na "C", zatímco PHP7.4 na "cs_CZ.UTF8". Zajímavé, že se to děje jen na skriptech spouštěných přes příkazovou řádku CLI, když spustím skript přes Apache2 (mod php7.4) tak lokalizace zůstává na "C".

Každopádně důvod proč to sem píšu, je ten, že na internetu jsem našel řešní, kdy se v adresáři "usr/share/php" vytvoří soubor "locale.php", ve kterém se zavolá setlocale(LC_ALL, 'C'), přičemž se tento soubor pak nastaví do ini direktivy "auto_prepend_file", tak aby se před spuštění libovolného skriptu lokalizace nastavila tak jak potřebuji.

Řešení funguje, ale příjde mi takové nějaké moc divoké. S "auto_prepend_file" nemám žádné zkušenosti. Co si myslíte, je to ok nebo je tam nějaká skrytá past o které bych měl vědět?

Díky.

Komentáře

odkaz
2 Andreaw Fean
odpověděl/-a 9.7.2020

Problém není ve verzi PHP, ale v instalaci a nastavení prostředí.

  • Apache a cli mají vlastní environment a vlastní nastavení.
  • Mrkni na /etc/php-* (podrobnosti záleží podle distribuce), porovnej si nastavení toho co máš pro 5.6 a co máš pro 7.4. IMHO by mělo stačit to sjednotit, a bude to fungovat.

Řešení s explicitním použití setlocale je sice možné, ale za stávajících okolností bych ti to nedoporučoval.

Komentáře

  • Jirka Chmiel : Děkuji za odpověď. A nenapadá vás, která z direktiv by mohla mít takový efekt. Porovnal jsem si oba .ini soubory /etc/php/5.6/cli/php.ini a /etc/php/7.4/cli/php.ini a vyšlo mi z toho toto https://www.jirkachmiel.cz/porovnani.html, na levo je 5.6 napravo 7.4 (výstup je očištěn od komentářů a prázdných řádků). Nebo by na to mohla mít vliv nějaká nainstalovaná PHP extenze? 9.7.2020

Pro zobrazení všech 2 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.