Arquivo da categoria 'php'

Manipular imagens usando PHP com Asido

Fazer manipulação de imagens com PHP não é fácil nem divertido. Com o Asido as tarefas para alterar arquivos de imagem, de diversas formas, é totalmente automatizada e fácil de se fazer.

Quem é desenvolvedor PHP e já teve que fazer/manutenir algum sistema que envolve manipulação/edição de imagens, sabe que esta não é uma tarefa muito fácil… Para dizer a verdade, é muito chato! ;-D

Justamente para tentar não passar por um perrengue de ter que escrever funções para mexer com arquivos de imagens, fui procurar na web alguma solução. E eu acabei encontrado uma ótima (e gratuita): Asido!

Como consta no próprio web site, Asido é uma solução em processamento de imagens PHP “conectável” a drivers para praticamente qualquer ambiente. Quer dizer, é uma classe feita especialmente para manipular/editar imagens com PHP.

Asido dá suporte às edições de imagens mais comuns e mais utilizadas pelos desenvolvedores, tais como:

  • Redimensionar;
  • Rotacionar;
  • Copiar;
  • Cortar;
  • Converter;
  • Passar para escala de cinza;
  • Inserir marca d’água.

O site oficial está recheado de exemplos, explicações, tutoriais, documentação e tudo o mais que se tem direito para se aprender a usar o Asido! Além disso, é possível encontrar alguns exemplos de como se usar a ferramenta no artigo sobre o Assido do Urbano’s Blog.

Adicionar artigo ao Rec6    Adicionar artigo ao Linkk    Adicionar artigo ao doMelhor    Adicionar artigo ao del.icio.us   Postar artigo no StumbleUpon!

Classe PHP para montar formulários

Post rápido só para dizer que encontrei uma classe PHP muito boa para montar formulários!

Vi essa classe no PHP Classes ; ela foi criada por Otavio Theiss, um brasuca que, pelo visto, é bom de serviço!

Nas descrição do próprio autor, esta classe é para

gerar formulários, podendo definir classe e estilos de CSS com opções para atribuir comandos de Javascript para tratar eventos do formulário e seus campos.

Adicionar artigo ao Rec6    Adicionar artigo ao Linkk    Adicionar artigo ao doMelhor    Adicionar artigo ao del.icio.us   Postar artigo no StumbleUpon!

Como pegar parte do conteúdo (dados) de outro site com PHP

Pegar parte do conteúdo de outro site foi a tarefa que tive que fazer. Pensei que seria bem fácil, mas as coisas não saíram exatamente como eu planejava… Felizmente, consegui! Aprenda, você, também, como coletar informações de outros sites na internet.

A missão: pegar parte do conteúdo de um site

Hoje, no trabalho, tive a missão de “puxar” alguns dados de um site para “enxertar” num trecho de um web site que estou ajudando a desenvolver. Quando a tarefa me foi passada, logo lembrei de uma ocasião em que um amigo fez a mesma coisa (e, na época, ele me explicou, mais ou menos, com o fez). Pensei que seria muito fácil realizar a tarefa, mas, na hora, “lembrei” que não sou tão bom quanto o Gevã… rsrs

O desespero era tanto que cheguei até a entrar em Orkut, para ver se encontrava alguma explicação mais elaborada (viu, Alanna?! :-/ )…

A solução: funções nativas do PHP e expressões regulares

Passei para pesquisas na web, procurando desesperadamente material de referência sobre expressões regulares (que, como verão, é um dos pilares para se conseguir pegar parte do conteúdo de outro site). Procura daqui, procura de lá, até bate-papo com o Gevã rolou para eu tentar entender melhor as tais expressões regulares. Até que, utilizando um pouco de “gambiarra”, consegui realizar meu objetivo.

A primeira coisa a se fazer, é pegar o conteúdo da página inteira que se quer “manipular”. Para tal, usa-se, por exemplo, a função file_get_contents(). Jogando o conteúdo do site numa variável, ficaria assim (vou fazer o exemplo com o mesmo site que tive que mexer):

1
$url = file_get_contents('http://www.bcb.gov.br/');

Pronto, agora a variável $url contém, em string, todo o conteúdo da página inicial do BCB.

Expressões regulares

Até aqui foi fácil; o difícil foi pegar somente o trecho da página que eu queria… Para isso, é preciso usar expressões regulares!

Caso você não saiba o que são expressões regulares, aí vai uma sucinta (e incompleta…) explicação de o que são expressões regulares, da Wikipédia:

Uma expressão regular, na Informática, define um padrão a ser usado para procurar ou substituir palavras ou grupos de palavras. É um meio preciso de se fazer buscas de determinadas porções de texto.

Com as expressões regulares é possível identificar trechos de palavras ou grupos de palavras que correspondem (”match“) a um determinado padrão (”pattern“), que é “regular”.

O PHP tem várias funções nativas para trabalhar com expressões regulares. Basta saber para o que cada uma serve e usar da meneira correta.

