터키어(tr_TR)로 로케일 설정 후 만나게 되는 충격!! 

Fatal error: Call to undefined function



아주 간혹이지만 setlocale(LC_ALL, 'tr_TR')을 통해서 터키어 웹사이트로 셋팅했다면

다른 언어로 셋팅할때는 문제가 없는데 유독 터키어로 설정하고 나면 아래와 같은

오류를 만나게 될 수 있습니다.


Fatal error: Call to undefined function 함수이름() in .......


'어? 이상하다? 분명 함수가 제대로 정의 되어 있는데? 왜 그러지???'

허겁지겁 파일들을 뒤져보고 디버깅을 해 보지만 오류가 날 이유가 없다는것을 알게될뿐

이유를 알기 힘듭니다.


시간 끌지 않고 결론부터 말씀드리겠습니다.

이건 PHP버그 입니다. 현재 버전이 5.4.4 인데 여전히 픽스가 안되었더군요.

setlocale(LC_ALL, 'tr_TR')을 통해서 터키어로 셋팅하면 정의한 함수나 클래스 이름

중에 대문자 'I' 가 있으면 소문자로 변환되버려 함수를 호출할때 없는 함수라는 오류

메세지를 뿌려버립니다. 

무지막지 하죠~


일단 오류가 나는 모습을 가볍게 만들어서 확인해 봅시다!!


The problem: <?php setlocale(LC_ALL, 'tr_TR.UTF-8');   //또는 setlocale(LC_ALL, 'tr_TR');

echo strtolower('THIS IS JUST A TEST'); ?>

output: thIs Is just a test


알파벳 'I' 에 대해서는 문자변환이 일어나지 않습니다.

신기하죠?



그럼 이 문제를 어떻게 해결하냐고요???

조금만 기다려 보세요.. 제가 깔끔하게 정리해서 추가해 드리겠습니다.
어찌됐든 원인 파악만이라도 제대로 된건 다행이죠??? ㅋㅋ




참조 URL

https://bugs.php.net/bug.php?id=18556

http://www.php.net/manual/kr/function.setlocale.php


신고
Posted by 런더너 Londoner

댓글을 달아 주세요

티스토리 툴바