- Werbung -

5 Beiträge / 0 neu
Letzter Beitrag
Dirk Wagner
Offline
Registriert seit: 19.11.2007 - 17:33
PHP Problem mit setlocale

Hi Leute,

ich bin gerade dabei eine Präsenz von einem auf den anderen Server zu
verschieben.
Auf dem alten Server lief PHP 4.0.6 und Apache 1.3
auf dem neuen PHP 4.3.3 und Apache 2.0

neben diversen anderen Umstellungen funktioniert auf der neuen Kiste setlocale() nicht mehr.

setlocale (LC_TIME, 'de_DE@euro', 'de_DE', 'de', 'ge');
echo strftime("%A, %e %B %Y");

liefert genauso den Tag und Monat auf Englisch, wie z.B.

setlocale (LC_TIME, "fr_FR");
echo strftime("%A, %e %B %Y");

In
/usr/share/locale>
sind die entsprechenden Einträge aber vorhanden:

drwxr-xr-x 3 root root 8 May 21 2003 am
drwxr-xr-x 3 root root 8 Mar 2 2003 az
drwxr-xr-x 3 root root 8 May 21 2003 be
drwxr-xr-x 3 root root 8 Mar 19 2003 bg
drwxr-xr-x 3 root root 8 May 21 2003 bn
drwxr-xr-x 3 root root 8 Mar 2 2003 ca
drwxr-xr-x 3 root root 8 Mar 2 2003 cs
drwxr-xr-x 3 root root 8 Mar 2 2003 da
drwxr-xr-x 3 root root 8 Mar 14 2003 de
drwxr-xr-x 3 root root 8 May 21 2003 de_DE
drwxr-xr-x 3 root root 8 Mar 2 2003 el
drwxr-xr-x 3 root root 8 May 21 2003 en
drwxr-xr-x 3 root root 8 Mar 2 2003 en_GB
drwxr-xr-x 3 root root 8 Mar 2 2003 eo
drwxr-xr-x 3 root root 8 Mar 2 2003 es
drwxr-xr-x 3 root root 8 Mar 19 2003 es_ES
drwxr-xr-x 3 root root 8 Mar 2 2003 et
drwxr-xr-x 3 root root 8 Mar 2 2003 et_EE
drwxr-xr-x 3 root root 8 Mar 2 2003 eu
drwxr-xr-x 3 root root 8 May 21 2003 eu_ES
drwxr-xr-x 3 root root 8 Mar 2 2003 fi
drwxr-xr-x 3 root root 8 Mar 14 2003 fr
drwxr-xr-x 3 root root 8 Mar 2 2003 fr_FR
drwxr-xr-x 3 root root 8 Mar 2 2003 ga
drwxr-xr-x 3 root root 8 Mar 2 2003 gl
drwxr-xr-x 3 root root 8 Mar 2 2003 he
drwxr-xr-x 3 root root 8 May 21 2003 hi
drwxr-xr-x 3 root root 8 Mar 2 2003 hr
drwxr-xr-x 3 root root 8 Mar 2 2003 hu
drwxr-xr-x 3 root root 8 Mar 2 2003 id
drwxr-xr-x 3 root root 8 Mar 2 2003 is
drwxr-xr-x 3 root root 8 Mar 14 2003 it
drwxr-xr-x 3 root root 8 Mar 2 2003 ja
drwxr-xr-x 3 root root 8 Mar 2 2003 ja_JP.eucJP
drwxr-xr-x 3 root root 8 Mar 2 2003 ko
drwxr-xr-x 3 root root 8 May 21 2003 lg
drwxr-xr-x 3 root root 8 Mar 2 2003 lt
drwxr-xr-x 3 root root 8 Mar 19 2003 lv
drwxr-xr-x 3 root root 8 May 21 2003 mn
drwxr-xr-x 3 root root 8 May 21 2003 ms
drwxr-xr-x 3 root root 8 Mar 2 2003 nb
drwxr-xr-x 3 root root 8 Mar 2 2003 nl
drwxr-xr-x 3 root root 8 Mar 2 2003 nn
drwxr-xr-x 3 root root 8 Mar 2 2003 no
drwxr-xr-x 3 root root 8 Mar 2 2003 pl
drwx------ 3 root root 8 Mar 28 2003 pt
drwxr-xr-x 3 root root 8 Mar 2 2003 pt_BR
drwxr-xr-x 3 root root 8 Mar 2 2003 ro
drwxr-xr-x 3 root root 8 Mar 2 2003 ru
drwxr-xr-x 3 root root 8 Mar 2 2003 ru_UA.koi8u
drwxr-xr-x 3 root root 8 Mar 2 2003 sk
drwxr-xr-x 3 root root 8 Mar 2 2003 sl
drwxr-xr-x 3 root root 8 Mar 2 2003 sp
drwxr-xr-x 3 root root 8 May 21 2003 sq
drwxr-xr-x 3 root root 8 Mar 2 2003 sr
drwxr-xr-x 3 root root 8 Mar 14 2003 sv
drwxr-xr-x 3 root root 8 Mar 19 2003 ta
drwxr-xr-x 3 root root 8 Mar 2 2003 tr
drwxr-xr-x 3 root root 8 Mar 2 2003 uk
drwxr-xr-x 3 root root 8 Mar 2 2003 vi
drwxr-xr-x 3 root root 8 Mar 2 2003 wa
drwxr-xr-x 3 root root 8 Mar 2 2003 zh
drwxr-xr-x 3 root root 8 Mar 2 2003 zh_CN
drwxr-xr-x 3 root root 8 Mar 2 2003 zh_CN.GB2312
drwxr-xr-x 3 root root 8 Mar 2 2003 zh_TW
drwxr-xr-x 3 root root 8 Mar 2 2003 zh_TW.Big5