Bem, o próximo passo para resolução do problema é identificar o padrão que se quer extrair do site. No caso, eu precisei de uma tabela com algumas taxas cambiais (encontra-se à direita, no site do BCB). Observando o código fonte, vi que as informações estão em uma tabela (abordagem semanticamente correta!); além disso, esta tabela está envolta entre os comentários HTML “<!- - INICIO INDICADORES - ->” e “<!- - FIMINDICADORES - ->”. Isso é uma coisa boa, já que facilita bastante a “identificação do padrão”.

Explicando melhor: o padrão procurado, no caso, é tudo o que está entre os comentários HTML “<!- - INICIO INDICADORES - ->” e “<!- - FIMINDICADORES - ->”. Toda a tabela está aí, para a minha felicidade! :-)

Então, tudo o que é preciso fazer é utilizar uma função PHP (para o caso, escolhi a preg_match_all()) para procurar uma expressão regular dentro da variável $url, que contém toda a primeira página do site em que está a tabela.

Depois de muito tempo testando vááárias expressões regulares, cheguei à conclusão que faria uma pequena mutreta. Mas, antes, deixe-me mostrar como está o código até agora.

1
2
$url = file_get_contents('http://www.bcb.gov.br/');
preg_match_all('/ORES-->(.+)<!--/s', $url, $conteudo);

Explicando: o primeiro argumento da função, é o padrão que quero procurar; o segundo, é onde vou procurar; o terceiro, guarda em um array todas as ocorrências da expressão procurada. Para a maioria dos casos, talvez já estivesse bom, por aqui; entretanto, no problema que tive, ainda é preciso mais algumas linhas de código.

No momento, a variável $conteudo contém um array com as ocorrências encontradas. Usando um print_r(), descobri em qual posição, exatamente, o que eu procurava estava: $conteudo[0][0].

Fazendo uma “mutreta”

Para fazer a tal “mutreta”, jogo o conteúdo desta posição da matriz para uma outra variável (para facilitar a manipulação).

1
2
3
$url = file_get_contents('http://www.bcb.gov.br/');
preg_match_all('/ORES-->(.+)<!--/s', $url, $conteudo);
$exibir = $conteudo[0][0];

Havia trechos do que me foi retornado (ou seja, da tabela com as taxas cambiais) que eu não queria que aparecessem no site (como alguns links). Então, resolvi retirá-los através da função str_replace(), que substitui trechos de strings. É possível, como argumento, passar um array. Então, por enquanto e quase no fim, o código está assim:

1
2
3
4
5
$url = file_get_contents('http://www.bcb.gov.br/');
preg_match_all('/ORES-->(.+)<!--/s', $url, $conteudo);
$exibir = $conteudo[0][0];
$retirar = array('mais moedas','atas Copom','mais detalhes','ORES-->','<!--');
$exibir = str_replace($retirar, '', $exibir);

Ou seja: sempre que aparecer alguns dos itens do array $retirar em $exibir, será substituído por “” (nada…). Perceba que os últimos dois elementos do array são “poluições” desnecessárias, que vieram devido à minha preguiça de fazer uma expressão regular mais elaborada. :-)

Finalizando…

Depois disso, basta mandar exibir na tela o que “sobrou” do conteúdo retira da página inicial do site do BCB.

1
2
3
4
5
6
$url = file_get_contents('http://www.bcb.gov.br/');
preg_match_all('/ORES-->(.+)<!--/s', $url, $conteudo);
$exibir = $conteudo[0][0]</span>;
$retirar = array('mais moedas','atas Copom','mais detalhes','ORES-->','<!--');
$exibir = str_replace($retirar, '', $exibir);
echo $exibir;

E se o servidor não permite a função file_get_contents() ?

Há muitos servidores que, por motivos diversos (principalmente “segurança”), não permitem que se utilize a função file_get_contents(). Para esses casos, é possível colocar numa variável alguma página externa utilizando o seguinte código (depois você procura as explicações no manual oficial do PHP):


