quinta-feira, 20 de dezembro de 2007

URLs Amigáveis com Apache e PHP

Nesse artigo veremos como implementar URL’s mais amigáveis para as pessoas acessarem nosso site, sem o “trauma” de ver “códigos esquisitos” na barra de endereço do browser.

Outra motivação de implementarmos as URL’s amigáveis em nossos sites, é para sermos rastreáveis por spiders que normalmente ignoram arquivos com extensão que denotam programas que retornam conteúdo variável.

Essa técnica que passaremos aqui ajuda a destacar nosso site em sites de busca como o Google ou Yahoo e é uma ferramenta da SEO (Search Engine Optimization).

Se você não está entendendo direito o que estou dizendo vamos para um exemplo. Imagine que tenhamos um site que mostra artigos e informações sobre seus autores. Sem a utilização das URL’s amigáveis, poderíamos acessar um artigo da seguinte maneira:

http://www.sitedeartigos.com.br/artigo.php?id=123

Agora, utilizando a técnica que será passada por esse artigo, poderíamos acessar nosso site da seguinte maneira:

http://www.sitedeartigos.com.br/artigo/123

A URL acima é muito mais interessante de se ler do que a primeira URL informada. Creio que com esse simples exemplo, podemos entender qual o benefício que obteremos após aprendermos essa técnica.


Configuração do Apache
Como tudo na nossa área de programação, há várias
maneiras de se atingir um mesmo objetivo. Utilizarei uma técnica que desviará
qualquer chamada para o arquivo index.php que será o nosso manipulador de
requisições. Portanto, tudo passará pelo index.php e ele será o responsável por
carregar os arquivos corretamente.

A versão do Apache que estou utilizando é a 2.2.4.


1) Vá até o arquivo httpd.conf e descomente a linha
# LoadModule rewrite_module modules/mod_rewrite.so
Para descomentar, basta retirar o símbolo de cerquilha na frente da linha.
Essa alteração nos permitirá manipular as requisições, redirecionando-as para o arquivo index.php

2) Ainda no arquivo httpd.conf, localize a linha onde há a diretiva <Directory /> e garanta que tenha a seguinte linha dentro da diretiva: AllowOverride All.
Essa alteração nos permitirá utilizar o arquivo
.htaccess.

3)Reinicie o serviço do Apache


Configuração do arquivo .htaccess
Para nosso exemplo, vamos assumir que o site será testado dentro do diretório thiagomp que por sua vez tem o diretório teste.
Dentro do diretório teste ficará nossos arquivos PHP, inclusive o arquivo
index.php.
Portanto, nossa URL base seria http://localhost/thiagomp/teste.
Para funcionar o esquema, crie um arquivo chamado .htaccess (repare que há um ponto antes do nome do arquivo...) com o seguinte conteúdo:

RewriteEngine on
RewriteRule .* index.php
php_flag magic_quotes_gpc off
php_flag register_globals off

Repare que ligamos o motor de reescrita com a primeira linha e depois implementamos a regra de redirecionamento. A regra é bem simples: qualquer coisa que for informada, deve ser redirecionada para o arquivo index.php.

As outras duas opções nem seriam tão necessárias, mas são ótimas para garantir segurança e a sanidade de nossos códigos.

O arquivo .htaccess deve ser salvo dentro do diretório teste.


Arquivos para o teste
Abaixo será mostrado os arquivos utilizados para o testes com comentários. Tais arquivos foram testados com o PHP versão 5.2.4.

artigo.php

<?php
$idArtigo = isset($parameter['id']) ? $parameter['id'] : 0;
if(empty($idArtigo)){
  echo "<h2>Não foi selecionado o ID do artigo</h2>";
}else{
  echo "<h2>Mostra o artigo de ID $idArtigo</h2>";
}

autor.php
<?php
$idAutor = isset($parameter['id']) ? $parameter['id'] : 0;
if(empty($idAutor)){
  echo "<h2>Não foi selecionado o ID do autor</h2>";
}else{
  echo "<h2>Mostra informações do autor de ID $idAutor</h2>";
}


naoencontrada.php
<?php
echo "<h2>Página não encontrada</h2>";

