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

4 Jirka Chmiel
položil/-a 9.7. 11:17
 
upravil/-a 9.7. 11:18

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.

odkaz
5 Andreaw Fean
odpověděl/-a 9.7. 14:04

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. 21:39

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.

Otázky uživatele Jirka Chmiel