PHP Magazine 004
PHP Magazine 004
PHP Magazine 004
SUMÁRIO
editorial
Apresentação Mensagens de leitores
Equipe Chamadas
artigos
phpDocumentor
por Maykel dos Santos Braz
Desenvolvendo em PHP para linha de comando - CLI
por Helton Eduardo Ritter
Ataque de sobrecarga utilizando SMTP Injection. O que é, como é e como se prevenir
por Ricardo Striquer Soares
Gerando Planilhas Excel com PHP-GTK
por Pablo Dall'Oglio
AJAX e PHP I: Conhecendo AJAX
por Rafael Dohms
Webmail com Java + PHP
por Guilherme Gall, Pedro Lara, Fabio Borges
Criação de imagens on-the-fly
por Leandro Schwarz
Editores
Flávio Zacharias Fagundes, [email protected]
Ricardo Aragão, [email protected]
Administração
Flávio Zacharias Fagundes, [email protected]
Norberto Augusto, [email protected]
Ricardo Aragão, [email protected]
www.phpmagazine.com.br
Comercial
Norberto Augusto
Parabéns
Parabéns pela iniciativa e viva a comunidade free!Uma
sugestão: separem uma seção da revista somente para
iniciantes. É difícil encontrar um material organizado di-
daticamente.
Rogério Menta Monici :: Santa Rosa de Viterbo -
SP
Sugestão anotada.
Mais uma vez será realizado em Porto Alegre/RS, no Centro de Eventos da PUCRS, o 9º Fórum Internacional de Soft-
ware Livre para debates técnicos e estratégicos sobre o desenvolvimento e o uso do Software Livre. Com atividades
para três dias, a programação do evento propõe em sua agenda: Palestras, encontros com Grupos de Usuários, Arena
de Programação, Homenageados, Cultura Livre e o Workshop de Software Livre.
As palestras do fisl9.0 serão divididas em doze trilhas: Desenvolvimento (Banco de Dados, Ferramentas e Metodo-
logias, Java, Perl, Python, PHP e Ruby), Kernel, Admin (Segurança, Redes e Telecom), Hardware e Sistemas Em-
barcados, Ecossistema do Software Livre (Comunidade, Filosofia, Aspectos Sociais e Cultura Livre), Governo e Soft-
ware Público, Educação e Inclusão Digital, Jogos e Multimídia, Desktop, Casos/Soluções, Negócios (Produtos e
Servicos),e Tópicos Emergentes .
Até este momento, estes são os palestrantes confirmados:
• Randal Schwartz - Administrador de Sistemas e escritor de diversos livros sobre Perl, Randal é co-fundador
da comunidade Perl Mongers e uma das figuras mais respeitadas da comunidade Perl mundial. Atualmente,
ele trabalha como consultor para desenvolvimento de software, e é co-host do podcast FLOSS Weekly.
• Bram Moolenaar - Engenheiro de Software atualmente trabalhando para o Google, em Zurich, Bram é o cri-
ador do editor de textos VIM, um dos editores mais utilizados por programadores e administradores de siste-
mas Unix no mundo inteiro.
• Ken Coar - Ken é um dos principais desenvolvedores do Apache, servidor http mais utilizado na internet. Atu-
almente trabalha para o Linux Technology Center, da IBM.
• Zaheda Bhorat - Zaheda ficou conhecida por seu trabalho na comunidade OpenOffice.org, e hoje em dia
trabalha como Open Source Program Manager para o Google, tratando de assuntos como Open Standards.
• Rishab Ghosh - Diretor da Open Source Initiative. Entre outras coisas, ele é fundador e gerente de edicão do
jornal First Monday, e Programme Leader para Software Livre na UNU-MERIT. Ele trabalha em diversos proje-
tos de pesquisas sobre Software Livre.
• Danese Cooper - Open Source Diva, Intel e Open Source Initiative. Responsável pelo apoio a iniciativas de
software livre na Intel.
• Arnaldo Carvalho de Melo - Desenvolvedor do kernel Linux com foco em protocolos de rede e um dos fun-
dadores da Conectiva.
• David Fetter - Desenvolvedor do projeto PostgreSQL.
• Jon Maddog Hall - Diretor-presidente da Linux International.
• Georgy Berdyshev - Líder do projeto Hardened Linux.
• Michael Hanselmann - Michael Hanselmann trabalha para o Google Switzerland como Administrador de Sis-
temas, especificamente no desenvolvimento do projeto Ganeti. Ele mantem um projeto de hosting há 5 anos,
participou no desenvolvimento do Gentoo por 3 anos e meio, e contribuiu para diferentes projetos de Software
Livre, incluindo o Linux Kernel.
• Alberto Barrionuevo - Vice-presidente da Foundation for a Free Information Infrastructure (FFII).
PARTICIPE
Está disponível a seção para inscrições, garanta já sua participação.
Você pode apoiar o evento tornando-se Página Amiga, divulgando o evento em seu site e obtendo um pequeno espa-
ço para suaAlogomarca
tecnologia que liberta
no site do portal
Você também poderá obter material para divulgação, saiba mais clicando aqui.
Eventos
A PHP Magazine apóia a iniciativa de eventos como cursos gratuitos, palestras e fóruns. Para divulgar na revista, envie informa-
ções sobre o evento para [email protected] , que teremos prazer em contribuir com a divulgação.
phpDocumentor
O objetivo deste trabalho é apresentar a ferramenta phpDocumentor e exemplificar
algumas das funcionalidade utilizadas para documentação de código PHP. Além dos
exemplos de utilização, também será demonstrado o processo de execução do php-
Documentor, o que possibilitará ao leitor gerar sua própria documentação.
Considerações finais
Analisando a documentação gerada pelo phpDocu-
mentor é possível ver a diferença entre ler a documenta-
ção direto no código fonte e ler a documentação apre-
sentada com uma saída amigável e com hyperlinks para
fácil acesso a outros itens documentados.
Além da saída amigável e em diversos formatos, que
satisfazem diversas situações, o phpDocumentor apre-
Documentação de classes e atributos com @abstract, @var, senta um conjunto de tags muito simples, o que permite
@static e @final um rápido aprendizado a qualquer desenvolvedor.
Estas não são todas as tags padrão do phpDocumen- Outra vantagem deste tipo de documentação é o fato
tor. Para uma lista completa e mais detalhes, visite a da documentação ser realizada junto ao elemento e po-
referência [Manual phpDocumentor]. de ser atualizada no mesmo momento em que este é
atualizado. Esta facilidade evita a necessidade do desen-
4. Instalação e execução volvedor procurar por outros arquivos para atualizar a
documentação, o que não seria muito produtivo.
A última versão do phpDocumentor está disponível
Não se esqueça que o objetivo deste artigo é apenas
em [Download phpDocumentor] e existem versões dis-
apresentar ao leitor esta ferramenta de documentação.
poníveis para Windows e Linux. Para executar o phpDo-
Com essa informações o leitor poderá aproveitar ainda
cumentor é necessário a existência de uma versão do
mais suas diversas funcionalidades, muitas das quais não
PHP maior que 4.1.0 e, para usar a interface web um
foram apresentadas aqui.
servidor rodando o PHP. Este artigo aborda apenas a
execução via linha de comando.
Referências e links sugeridos
4.1 Execução via linha de comando [phpDocumentor] – http://www.phpdoc.org
[Manual phpDocumentor] – http://manual.phpdoc.org
Esta é a maneira mais simples de execução e a que [Download phpDocumentor] – http://sourceforge.net/
necessita de menos recursos. Considerando que o php project/showfiles.php?group_id=11194
esteja no seu PATH, para executar o phpDocumentor [Autores phpDocumentor] – http://www.phpdoc.org/
com a configuração padrão basta executar o seguinte notes/Authors
comando:
Os arquivos gerados são apenas a base do CHM.
3. Entrada de dados
A entrada de dados pode se dar de duas formas: a-
través de parâmetros ou da leitura do “STDIN”.
Assim como C, o PHP CLI possui as variáveis “$argc” Figura 9 - Lendo e exibindo a entrada de teclado
e “$argv”. A primeira tem um número inteiro indicativo Até então, acredito que temos os recursos básicos
Ataque de sobrecarga
utilizando SMTP Injection.
O que é, como é e como se prevenir
Este artigo apresenta de forma objetiva o funcionamento do SMTP Injection e como
ele pode ser utilizado para causar um ataque de sobrecarga, como isto pode vir a afe-
tar o servidor, como um programador deve codificar e como um administrador deve
agir para evitar problemas.
SMTP Injection é o método preferido de spammers Existem outras utilidades para um ataque de SMTP
para encaminhar e-mails contendo vírus, mesmo que a Injection, como por exemplo denegrir a marca e a ima-
vítima (o servidor que está processando as requisições) gem da vítima ou encaminhar vírus que podem ser re-
possua mecanismos como SPF, eles serão vistos como e- passados por texto – o atacante pode unir instruções
mails dignos e recebidos por outros sistemas como men- repassadas no campo De com instruções repassadas no
sagens verdadeiras. campo Mensagem em nosso formulário da Figura 2 e
encaminhar o arquivo executável apenas transformando-
o em hexadecimal, como o new line da Figura 3. Porém,
nosso tema é o ataque de carga então vamos continuar
com o assunto.
Edições Anteriores
Faça o download das três edições anteriores.
1. Listas e Árvores Assim como toda biblioteca que faz parte do PEAR, a
SpreadSheet Excel Writer deve ser instalada através do
Listas e árvores no PHP-GTK são implementados atra- seguinte comando:
vés da classe GtkTreeView, que pode ser utilizada para #pear install SpreadSheet_Excel_Writer-0.9.1
exibir tanto árvores quanto listas.
Após isto, os seus arquivos devem ser disponibiliza-
dos dentro da pasta lib de sua instalação do PHP.
3. O programa
Para começar, iremos estender a classe GtkWindow e
criar toda a interface em seu método construtor. A nossa
janela de lançamentos terá basicamente uma caixa verti-
cal (GtkVBox) contendo uma série de caixas horizontais
(GtkHBox).
Em cada caixa horizontal, teremos um par de rótulos
(GtkLabel) e um campo de entrada de dados (GtkEntry).
Ao final, criamos um botão adicionar (STOCK_ADD), cujo
objetivo é coletar os dados digitados pelo usuário nestes
Figura 1 – Componente GtkTreeView campos e adicionar em uma listagem (objeto GtkTreeVi-
ew). Este botão está conectado ao método onAddLinha
O conceito mais importante por trás de uma GtkTree-
AJAX e PHP I:
Conhecendo AJAX
Neste artigo, pretendo apresentar ao leitor a tecnologia AJAX, resolvendo algumas
confusões sobre o que realmente é, e como e onde deve ser usada. Este artigo apre-
senta um exemplo de como implementar uma solução AJAX sem auxílio de Frame-
works.
function criaRequest(){
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject
("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject
("Microsoft.XMLHTTP");
} catch (failed) {
request = false;
}
}
}
if (!request)
alert("Error initializing XMLHttpRe-
quest!");
else
return request;
}
Webmail com
PHP + JAVA
Neste trabalho será apresentado um novo método de autenticação para webmail que
usa como recursos as linguagens PHP e JAVA através de tecnologias J2ME.
6. Considerações Finais
Fábio Borges - [email protected]
No presente momento o método proposto neste Possui Bacharelado em Matemática pela Universida-
trabalho está em fase de implementação e testes. Como de Estadual de Londrina (UEL) e Mestrado em Mode-
trabalhos futuros, pretendemos abrir todos os códigos lagem Computacional pelo Laboratório Nacional de
sob uma licença livre e estender este conceito para ou- Computação Científica (LNCC). Atualmente é Tecno-
tros sistemas que necessitem de autenticação de usuá- logista do LNCC onde é responsável pelo Setor de
rios, além de melhorar o desempenho do programa Java Treinamento e Apoio (STA). Tem experiência na área
que rodará nos dispositivos móveis. de Segurança da Informação. Atuando principalmen-
te nos seguintes temas: Criptografia, Esteganografia,
Web.
Referências e links sugeridos
[GMP PHP] – http://www.php.net/gmp
Criação de imagens
on
on--the
the--fly
Uma importante característica da linguagem PHP é a possibilidade de criar imagens
de forma dinâmica, isto é, durante a execução do script. Este artigo aborda a utiliza-
ção da biblioteca GD do PHP para a criação de imagens, bem como um exemplo prá-
tico que permitirá a criação de palavras-passe para sítios da web.
1. Requisitos mínimos
Para o entendimento deste artigo, é necessário que o
servidor disponha da biblioteca GD. A biblioteca GD é
Figura 1 – Informações sobre a biblioteca GD instalada no ser-
uma biblioteca em código aberto escrita em linguagem
vidor retornadas pela função phpinfo()
C. Desenvolvida por Thomas Boutell (http://
www.boutell.com), a biblioteca é atualmente mantida
por Pierre-A. Joye (http://www.libgd.org). 2. Criação da imagem
A biblioteca GD suporta os formatos JPG, PNG e GIF, Depois de constatada a presença da biblioteca GD no
dentre outros formatos. É importante salientar que o servidor, o próximo passo para o script da palavra-passe
formato GIF é novamente suportado. Este formato era é a criação de uma figura. Isto pode ser feito com as
suportado pelas versões iniciais da biblioteca, mas foi funções imagecreatetruecolor() e imagecreate().
descontinuado nas versões seguintes devido à patente Ambas recebem dois parâmetros (largura e altura) e
da compressão LZW que expirou e, por isso, o suporte retornam um identificador de recurso de imagem para a
ao formato foi restabelecido na versão 2.0.28. imagem criada. Nas duas funções, o identificador de re-
curso de imagem pode ser destruído através da função
É possível verificar se o servidor dispõe da biblioteca, imagedestroy(). É conveniente a utilização do caracte-
A diferença básica entre estas é que a função ima- Os passos enumerados acima estão indicados no
gecopy() realiza uma cópia simples de uma parte de script abaixo.
uma imagem em outra imagem; imagecopymerge()
funciona de forma semelhante à imagecopy(), exceto <?
por ser possível definir um grau de transparência na por- // Requisitos mínimos
ção copiada da imagem de origem; imagecopymerge- if(!function_exists(“gd_info”))
gray() é semelhante à função anterior, exceto por {
echo “Biblioteca GD não instalada.”;
transformar os pixels de destino em tons de cinza antes
exit();
da mescla das imagens; a função imagecopyresam- }
pled() e imagecopyresized() realizam a mesma tare- // Criar a imagem
fa, copiar uma parte de uma imagem em outra imagem $imagem = @imagecreate(100,100);
com escalas diferentes, exceto que imagecopyresam- // Criar a paleta de cores
pled() realiza uma interpolação na figura, possuindo $branco = @imagecolorallocate
($imagem,0xFF,0xFF,0xFF);
resultados visuais levemente mais agradáveis que ima- $azulescuro = @imagecolorallocate
gecopuresized(). ($imagem,0x00,0x00,0x80);
$verde = @imagecolorallocate
Para rotacionar a imagem em certo número de graus, ($imagem,0x00,0xFF,0x00);
é possível utilizar-se a função imagerotate(). Também $verdeescuro = @imagecolorallocate
é suportada a correção de gama através da função ima- ($imagem,0x00,0x80,0x00);
gegammacorrect() e a aplicação de filtros à imagem $vermelhoescuro = @imagecolorallocate
com imagefilter(). ($imagem,0x80,0x00,0x00);
// Desenhar linhas aleatórias
6. Finalização da imagem for($i = 0;$i < 3;$i++)
@imageline($imagem,rand(0,99),rand
Quando todo o processamento da imagem já tiver (0,99),rand(0,99),rand(0,99),$vermelhoescuro);
sido realizado, o próximo passo é a finalização da ima- for($i = 0;$i < 3;$i++)
gem. A imagem pode ser mostrada na tela ou salva em @imageline($imagem,rand(0,99),rand
arquivo. Para isto, deve-se utilizar uma das seguintes (0,99),rand(0,99),rand(0,99),$verdeescuro);
for($i = 0;$i < 3;$i++)
funções, dependendo do formato final desejado: @imageline($imagem,rand(0,99),rand
imagegif(); (0,99),rand(0,99),rand(0,99),$verde);
// Escrever palavra-passe aleatória
imagejpeg(); for($i = 0;$i < 4;$i++)
@imagestring($imagem,6,32 + 10 * $i,32 +
imagepng(); rand(-5,5),rand(1,9),$azulescuro);
// Rotacionar a imagem
imagewbmp(); $imagem = @imagerotate($imagem,90,$branco);
imagexbm(). // Finalização da imagem
@imagepng($imagem);
Todas as funções listadas acima requerem como ar- ?>
gumento o identificador de recurso de imagem e um
argumento opcional do nome do arquivo. Se este argu-
mento for passado, a imagem será salva no arquivo es-
pecificado, caso contrário, a imagem será enviada ao
www.phpmagazine.com.br