$ch = curl_init();
$timeout = 0;
curl_setopt($ch, CURLOPT_URL, ‘http://O_SITE_QUE_VOCE_QUER’);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$conteudo = curl_exec($ch);
curl_close($ch);

Então, o conteúdo da página “O_SITE_QUE_VOCE_QUER” estará na variável $conteudo.

Conclusão

Então, pessoal, para se retirar uma parte do conteúdo de um web site (utilizando PHP), os passos são:

  • Saber em qual página está o conteúdo que se precisa;
  • Jogar o conteúdo do site em uma variável;
  • Extrair o trecho que se quer utilizando expressões regulares;
  • Se preciso, cortar mais algumas coisas do resultado da ER;
  • Exibir em tela o resultado final.

O grande pulo do gato, neste caso, é saber mexer com expressões regulares; coisa que, sinto informar, só se aprende fazendo! E fazendo muito! Leia as referências no fim deste artigo e procure na internet mais material a respeito.

Uma outra coisa importante é o seguinte: tenha sempre em mente que, como você está pegando o conteúdo de um site, caso este altere sua estrutura, muito provavelmente será preciso alterar a expressão regular, também.

Fique ciente de uma coisa: se você, desenvolvedor web, ainda não precisou usar expressões regulares, pode ter certeza de que sua hora vai chegar!

Referências Nacionais

Expressões Regulares - Guia de Consulta Rápida
Este é o guia de Aurélio Marinho Jargas, excelente para se aprender expressões regulares e para se consultar nos momentos de aperto!

Expressões Regulares no PHP
Artigo do Viva o Linux, de Marcelo Santos Araujo, com uma introdução sobre expressões regulares.

Referências Internacionais

Regular-Expressions.info
Site especialmente dedicado às expressões regulares.

Regular Expression Library
Biblioteca virtual de expressões regulares.

RegExr
Para testar expressões regulares em tempo real!

Adicionar artigo ao Rec6    Adicionar artigo ao Linkk    Adicionar artigo ao doMelhor    Adicionar artigo ao del.icio.us   Postar artigo no StumbleUpon!

Ferramentas de Classes PHP 5

As Ferramentas de Classes PHP 5 auxiliam o desenvolvedor PHP na hora de programar, automatizando a criação de classes, propriedades e métodos de acesso.

O PHP 5, com a implementação total de recursos para a programação orientada a objetos (POO), fez os adeptos e amantes da linguagem muito satisfeitos! Entretanto, realmente é um trabalho “braçal” e “sacal” codificar as classes e métodos de acesso…

Pensando nisso, resolvi desenvolver um “kit de ferramentas” para ajudar os desenvolvedores PHP que, como eu, acham isso muito chato: são as Ferramentas de Classes PHP 5!

Por enquanto, elas só têm 2 módulos. Entretanto, pretendo atualizar freqüentemente para implementar novas funcionalidades e aprimorar as já existentes (olha a deixa para assinar o feed do blog!). Elas estão disponíveis nas ferramentas, aqui do blog.

Conto a colaboração de todos para indicar bugs e fazer sugestões!

Ah, quase esqueci de falar: quem quiser pode baixar a página que as ferramentas funcionam off line!

Abraços!

Adicionar artigo ao Rec6    Adicionar artigo ao Linkk    Adicionar artigo ao doMelhor    Adicionar artigo ao del.icio.us   Postar artigo no StumbleUpon!

Classe PHP para conexão com banco de dados MySQL

Disponibilizo, neste post, uma classe PHP para conexão com banco de dados MySQL.

Há alguns meses atrás, criei uma classe PHP para conexão com banco de dados MySQL. Nada muito complexo - chega a ser até bem simples, na verdade. Ela possui a capacidade de se conectar a 1 servidor por vez e foi feita utilizando orientação a objetos; com ela, pode-se fazer qualquer operação SQL, tal como insert, select, update, delete, etc.

O arquivo está bem comentado, a meu ver, e, creio, não haverá maiores problemas para entender seu funcionamento.

Tudo o que se deve fazer, para começar a utilizá-la, é preecher os valores de algumas constantes, logo no início do código. Opcionalmente, pode-se alterar as mensagens para cada tipo de erro.

Também, lembrar-se de referenciar corretamente o link de “voltar” para quando cada erro acontece.

Vamos a um exemplo de uso. Inicialmente, deve chamar a classe - vou considerar que ela está na mesma pasta, para o exemplo.

Aí, como vocês podem constarar na própria codificação, há um parâmetro a ser passado, no momento da chamada do método construtor. Esse parâmetro é a query que se quer fazer. Vamos fingir que temos uma tabela “usuarios” e queremos pegar o nome todos os cadastrados.

1
2
3
4
5
<?php
[...]
Conexao("SELECT nome FROM usuarios");
[...]
?>

Mas, dependendo da aplicação, é certo de não se limitar a somente uma query por página. Então, para cada consulta SQL que quisermos efetuar, não é preciso que se chame o método construtor. Conforme o manual oficial do PHP, a respeito da função “mysql_query”:

A conexão MySQL. se o identificador de conexão não for especificado, a ultima conexão aberta por mysql_connect() é assumida. Se uma conexão assim não for encontrada, ela irá tentar criar uma como se a função mysql_connect() fosse chamada sem argumentos. Se uma conexão não for encontrada ou estabelecida, um aviso de nível E_WARNING é gerado.

Então, depois da primeira chamada do método contrutor, caso se queira realizar outra query, basta chamar a função nativa mysql_query que, conforme as especificações oficiais, o script utilizará a última conexão aberta. Se, depois da consulta ao nome dos usuarios, quiséssemos saber cada idade, por exemplo, bastaria:

1
2
3
4
5
<?php
[...]
mysql_query("SELECT idade FROM usuarios");
[...]
?>

Então, o “mini-script” de exemplo ficaria:

1
2
3
4
5
6
7
8
9
<?php
[...]
require_once("Conexao.php");
[...]
Conexao("SELECT nome FROM usuarios");
[...]
mysql_query("SELECT idade FROM usuarios");
[...]
?>

Até hoje a classe PHP tem me servido bem, mas se alguém tiver algum conselho de como a classe pode ser melhorada, eu aceito! :-)

Adicionar artigo ao Rec6    Adicionar artigo ao Linkk    Adicionar artigo ao doMelhor    Adicionar artigo ao del.icio.us   Postar artigo no StumbleUpon!