Extension PHP intl na Windows nefunguje

m.brecher
Generous Backer | 714
+
0
-

Nainstaloval jsem na Windows 10 Apache 2.4.39 (Win64) a PHP 8.0.3. Rozšíření intl nefunguje a nechodí funkce Nette které ho využívají např. ::webalize() apod… V error logu Apache jsem našel chybovou zprávu:

PHP Warning:  PHP Startup: Unable to load dynamic library 'intl'
(tried: C:\\Program Files\\PHP8\\ext\\intl (Uveden\xc3\xbd modul nebyl nalezen)
, C:\\Program Files\\PHP8\\ext\\php_intl.dll (Uveden\xc3\xbd modul nebyl nalezen))
 in Unknown on line 0

V php.ini mám korektně nastaveno:

extension_dir = "C:\Program Files\PHP8\ext"
extension=intl

Potřebné dll soubory které intl používá jsou v použité distribuci php na správných místech:

  • php_intl.dll ve složce /ext
  • čtyři soubory icu*.dll v kořenovém adresáři php

PHP jsem nainstaloval jako modul Apache (v konfiguraci Apache) a cesta k PHP není uvedena v systémových proměnných Windows – ukázka z httpd.conf:

LoadModule php_module "C:\Program Files\PHP8\php8apache2_4.dll"
PHPIniDir "C:\Program Files\PHP8"

Jiné extension php fungují.

Hodiny jsem prosurfoval na internetu a jediná použitelná rada byla – zkopírovat všechny icu*.dll (jsou v kořenovém adresáři php) do složky /bin Apache. To jsem zkusil a po restartu Apache intl funguje.

Přestože mě po překopírování souborů intl funguje, přijde mě použitý postup kopírovat dll z PHP do Apache „nekorektní“ a rád bych znal skutečnou příčinu potíží a jak to korektně vyřešit. Měl také někdo problém s instalací extenze intl pro PHP 8.0 na Windows?

Já to odhaduji tak, že dll soubory pro intl jsou v pořádku a funkční, Apache soubor ext\php_intl.dll v pořádku najde, ale nějak nefunguje komunikace mezi tímto dll-kem a dalšími icu*.dlll soubory.

Editoval m.brecher (20. 9. 2021 22:09)

Michal Kumžák
Člen | 106
+
0
-

Zkusil bych dát to rozšíření až jako poslední, možná je na nějakém závislé.

Soubory icu*.dll musí být v bin adresáři apache, stejně jako některé další. Neptej se mě proč, ale prostě to tak je. WAMP samotný si je tam totiž z dané verze PHP sám linkuje.

Jinak pokud si tam měl předtím jinou verzi PHP, doporučuji se podívat zda všechny moduly z PHP v adresáři apache/bin jsou z té aktuální verze. Já když měnil verzi PHP ze 7 na 8, tak mi tam zůstaly soubory ze 7 a já se divil, proč mi to nejde.

Petr Parolek
Člen | 455
+
0
-

Ahoj, není lepší používat Linuxové prostředí jako Vagrant, Docker přes Windows Subsystem for Linux nebo vyvíjet přímo na Linux desktopu a na něm buď si nainstalovat LAMP nebo přes Docker?

m.brecher
Generous Backer | 714
+
0
-

Petr Parolek napsal(a):

Ahoj, není lepší používat Linuxové prostředí jako Vagrant, Docker přes Windows Subsystem for Linux nebo vyvíjet přímo na Linux desktopu a na něm buď si nainstalovat LAMP nebo přes Docker?

Na Windows jsem zvyklý již od roku 1987, je to už určitá psychická závislost a úplně mě stačí přechod z php4 špaget na objektové Nette, ale budu o Linux prostředí pro vývoj uvažovat do budoucna