서버의 php가 iconv()를 설정하지 않았을 경우
글쓴이: 이한길 / 작성시간: 금, 2005/02/11 - 11:10오후
iconv는 인코딩을 변경해주는 훌륭한 툴입니다.
그리고 이것을 php에서도 iconv라는 함수를 사용해서
문자열의 인코딩을 변경할 수 있습니다..
다 아시는 이야기라.. 조금 죄송합니다..
글구 과연 팁에 올려도 될까 싶었지만..혹시나 싶어서..
올립니다.
아래는 그 함수를 사용할 수 없을 경우
하지만 서버에 iconv가 있는 경우 iconv바이너리 실행코드를 사용해서
php의 iconv()함수를 대신할 만한 간단한 코드입니다.
if(!function_exists(iconv)) { $tmpfile = $tmp_dir_path."/tmp001"; $iconv_path = "/usr/bin/iconv"; function iconv($from, $to, $text) { global $iconv_path, $tmpfile; $p = popen($iconv_path." --from-code=".$from." --to-code=".$to." --output=".$tmpfile, "w"); fwrite($p, $text); pclose($p); $fp = fopen($tmpfile, "r"); $text = fread($fp, filesize($tmpfile)); fclose($fp); return $text; } }
Forums:
Re: 서버의 php가 iconv()를 설정하지 않았을 경우
괜찮기는 한데 $tmpfile 변수를 tempnam 함수를 사용해서 만드는 것이 더 좋아 보입니다. :)
- 토끼군
Re: 서버의 php가 iconv()를 설정하지 않았을 경우
저는 파일 하나만 그냥 쓸까 해서 그렇게 정한거에요..
여러 파일 만들어봐야.. 특별히 좋을일도 없을것 같고 해서요
/tmp디렉토리에다가도 만든 파일은 지워줘야 하는데
거 귀찮고 해서... 그렇게 했습니다.
여튼 아직 초보라...
뭐가 좋을지 모르겠습니다..
----
먼저 알게 된 것을 알려주는 것은 즐거운 일이다!
http://hangulee.springnote.com
http://hangulee.egloos.com
tmpfile을 하나만 만들경우, 동시에 두군데서 요청이 들어올 경우 충
tmpfile을 하나만 만들경우, 동시에 두군데서 요청이 들어올 경우 충돌이 일어날 수 있습니다.
- 요청 1에서 tmpfile 생성
- 요청 2에서 tmpfile 생성 <- tmpfile을 덮어 써 버린다!
- 요청 1에서 tmpfile 읽기
- 요청 2에서 tmpfile 읽기
와 같은 순서로 실행될 수 있으며, 이 경우 요청 1에서도 요청 1의 결과물을 읽어들이게 됩니다.
위에 오타.'요청 1에서도 요청 1의' -> '요청 1에서도 요
위에 오타.
'요청 1에서도 요청 1의' -> '요청 1에서도 요청 2의'
output옵션을 주지않으면 stdout 으로 나오니 popen 을 r
output옵션을 주지않으면 stdout 으로 나오니 popen 을 r 로 열어서 그냥 읽어버리면 되지 않을까요?
음..
혹시 dl 이 먹나 보시고
dl로 라이브러이 임포트해서 해보시는게 어떨까요?
[code:1]echo "유니코드" | iconv -f
echo "유니코드" | iconv -f UTF-8 -t UHC
이런것도 됩니다.
shell_exec() 로 한방에...
https://xenosi.de/
[quote="송효진"][code:1]echo "유니코드&quo
어짜피 파이프를 이용하는거라면 echo 부분은 popen 으로 연 파이프에.. fputs 등으로.. 밀어넣어주는게 더 효율적일 듯 하네요 ;)
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
popen 함수는 단방향입니다.echo 를 이용한 방법에는 길이
popen 함수는 단방향입니다.
echo 를 이용한 방법에는 길이 제한 있습니다.
http://kr.php.net/manual/en/function.pro
http://kr.php.net/manual/en/function.proc-open.php
그럼 양방향인 proc-open 을 사용하면 되겠네요 :)
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
[quote="정태영"]http://kr.php.net/manual/en
PHP 버전이.. :twisted:
[quote="ditto"][quote="정태영"]http://kr.ph
지원되는 버젼이 다음과 같이 되어 있네요..
보통 다 그 버젼 쓰지 않나요?
제가 쓰는 나야나 계정은 4.3.1입니다..
아.. 그리고 좋은 방법을 알려주셔서 감사합니다..
조금더 봐야징~ 아직 초보라..ㅋ
----
먼저 알게 된 것을 알려주는 것은 즐거운 일이다!
http://hangulee.springnote.com
http://hangulee.egloos.com
[code:1]if(!function_exists(icon
고쳐봤습니다.. 이정도면 될런지...
이번엔 which를 사용해서 알아서 iconv를 찾게 했는데..
괜찮겠지요?
----
먼저 알게 된 것을 알려주는 것은 즐거운 일이다!
http://hangulee.springnote.com
http://hangulee.egloos.com
1. iconv의 위치는 자주 변하지 않는다2. 웹 페이지 호출할 때
1. iconv의 위치는 자주 변하지 않는다
2. 웹 페이지 호출할 때마다 which를 실행하는 것은 낭비이다.
위의 두가지 사항을 고려해 볼 때 iconv의 위치를 지정하는 것은 예전처럼 변수 형태로 고정해서 지정하는 쪽이 더 나아보입니다.
Re: 서버의 php가 iconv()를 설정하지 않았을 경우
그냥
tar xvfpz php-version.tar.gz
cd php-version/ext/iconv
phpize
./conifgure
make
make install
해서 iconv extension 만 등록하는 것이 낳을 듯 싶은데요. 다만.. compiler 가 시스템에 없다면 문제이겠지만..
개인 적으로 iconv 명령을 이용할 것이라면 perl 의 piconv 를 이용하는 것이 낳다는 판단입니다. glibc 의 iconv 는 에러를 내며 뻗는 경우가 많은지라.. :-)
괜한 태클이지만..
낳다는 아이를 낳다 새끼를 낳다 할때 쓰는 표현으로
A가 B보다 성능이 좋다라는 뜻을 표현할때는 낫다가 맞는 표현입니다.
위대한 한글
위대한 한글
glibc의 iconv에서 뻗는
glibc의 iconv에서 뻗는 경우를 처리하려면, -c 옵션을 주시면 invalid 를 skip시킬 수 있습니다.
뭐 EUC-KR(UHC) <-> UTF-8
뭐 EUC-KR(UHC) <-> UTF-8 만 고려하면 된다면.. http://cvs.oops.org/?cvsroot=PHP-Module&module=pear_KSC5601 이런 것도 있습니다. php native code로 되어 있습니다. :-) test 디렉토리에 보시면 예제가 있습니다.
댓글 달기