현재 위치: > 최신 기사 목록> PHP는 효과없이 setlocale ()을 호출합니까? 운영 체제와 로케일이 호환되지 않을 수 있습니다.

PHP는 효과없이 setlocale ()을 호출합니까? 운영 체제와 로케일이 호환되지 않을 수 있습니다.

gitbox 2025-07-10

PHP를 사용한 개발 프로세스 동안 SetLocale () 함수는 종종 스크립트의 로케일과 로케일을 설정하는 데 사용됩니다. 프로그램의 지역 환경을 변경하여 날짜, 시간, 통화 등의 서식 성능에 영향을 미칩니다. 그러나 때로는 개발자가 setlocale () 호출 되더라도 결과가 효과적이지 않으며 기본 로케일 또는 로케일 설정이 여전히 표시됩니다. 그렇다면 이유는 무엇입니까?

1. setLocale () 함수 소개

setLocale () 은 프로그램의 현재 로케일을 설정하기위한 PHP 내장 기능입니다. 구문은 다음과 같습니다.

 <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>
  • $ 카테고리 : LC_TIME (시간 형식), LC_MONETARY (통화 형식), LC_NUMERIC (숫자 형식), LC_ALL (모든 설정)과 같이 설정할 카테고리를 지정합니다.

  • $ locale : 설정할 로케일을 지정합니다.

  • 반환 값 : 성공하면 현재 로케일을 반환하고 실패시 False를 반환합니다.

예를 들어, setlocale ()을 사용하여 날짜와 시간 영역을 중국어로 설정하십시오.

 <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>

이 코드의 의도는 날짜 형식을 중국어로 설정하는 것이지만 때로는 코드가 실행 된 후 예상 중국어 형식이 나타나지 않는다는 것을 알 수 있습니다.

2. 문제의 원인 : 운영 체제와 로케일은 호환되지 않습니다.

setlocale ()가 발효되지 않으면 가장 일반적인 이유는 운영 체제가 해당 로케일을 설치하지 않거나 지원하기 때문입니다. PHP는 일반적으로 운영 체제 설정의 영향을받는 운영 체제의 현지화 지원을 통해 지정된 로케일을 적용 할 수 있는지 여부를 결정합니다.

1. 운영 체제 로케일은이를 지원하지 않습니다

Linux 또는 MacOS 시스템에서 로케일은 일반적으로 운영 체제의 현지화 지원 패키지에서 제공합니다. PHP가 호출하는 로케일이 운영 체제에 설치되지 않은 경우 SetLocale ()가 적용되지 않습니다. 예를 들어, ZH_CN.UTF-8 로케일은 일부 운영 체제에 설치되지 않아서 PHP가 해당 로케일로 전환하지 못할 수 있습니다.

다음 명령을 사용하여 현재 운영 체제가 지원하는 로케일을 확인할 수 있습니다.

  • Linux에서는 명령 로케일 -A를 사용하여 지원되는 지역 목록을 볼 수 있습니다.

  • MacOS에서는 Locale -a를 사용하거나 /usr/share/locale 디렉토리에서 언어 파일을 볼 수 있습니다.

로케일이 누락 된 경우 운영 체제의 패키지 관리 도구를 통해 언어 패키지를 설치할 수 있습니다. 예를 들어, 우분투에서 다음 명령을 사용하여 중국어 패키지를 설치할 수 있습니다.

 <span><span>sudo apt-get install language-pack-zh-hans
</span></span>

2. 로케일의 캐릭터 세트 문제

또 다른 가능한 문제는 문자 세트 비 호환성입니다. 예를 들어, 운영 체제에 ZH_CN 로케일이 설치되어 있지만 해당 UTF-8 인코딩 지원이 설치되지 않은 경우 ZH_CN.UTF-8은 적용되지 않습니다. 이 경우 해당 문자 세트 지원이 설치되어 있는지 확인하십시오.

3. 시스템 구성 문제

일부 서버 환경에서는 PHP가 운영 체제의 로케일 구성에 액세스 할 수있는 권한이 없을 수 있습니다. 예를 들어, Docker 컨테이너에서 PHP를 실행하는 경우 누락 된 로케일 파일 또는 권한 문제가 발생할 수 있습니다. 현재 PHP 스크립트 또는 서버 구성에서 로케일을 수동으로 지정하거나 누락 된 로케일 지원을 설치하기 위해 컨테이너 구성을 수정하려고 시도 할 수 있습니다.

3. 문제를 해결하는 방법?

  1. 운영 체제의 로케일을 확인하십시오 <br> 명령 로케일 -A를 사용하여 대상 로케일이 지원되는지 확인하십시오. 지원되지 않으면 해당 언어 패키지 또는 문자 세트 지원을 설치해야합니다.

  2. 적절한 로케일 설정 <br> PHP에서 setlocale ()을 사용하는 경우 로케일 매개 변수가 운영 체제가 지원하는 로케일과 일치하는지 확인하십시오. 예를 들어, Zh_CN.UTF-8은 운영 체제에서 설치 한 로케일과 일치해야합니다.

  3. PHP 구성 <br>을 확인하십시오 PHP 구성 파일 ( php.ini )의 설정이 SetLocale ()가 적용되는 것을 제한하거나 방지하지 않거나 특히 로케일 구성과 관련된 설정을 제한하지 않도록하십시오.

  4. 서버를 다시 시작하십시오 <br> 경우에 따라 로케일 변경을 위해서는 웹 서버를 다시 시작해야합니다. PHP-FPM, Nginx 또는 Apache 서비스를 다시 시작할 수 있습니다.

4. 요약

PHP의 setlocale () 함수는 일반적으로 운영 체제가 지정된 로케일을 설치하지 않았거나 지원하기 때문에 때때로 적용되지 않습니다. 이 문제를 해결하려면 운영 체제의 로케일 지원을 확인하고 PHP가 이러한 설정에 액세스하고 적용 할 수 있는지 확인해야합니다. 운영 체제에 관련 언어 팩이없는 경우 수동으로 설치하고 PHP에서 올바르게 호출 할 수 있습니다. 이러한 방식으로, setlocale () 의 문제가 무효화되고 스크립트는 예상대로 실행될 수 있습니다.