Nos últimos dias tenho trabalhado em um client em PHP para o protocolo spamd, e como ele já implementa todos os comandos do protocolo, resolvi publicar o projeto. Esta é a release 0.1.0, então é de se esperar que ocorram mudanças na API nas próximas versões. Feedback é sempre bem vindo.
Tentei fazer com que o uso dessa biblioteca fosse o mais simples possível, abstraindo as particularidades do protocolo por baixo dos panos, para que você possa fazer coisas como:
Returns a detailed report if the message is spam or null if it’s ham
headers($message)
Processes the message and returns it’s headers (like X-Spam-Flag and X-Spam-Status)
check($message)
Checks if a message is spam with the CHECK protocol command
isSpam($message)
Shortcut to check() method that returns a boolean
process($message)
Processes the message, checks it for spam and returning it’s modified version
symbols($message)
Returns all rules matched by the message
learn($message, $learnType)
Uses SpamAssassin learning feature with TELL. Must be enabled on the server.
report($message)
Report message as spam, both local and remote
revoke($message)
Revokes a message previously reported as spam
Ainda estou escrevendo alguns exemplos de uso, mas por enquanto você pode conferir a documentação da API neste endereço. Também sugiro que dê uma olhada no diretório tests.
Se você tem a intenção de usar essa biblioteca para implementar um filtro de spam em seu servidor de email, talvez seja melhor considerar usar o utilitário spamc ou então a biblioteca em Perl que já vem com o próprio SpamAssassin (que por acaso foi a minha principal fonte de inspiração).
Essa biblioteca se torna mais útil quando você já possui código escrito em PHP e precisa interagir com o SpamAssassin, como no caso de você possuir um webmail em PHP onde deseja que o usuário possa reportar spam a um servidor remoto de SpamAssassin.
O projeto está hospedado no Github, então você pode:
Em Novembro de 2009 fiz uma apresentação sobre o Augeas e a sua extensão para o PHP no 5o TechDay da Locaweb, um evento interno com palestras técnicas dos mais variados assuntos. A apresentação foi gravada, então deixo aqui o vídeo para quem quiser assistir (são cerca de 10 minutos). Se quiser acompanhar os slides, eles estão disponíveis em PDF.
Importante: Vale lembrar que o suporte a lentes recursivas já foi implementado na versão 0.7, permitindo editar arquivos de configuração que contenham aninhamento indefinido de diretivas, como no exemplo do httpd.conf citado na palestra.
Comparando com o antigo endereço (ppadron.w3p.com.br), o novo (ppadron.blog.br) é muito mais fácil de lembrar e mais intuitivo. Se você acompanha este blog, por favor atualize seu leitor RSS. De qualquer forma, o endereço antigo continuará funcionando normalmente, graças à diretiva RedirectMatch do Apache. Este é o conteúdo do .htaccess em ppadron.w3p.com.br:
Há algumas semanas lancei a primeira versão do augeas, minha primeira extensão do PECL. Augeas é uma ferramenta para edição de arquivos de configuração que fornece uma API unificada para diferentes formatos de arquivo. Citando o site oficial do projeto:
Augeas é uma ferramenta de edição de configuração. Faz o parsing de arquivos de configuração em seus formatos nativos e os transforma em uma árvore. Mudanças nas configurações são feitas manipulando essa árvore e salvando-a de volta ao formato nativo do arquivo de configuração.
Bem, hoje eu lancei a versão 0.4.0 (graças ao Pierre Joye por arrumar a página de upload), que inclui um novo método (Augeas::mv()) e finalmente uma suíte de testes do PHPUnit (AllTests.php).
Os próximos itens na minha lista de coisas a fazer são:
Augeas::defVar() como um wrapper para aug_defvar()
Augeas::__toString() como um wrapper para aug_print() facilitando o debug
documentação completa no formato docbook ao invés desta wiki
Aqui vai um pequeno exemplo do que pode ser feito com o Augeas:
$aug=new Augeas();// vamos desabilitar register_globals!$aug->set("/files/etc/php.ini/PHP/register_globals","Off");if(!$aug->save()){die("Você não possui privilégios para editar o arquivo php.ini.");}
Fácil, não? Nada de regex, nada de fopen, nada de encheção de saco.