Gebe ich

locale

auf der Konsole (SuSE) ein bekomme ich

LC_CTYPE="de_DE@euro"
LC_NUMERIC="de_DE@euro"
LC_TIME="de_DE@euro"
LC_COLLATE=POSIX
LC_MONETARY="de_DE@euro"
LC_MESSAGES="de_DE@euro"
LC_PAPER="de_DE@euro"
LC_NAME="de_DE@euro"
LC_ADDRESS="de_DE@euro"
LC_TELEPHONE="de_DE@euro"
LC_MEASUREMENT="de_DE@euro"
LC_IDENTIFICATION="de_DE@euro"
LC_ALL=

als Antwort.

locale -a liefert aber nur

C
POSIX

und

echo setlocale(LC_ALL, NULL)

im PHP-Skript liefert
C

auch wenn in der Zeile vorher

setlocale(LC_ALL,de_DE);

steht.

Any ideas?

Ciao

dirk

Gast (nicht überprüft)
Re: PHP Problem mit setlocale

setlocale() ist leider sehr Betriebssystem-abhängig. War auf dem alten Server auch SuSe installiert? Haben sich evtl. Parameter geändert?

Es könnte sich natürlich auch um einen Bug in PHP 4.3.3 handeln. Ich habe einen ähnlichen Bug-Report gefunden, aber nur für Windows (war ja wohl klar, dass bei M$ mal wieder nix funktioniert...):

Dirk Wagner
Offline
Registriert seit: 19.11.2007 - 17:33
Re: PHP Problem mit setlocale

Florian schrieb:

> setlocale() ist leider sehr Betriebssystem-abhängig.

Leider wahr...

> War auf dem alten Server auch SuSe installiert?

Ja, doch weiss ich nicht, welche Version.
Und nachschauen kann ich auch nicht mehr - der alte Server ist am Montag in die ewigen Jagdgründe eingegangen...

> Haben sich evtl. Parameter geändert?

Ich vermute eher, dass beim Aufsetzen des Servers irgendein Fehler gemacht wurde.
Leider habe ich im Augenblick keinen blassen Schimmer welcher...
Und mein Provider kennt sich mit Linux leider (noch) nicht so aus wie es in diesem Fall wünschenswert wäre.

> Es könnte sich natürlich auch um einen Bug in PHP 4.3.3
> handeln. Ich habe einen ähnlichen Bug-Report gefunden, aber nur
> für Windows (war ja wohl klar, dass bei M$ mal wieder nix
> funktioniert...):
>

Muss ich mir mal anschauen.
In diversen PHP-Foren bin ich bisher noch nicht geholfen worden.

Ist halt dämlich, wenn auf allen Seiten jetzt steht
28. July 2004
Wenn ich die Zeit hätte, würde ich mir einen SuSE Server mit der identischen Software aufsetzen um versuchen so dem Fehler auf die Schliche zu kommen.
Leider liegt durch den Exitus des Server und ein paar andere Dinge aber soviel an, dass ich da so schnell nicht zu kommen werde...

Ciao

dirk

Dirk Wagner
Offline
Registriert seit: 19.11.2007 - 17:33
Re: PHP Problem mit setlocale

Ich habe nach des Manuals mal ausprobiert, welchen Wert setlocale(LC_ALL,'de_DE@euro', 'de_DE', 'de', 'ge') zurückliefert.

Es ist FALSE...

Nun steht im Manual "setlocale() gibt die neue Einstellung oder FALSE (wenn die locale-Funktionalität auf der System-Plattform nicht unterstützt wird oder der Kategorie-Wert ungültig ist) zurück."

Die Kategorien sollten aber doch gültig sein, oder?

Der Server läuft unter SuSE Linux 9.1 - kann man da die locale-Funktionalität ausschalten?

Ciao

dirk

Dirk Wagner
Offline
Registriert seit: 19.11.2007 - 17:33
Ich hab jetzt doch mal...

... auf einen Rechner SuSE 9.1 Professional mit Apache 2 und PHP 4.3 installiert.
Ohne dass ich was an den Einstellung ändern musste, wird das Datum richtig angezeigt, nachdem ich setlocale (LC_ALL, 'de_DE') ausgeführt habe.

Ich habe allerdings bei der Installation "gesagt", dass ich als bevorzugte Sprache Deutsch haben möchte.

locale liefert allerdings im Gegensatz zu meinem Webserver nicht
LANG="de_DE@euro" sondern LANG= (leer)
LC_TIME und die anderen Parameter beinhalten nicht "de_DE@euro" sondern POSIX

Ciao

dirk