Do ASP ao PHP, vim para o lado negro da força!

Buenas povo! Faz tempo que não dedico meu tempo a escrever aqui no O Desenvolvedor, mas pretendo voltar ao ritmo anterior e com algumas mudanças (acompanhando as novidades na minha vida profissional).

Este é um post para apresentar algumas novidades que, de certa forma, guiarão minhas publicações por aqui. A primeira é que não vou dar continuidade aos meus estudos com .NET, e estou reduzindo meu trabalho com o ASP clássico. Isso não quer dizer que encerrarei meus posts sobre a linguagem, mas como estou me dedicando a estudar outras, possívelmente me focarei nelas.

Ah, preciso agradecer ao Leo Caseiro, que me disponibilizou um material excelente sobre .NET quando comecei a estudar!

Espero que este artigo ajude a orientar de alguma forma as pessoas que procuram pela manjada questão: "que linguagem é melhor estudar?"

Vamos aos motivos das minhas mudanças…

 

Porque "desistir" o ASP clássico?

Já fazia algum tempo que eu procurava evoluir, trocar de linguagem de programação, e por isso iniciei meus estudos em .NET. Vamos aos 3 4 motivos que me levaram a "pular fora":

Para aprender alguma coisa nova. E não estou dizendo que sei tudo do ASP, não mesmo. Mas mudar é bom, gosto de mudanças, aprender uma linguagem de programação nova é como começar a estudar um novo idioma, estimula o cérebro, tira noites de sono de uma forma positiva, anima!

Queria mudar porque o ASP está se tornando obsoleto (para muitos, já é) devido a migração para o .NET, que apresenta mais possibilidades e melhor desempenho (dizem, nunca testei realmente).

Comunidade de desenvolvedores muito pequena. Tudo bem que existe o Google, existem fóruns e até uma documentação razoável, mas nada comparado a PHP, por exemplo. Muitas vezes eu quebrava a cabeça para desenvolver determinada funcionalidade, sabendo que em outras linguagens uma centena de desenvolvedores já haviam desenvolvido isso e disponibilizado o código para uso, estudo e alterações.

Dinheiro. Grana. Eu pago licença para utilizar o Windows Server no meu servidor. Eu não consigo bons dll´s gratuitos para manipulação de imagem ou arquivos (pdf´s, planilhas, etc…). Quase tudo é pago, seguindo o "padrão" da tecnologia ASP.

 

Porque não o .NET?

Alguns dos motivos que me fizeram querer mudar do ASP continuam presentes na linguagem .NET, como por exemplo o custo.

A comunidade de desenvolvedores não ser muito grande (ou não gostar de colaborar com o mundo, indo contra a poderosa e adorada "interwebs").

Motivos pessoais: como eu comentei, estou de emprego novo, e por aqui o .Net não é utilizado (pelo menos até onde eu sei).

 

Porque escolhi o PHP?

Pra ser cool.

O primeiro motivo, obviamente, a linguagem aberta, gratuita. Vou economizar um dinheiro considerável por mês pelo simples fato de não precisar pagar licença do Windows no servidor. Isso será a longo prazo, somente depois que eu migrar meu sistema todo de Intranet para o PHP, que vai levar possivelmente mais do que seis meses…

Darth Vader

Para ficar do lado negro da força!*

 

Comunidade gigantesca de desenvovledores e melhor, que adoram compartilhar conhecimentos. A documentação é maravilhosa.

Linguagem ainda em desenvolvimento (agora o PHP 5, estou certo?), sem a necessidade de "extensões" como os dll´s que já me perturbaram no ASP.

Já tinha um conhecimento superficial sobre a linguagem, foi com ela me inseri no mundo do desenvolvimento criando meu primeiro blog e CMS, lá no meu tempo de guri…

Comecei a estudar loucamente MVC, nunca vi um framework gratuito e funcional para ASP, já me indicaram diversos (e aparentemente muito bons) para o PHP!

 

 

É isso… a partir de agora não se assustem se surgir por aqui alguns posts "PHP for dummies", e aceito sugestões de artigos também, viu?

 

 

* o título deste artigo é graças ao tweet do @cleiverrr, quando anunciei meus estudos com o PHP: "lol @gserrano está vindo pro lado negro da força! =D"

WordPress – listar usuários com um determinado perfil

Tenho quase certeza que essa não é a melhor forma (sem usar algum plugin) para listar todos os usuários cadastrados no seu blog/site com o WordPress de um determinado perfil, mas no caso em que a performance não é gargalo, não vi problemas:

  • faça um select na tabela de usuários, retornando todos os ids
  • percorra a lista de ids, retornando cada usuário relativo a esse id
  • faz um if para checar o user_level. É ele que define o perfil do usuário

O código seria:

<?php
            $aUsersID = $wpdb->get_col( $wpdb->prepare("SELECT $wpdb->users.ID FROM $wpdb->users ORDER BY %s ASC", ""));
            foreach ( $aUsersID as $iUserID ) :
                $user = get_userdata( $iUserID );
                if($user->user_level==2) { //2 é o user_level para contribuidor
                    //faz o que for necessário com o objeto $user
                }
            endforeach;
?>


 

Pelo que pude ver da estrutura da base do WordPress, que eu ainda estou conhecendo, há uma tabela wp_users que tem os usuários e uma outra, wp_usermeta, de metadados. Não entendi porque user_level não faz parte da wp_users pois está ligado diretamente ao usuário (será que nas primeiras versões não existia esse campo e depois criaram como um metadado?), mas certamente um inner join poderia resolver mais elegantemente essa questão.

Menu por ano e mês no WordPress