index.php
<?php
/**
 * Recupera a URL solicitada e quebra cada parte dela.
 * Portanto, se a URL for algo do tipo http://localhost/thiagomp/teste/artigo/10 obteremos o seguinte array:
 * array(5) {
 *  [0]=>  string(0) ""
 *  [1]=>  string(6) "thiagomp"
 *  [2]=>  string(12) "teste"
 *  [3]=>  string(6) "artigo"
 *  [4]=>  string(1) "10"
 * }
 *
 * Com isso poderíamos convencionar que em nosso site, tudo o que vier depois da URL base, primeiro virá o nome do arquivo que vamos invocar e depois os parametros, sendo que primeiro parametro será sempre um ID
 */


$parts explode('/'$_SERVER['REQUEST_URI']);

/**
 * Esse trecho testa quantos diretórios há na URL solicitada. Dependendo da quantidade de diretórios passados, nosso programa ajustará os valores que serão procurados nas páginas invocadas
 */
if(count($parts) == 5){ // o usuário informou uma pagina e um ID
  $params array_slice($parts, -2);
  $pagina $params[0];
  $id $params[1];
}elseif(count($parts) == 4){ //o usuário informou apenas a pagina
  $params array_slice($parts, -1);
  $pagina $params[0];
  $id 0;
}else{ // nada foi informado
  $pagina "nenhuma";
  $id 0;
}

switch ($pagina){ //seleciona a página
  
case 'artigo'// implementamos o que queremos fazer quando uma determinada página for encontrada...
    $parameter[
'id'] = $id// configura o parametro que será recuperado na $pagina.php
    include("$pagina.php"); //... nesse caso vamos incluir o arquivo para execução
    break;
  case 'autor'
//idem ao artigo
    
$parameter[
'id'] = $id;
    include("$pagina.php");
    break;
  default: 
//caso a página solicitada não exista, mostraremos um erro
    
include('naoencontrada.php');
}


Depois de copiar os conteúdos e gravá-los em
arquivos, basta efetuarmos um teste colocando no browser a URL http://localhost/thiagomp/teste/artigo/10

Espero que esse artigo seja útil para lhe dar uma
noção sobre o funcionamento das URL’s amigáveis. Com certeza é um exemplo muito
simples, porém, para quem está iniciando, será muito bom para compreender o
conceito e continuar o desenvolvimento dos conhecimentos nessa área.

Caso algum erro ocorra com os arquivos ou tenha algo
para acrescentar, fique a vontade de comentar.

Até o próximo post.

domingo, 21 de outubro de 2007

Tempestade de poeira

Hoje o post não é nada sobre Tecnologia.
É para mostrar uma tempestade de poeira que chegou aqui em Ribeirão Preto.

Vejam as fotos e o vídeo abaixo:







Abraços e até o próximo post.

terça-feira, 25 de setembro de 2007

Problema de acentuação com PHP e JSON

Hoje estava trabalhando em uma aplicação com AJAX e me deparei um com problema de acentuação no retorno de alguns dados via JSON do MySQL.
Se em algum campo tiver a palavra "Éramos", por exemplo, ao executar um encode (utilizei a Services_JSON provida pelo PEAR), ele retornará algo como \u0072amos que será renderizado como "ramos".
Depois de googlar sobre o assunto, descobri uma maneira de evitar esse problema.
Considere que o código abaixo é um PHP que retorna dados no formato JSON

<?php
header('Content-type: application/json charset=iso-8859-1');

/*
* codigo para conexao no banco e enviar consulta
* ...
*/

while($row = fetch()){
array_walk($row, 'toUtf8');
$data[] = $row;
}

/*
* codigo para terminar de montar o array de retorno dos dados
*/

require_once('JSON.php');
$json = new Services_JSON();
echo
$json->encode($returnValue); // Instead of json_encode


function toUtf8(&$item, $key) {
$item = iconv("iso-8859-1","utf-8",$item);
}

O segredo está aqui:
$item = iconv("iso-8859-1","utf-8",$item);

O fato de converter todas strings para utf-8 utilizando a iconv, garantiu que meus dados fossem renderizados corretamente.

Por hoje é isso!
Abraços.

quarta-feira, 5 de setembro de 2007

Desenvolvimento para Linux

