Ich hatte genau das gleiche Problem mit der intl
Erweiterung, die von Plesk mit PHP 7.1 installiert wurde.
$ /opt/plesk/php/7.1/bin/php -a
Interactive shell
php > $a = new \NumberFormatter("es_ES", \NumberFormatter::CURRENCY);
php > echo $a->format(12345.12345);
€ 12.345,12
Dies waren die Versionen von ICU, die es verwendet hat, wie mit /opt/plesk/php/7.1/bin/php -i
gesehen:
version => 1.1.0
ICU version => 4.2.1
Um es zu lösen, musste ich eine neuere Version von ICU aus den Quellen kompilieren (die neueste Version, die ich ohne Fehler kompilieren konnte, war 58.2) und dann auch die intl
Erweiterung für meine PHP-Version mit diesem ICU aus den Quellen kompilieren (da ich Plesk verwende, sind die Binärdateien von PHP diejenigen, die von Plesk verwendet werden):
wget http://download.icu-project.org/files/icu4c/58.2/icu4c-58_2-src.tgz
tar xzvf icu4c-58_2-src.tgz
cd icu/source/
CXXFLAGS="-std=c++0x" ./runConfigureICU Linux --prefix=/opt/icu4c-58_2
make
sudo make install
cd ../../
wget http://php.net/distributions/php-7.1.22.tar.gz
tar xzvf php-7.1.22.tar.gz
cd php-7.1.22/ext/intl
/opt/plesk/php/7.1/bin/phpize
./configure --with-php-config=/opt/plesk/php/7.1/bin/php-config --enable-intl --with-icu-dir=/opt/icu4c-58_2
make
sudo make install
Dann stellen Sie sicher, dass die Erweiterung geladen ist, in meinem Fall in /opt/plesk/php/7.1/etc/php.d/intl.ini
:
; Enable intl extension module
extension=intl.so
Dann starten Sie httpd, Apache, PHP-FPM oder was auch immer PHP lädt, neu oder laden Sie es neu:
sudo service httpd restart
Die Versionen, die von /opt/plesk/php/7.1/bin/php -i
angezeigt werden:
version => 1.1.0
ICU version => 58.2
ICU Data version => 58.2
Jetzt wird die Währung korrekt angezeigt:
$ /opt/plesk/php/7.1/bin/php -a
Interactive shell
php > $a = new \NumberFormatter("es_ES", \NumberFormatter::CURRENCY);
php > echo $a->format(12345.12345);
12.345,12 €