Während des Entwicklungsprozesses unter Verwendung von PHP wird die Funktion SetLocale () häufig verwendet, um das Gebietsschema und das Gebietsschema des Skripts festzulegen. Es wirkt sich auf die Formatierungsleistung von Daten, Zeit, Währung usw. aus, indem die regionale Umgebung des Programms geändert wird. Manchmal werden Entwickler jedoch feststellen, dass das Ergebnis auch dann nicht wirksam ist, wenn SetLocale () aufgerufen wird, und die Standardeinstellungen für Gebietsschema oder Gebietsschema noch angezeigt werden. Was ist der Grund?
1. Einführung in die Funktion setLocale ()
SetLocale () ist eine PHP-integrierte Funktion zum Einstellen des aktuellen Gebietsschemas des Programms. Die Syntax ist wie folgt:
<span><span><span class="hljs-title function_ invoke__">setlocale</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$category</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$locale</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> ...</span><span><span class="hljs-variable">$locales</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
$ Kategorie : Gibt die zu festgelegte Kategorie an, z. B. LC_Time (Zeitformat), LC_Monetary (Währungsformat), LC_NUMERIC (numerisches Format), LC_ALL (alle Einstellungen).
$ locale : Gibt das zu setzende Gebietsschema an.
Rückgabewert: Gibt das aktuelle Gebietsschema zurück, wenn er erfolgreich ist, und gibt beim Versagen falsch zurück.
Verwenden Sie beispielsweise SetLocale () , um die Region von Datum und Uhrzeit auf Chinesisch zu setzen:
<span><span><span class="hljs-title function_ invoke__">setlocale</span></span><span>(LC_TIME, </span><span><span class="hljs-string">'zh_CN.UTF-8'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strftime</span></span><span>(</span><span><span class="hljs-string">"%A, %B %d, %Y"</span></span><span>);
</span></span>
Die Absicht dieses Codes ist es, das Datumsformat auf Chinesisch festzulegen, aber manchmal kann festgestellt werden, dass das erwartete chinesische Format nach der Ausführung des Codes nicht erscheint.
2. Ursache des Problems: Das Betriebssystem und das Gebietsschema sind unvereinbar
Wenn SetLocale () nicht wirksam wird, ist der häufigste Grund, dass das Betriebssystem das entsprechende Gebietsschema nicht installiert oder unterstützt. PHP bestimmt, ob ein bestimmtes Gebietsschema durch die Lokalisierungsunterstützung des Betriebssystems angewendet werden kann, das normalerweise von den Einstellungen des Betriebssystems beeinflusst wird.
In Linux- oder MacOS -Systemen wird das Gebietsschema normalerweise durch das Lokalisierungsunterstützungspaket des Betriebssystems bereitgestellt. Wenn das von PHP genannte Gebietsschema nicht im Betriebssystem installiert ist, wird SetLocale () nicht wirksam. Beispielsweise wird das Gebietsschema zh_cn.utf-8 in einigen Betriebssystemen möglicherweise nicht installiert, wodurch PHP nicht auf dieses Gebietsschema umgestellt wird.
Sie können den folgenden Befehl verwenden, um das vom aktuelle Betriebssystem unterstützte Gebietsschema zu überprüfen:
Unter Linux können Sie das Befehlsgebietsschema -A verwenden, um eine Liste unterstützter Orte anzuzeigen.
Auf macOS können Sie das Gebietsschema -A verwenden oder die Sprachdateien im Verzeichnis /usr/Share/Laceale anzeigen.
Wenn Sie feststellen, dass ein Gebietsschema fehlt, können Sie versuchen, das Sprachpaket über das Paketmanagement -Tool des Betriebssystems zu installieren. Zum Beispiel können Sie auf Ubuntu das chinesische Sprachpaket mit dem folgenden Befehl installieren:
<span><span>sudo apt-get install language-pack-zh-hans
</span></span>
Ein weiteres mögliches Problem ist die Inkompatibilität des Charakters. Wenn Ihr Betriebssystem beispielsweise das ZH_CN- Gebietsschema installiert hat, jedoch nicht die entsprechende UTF-8-Codierungsunterstützung installiert ist, wird zh_cn.utf-8 nicht wirksam. Stellen Sie in diesem Fall sicher, dass der entsprechende Charakter -Set -Support installiert ist.
In einigen Serverumgebungen hat PHP möglicherweise keine Berechtigung, auf die Konfiguration des Gebietsschemas des Betriebssystems zuzugreifen. Wenn Sie beispielsweise PHP in einem Docker -Container ausführen, können Sie auf fehlende Gebietsschemas oder Berechtigungsprobleme stoßen. Zu diesem Zeitpunkt können Sie versuchen, das Gebietsschema im PHP -Skript oder in der Serverkonfiguration manuell anzugeben oder die Containerkonfiguration so zu ändern, dass die fehlende Unterstützung für das Gebietsschema installiert wird.
3. Wie kann man das Problem lösen?
Überprüfen Sie das Gebietsschema des Betriebssystems <br> Verwenden Sie das Befehlsgebietsschema -a, um zu überprüfen, ob das Zielgebiet unterstützt wird. Wenn es nicht unterstützt wird, müssen Sie das entsprechende Sprachpaket oder den Charakter -Set -Support installieren.
Einrichten eines geeigneten Gebietsschemas <br> Stellen Sie bei Verwendung von SetLocale () in PHP sicher, dass die Gebietsschemasparameter mit dem vom Betriebssystem unterstützten Gebietsschema übereinstimmen. Beispielsweise sollte zh_cn.utf-8 mit dem vom Betriebssystem installierten Gebietsschema übereinstimmen.
Überprüfen Sie die PHP -Konfiguration <br> Stellen Sie sicher, dass die Einstellungen in der PHP -Konfigurationsdatei ( PHP.ini ) SetLocale () nicht wirksam oder verhindern, insbesondere Einstellungen im Zusammenhang mit der Konfiguration des Gebietsschale.
Starten Sie den Server neu <br> neu In einigen Fällen erfordern Änderungen des Gebietsschemas einen Neustart des Webservers, um wirksam zu werden. Sie können versuchen, den PHP-FPM-, NGINX- oder Apache-Dienst neu zu starten.
4. Zusammenfassung
Die SetLocale () -Funktion von PHP wirkt sich manchmal nicht aus, normalerweise weil das Betriebssystem das angegebene Gebietsschema nicht installiert oder unterstützt. Bei der Lösung dieses Problems muss die Unterstützung des Gebietsschemas des Betriebssystems überprüfen und sicherstellen, dass PHP auf diese Einstellungen zugreifen und anwenden kann. Wenn das Betriebssystem kein relevantes Sprachpaket hat, kann es manuell installiert und in PHP korrekt aufgerufen werden. Auf diese Weise kann das Problem von SetLocale () ungültig gelöst werden und das Skript wird wie erwartet ausgeführt.