Após longos seis meses volto a postar no blog!
Não vou prometer nada, mas espero blogar mais.
Fui questionado sobre quais as ferramentas para desenvolvimento de software desktop para Linux. Quem fez pergunta era um programador Delphi.


Para quem trabalha com Delphi, existe o compilador freepascal e GNU Pascal Compiler.
Também tem o Lazarus que é uma IDE inspirada no Delphi.
Quem trabalha com Delphi normalmente utiliza o Firebird. O Firebird também pode
ser instalado no Linux.
Também tem o MySQL que é um banco de dados muito difundido e o PostgreSQL que é um banco menos difundido, porém poderoso.

Agora, se você está realmente querendo mudar, Java é a melhor opção de desenvolvimento para Linux, na minha opinião.
Tem um ótimo IDE free, o NetBeans, que se conecta em praticamente todos os databases, graças a arquitetura do JDBC de Java.

Outra ferramenta que vem ganhando bastante espaço em desenvolvimento desktop para Linux é o PHP-GTK. O PHP
é uma linguagem já muito utilizada para desenvolvimento web e com extensa gama de APIs para conexão nativa aos bancos de dados mais utilizados no mundo. Com essa extensão, ficou fácil o programador que já conhece PHP também desenvolver para desktop.

Não poderia deixar de citar o projeto MONO. Não o conheço muito, mas pelo que tenho lido, é uma ótima opção de desenvolvimento utilizando uma plataforma parecida com o .NET da Microsoft. O Sharp Develop é uma ótima IDE gratuita.
Seguindo essa linha, há o Real Basic, HBasic e Gambas, para programadores Visual Basic.
Certamente há mais opções como Python, QT, C, C++, Jython, Tcl/Tk , JRuby, entre outras.


Abraços e até o próximo post

quinta-feira, 1 de março de 2007

Delphi for PHP


Mais uma IDE para desenvolvimento disponível no mercado: Delphi for PHP.
A CodeGear, empresa criada pela Borland para dar continuidade aos produtos para desenvolvedores, adaptou o seu produto para o desenvolvimento de PHP. Eles já aceitam pedidos, mas entregarão o produto em março (não foi especificado o dia específico).
Não encontrei nada do site informando se haverá alguma versão para avaliação do produto, mas já enviei um email para eles perguntando sobre isso.

Fiquei muito feliz de saber dessa notícia, pois é uma empresa que desenvolve um produto amplamente conhecido como o Delphi (entre outros...) e demonstra a força que PHP tem exercido no mundo dos desenvolvedores.
A IDE foi devidamente adicionada a lista de editores de PHP que mantenho aqui no blog.

A ferramenta tem um preço sugerido de US$ 249,00.
Para os mais curiosos, existe um vídeo para ver a ferramenta em ação.

Abaixo mais um screeshot publicado no site da CodeGear.



Mais informações:
Notícia do lançamento do produto pela CodeGear (em inglês)
Info online (em português)

Abraços e até o próximo post.

terça-feira, 30 de janeiro de 2007

Zend Studio 5.5 e outras coisas

Estava lendo o blog do Yossi Leon (gerente de produto da Zend Technologies) e encontrei uma demonstração do Zend Studio 5.5 feita por ele mesmo.
O inglês dele não é dos melhores, mas não posso dizer nada, pois o meu ainda não é também!

Esses dias estive trabalhando numa classe simples para gerar xml's, estou colocando comentários nela e espero divulgá-la no phpclasses.org assim que terminar. Quando for publicada eu posto uma mensagem aqui.

Também estou trabalhando com C# desenvolvendo aplicativos para o Windows CE, num coletor de dados da empresa onde trabalho. Tem sido empolgante fazer progressos no desenvolvimento de aplicativos embarcados. Creio que profissionais desse tipo de software terão muito espaço, assim como os desenvolvedores de webaplicativos.

Juventude PIB Bebedouro

No fim de semana passado (dias 26, 27 e 28) fui a Bebedouro para visitar Família e amigos. Claro que não pude deixar de ir à PIB (Primeira Igreja Batista).
O pessoal do FP 378 (nome do ministério Jovem da PIB) iniciou o FP News! Ficou muito divertido e o vídeo está disponibilizado aí abaixo.



Quanto as publicações técnicas, vou ver se faço uma outra postagem ainda hoje.

Abraços e até o próximo post.