Spam filter #2

오랫만에 코드가 손에 잡히길래… 몇 일 전에 구상해 놨던 spam filter 를 실제 구현해봤습니다. php 와 pecl-mailparse 덕분에 아주 간단히 구현할 수 있었습니다.

  1. text/html, text/plain 뽑아내기 (base64_decode, qprint_decode 는 자동으로 됨)
  2. urldecode
  3. convert to utf-8
  4. decode html entities

딱 위에 얘기한 대로만 구현했습니다. 실제 적용 사례는 아래 링크를…

http://mytears.org/resources/mysrc/php/Parsemail.phps

http://mytears.org/procmailrc

현재는 메일 내용을 full buffering 하고 있는데, 몇십 메가씩 되는 메일들을 처리하게 되면 메모리를 엄청나게 쓸 지도 모르겠군요. tempnam 등을 이용해서 임시파일을 만드는 방법으로 천천히 전환해야겠네요 흐흐흐

PEAR: File_Archive, PHP:zip

zip 파일을 이용한 다중 파일 업로드를 테스트 해볼까 싶어서 php 레퍼런스를 찾아보니 [php:zip] extension 란게 나온다. php4 까지는 –with-zip 옵션을 통해 [php:zip] extension 을 활성화 시킬 수 있지만 php5 에서는 pecl-zip 패키지를 이용해야 하는데, gentoo 의 php5 지원은 좀 미약했기 때문에 설치가 잘 되지 않았다.

이것 저것 알아보다가 보니 비슷한 역할을 하는 [PEAR:File_Archive] 를 찾을 수 있었다. 사용법은 [php:zip] extension 쪽이 조금 더 간단하지만, [PEAR:File_Archive] 는 여러가지 파일 포멧을 지원하고 recursive 하게도 동작하기 때문에 좀 더 유리한 점이 있을 거 같다. ([PEAR:File_Archive] 는 zip 파일 안에 있는 tar.gz 파일도 열 수 있다)

대강대강 테스트를 해봤더니 [PEAR:File_Archive] 는 확장자를 이용해서 어떤 형식의 archive 인지를 판단한다. 때문에 좀 귀찮음.

잠시 잊고 있다가 gwn 을 보니 gentoo 에서 php5 를 제대로 지원하기 시작하는 듯 해서… 잠깐의 삽질 끝에 [php:zip] 설치에 성공했다. 역시나 [PEAR:File_Archive] 보다는 [php:zip] 이 좀 더 많은 정보를 제공하고 사용하기가 용이하다.

code:

http://mytears.org/resources/mysrc/php/zip/zip.php

http://mytears.org/resources/mysrc/php/zip/file_archive.php