Mexendo no template de um blog do WordPress, precisei inserir aquele menu que tem os anos e os mêses desses anos para navegacão.

O código é simples:

<ul>
<?php
/**/
$years = $wpdb->get_col("SELECT DISTINCT YEAR(post_date) FROM $wpdb->posts WHERE post_status = "publish" AND post_type = "post" ORDER BY post_date DESC");
foreach($years as $year) :
?>
	<li><a href="<?php echo get_year_link($year); ?> "><?php echo $year; ?></a>
		<ul>
		<?	$months = $wpdb->get_col("SELECT DISTINCT MONTH(post_date) FROM $wpdb->posts WHERE post_status = "publish" AND post_type = "post" AND YEAR(post_date) = "".$year."" ORDER BY post_date DESC");
			foreach($months as $month) :
			?>
			<li><a href="<?php echo get_month_link($year, $month); ?>"><?php echo date( "F", mktime(0, 0, 0, $month) );?></a></li>
			<?php endforeach;?>
		</ul>
	</li>
<?php endforeach; ?>
</ul>

Com isso, será exibido um menu mais ou menos assim

2009

  • Maio
  • Abril
  • Março
  • Fevereiro
  • Janeiro

2008

  • Dezembro
  • Novembro

 

Criando miniatura de imagem no PHP com a GD

Nesse post eu havia falado, por cima, sobre a biblioteca GD, que possibilita a manipulação de imagens no PHP.

Uma das funcionalidades mais necessárias no PHP é criar uma thumbnail (miniatura) de uma imagem – e certamente é uma das primeiras coisas que alguém que começa a programar em PHP e precisa fazer com imagens, tem a necessidade.

Segue abaixo a função que eu uso – há anos. Não foi desenvovida por mim, achei ela no Google anos atrás, e sei que ela se popularizou!

 

<?php
   //imagem original
    $source_image = "spork.jpg";

   //altura máxima
    $thumb_height = 40;

    //prefixo da miniatura
    $thumb_prefix = "thumb_";

   //qualidade – vai de 0 a 100
    $quality = 100;

   //checa se imagem existe
   if(!file_exists($source_image)) {
      echo "Imagem não encontrada";
   } else {
       //tipos suportados (jpg, png, gif, etc…)
        $supported_types = array(1, 2, 3, 7);

        //retorna informações da imagem
        list($width_orig, $height_orig, $image_type) = getimagesize($source_image);

        //checa se é um tipo suportado
        if(!in_array($image_type, $supported_types)) {
            echo "Tipo não suportado de imagem: " . $image_type;
        }
        else
        {

           //nome da imagem
            $path_parts = pathinfo($source_image);
            $filename = $path_parts["filename"];

            //calcula as proporções
            $aspect_ratio = (float) $width_orig / $height_orig;

            //calcula a largura da thumb baseada na altura
            $thumb_width = round($thumb_height * $aspect_ratio);
 
            //detecta o tipo de arquivo
            $source = imagecreatefromstring(file_get_contents($source_image));

            //cria canvas
            $thumb = imagecreatetruecolor($thumb_width, $thumb_height);

            imagecopyresampled($thumb, $source, 0, 0, 0, 0, $thumb_width, $thumb_height, $width_orig, $height_orig);
           //destrói, para liberar memória
            imagedestroy($source);
 
            //cria thumb baseada no tipo da imagem
            switch ( $image_type )
            {
                case 1:
                    imagegif($im, $fileName);
                    $thumbnail = $thumb_prefix.$filename . ".gif";
                    break;

                case 2:
                    $thumbnail = $thumb_prefix.$filename . ".jpg";
                    imagejpeg($thumb, $thumbnail, $quality);
                    break;

                case 3:
                    imagepng($im, $fileName);
                    $thumbnail = $thumb_prefix.$filename . ".png";
                    break;

                case 7:
                    imagewbmp($im, $fileName);
                    $thumbnail = $thumb_prefix.$filename . ".bmp";
                    break;
            }
        }
    }
?>

Biblioteca GD: trabalhe com imagens no PHP

Com PHP é possível além de trabalhar com a saída (x)html ter manipulação de imagens. A biblioteca mais utilizada é a GD – http://br.php.net/gd

Por padrão ela já vem instalada desde a versão 4.3 do PHP, e com ela é possível desde criar imagens do 0, escrevendo textos, usando filtros de opacidade, até criar miniaturas de outras imagens ou, ainda mesclar as mesmas, criando mosaicos e afins, com saídas em formato jpg, png, e por aí vai. As possibilidades são infinitas, e ficam a disposição e necessidade de quem for implementar.

Abaixo segue o exemplo clássico de uso mais simples da biblioteca: criar uma imagem com largura e altura definida, com um texto no miolo dela.

<?php

function createImageWithText($width, $height, $txt) {

       //cria uma imagem com largura x altura definida pelo usuário
        $im = imagecreatetruecolor($width, $height);
        //aloca as cores para imagem
        $text_color = imagecolorallocate($im, 233, 14, 91);
        //escreve o texto na imagem
        imagestring($im, 1, 5, 5,  $txt, $text_color);
       
        //inicia buffer
        ob_start();
        // cria imagem de saída, formato jpeg, bom 85% de qualidade
        imagejpeg($im, NULL, 85);
        //captura saída para string
        $contents = ob_get_contents();
        //finaliza captura
        ob_end_clean();
        //libera memória
        imagedestroy($im);
        //escreve arquivo em disco, usando os comando básicos do PHP
        $fh = fopen("temp/img2.jpg", "w+" );
            fwrite( $fh, $contents );
        fclose( $fh );

   
    }

   createImageWithText(400, 200, "meu texto");

?>

Em breve farei outros posts a respeito!