URL Amigável – PHP e arquivo .htaccess

5 Comments

Simples mas bem eficiente, exemplo pratico de como usar url amigável em seu site!!…..

Crie um arquivo “.hatccess” no diretório raiz de seu site!.


<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php
</IfModule>

Toda e qualquer URL digitada, será direcionada para o seu arquivo “index.php”. Então agora, é só você tratar os parâmetros.

Se você usa uma URL do tipo:

www.site.com.br/index.php?pag=catalogo&id=1

Você pode deixar ela amigável:

www.site.com.br/catalogo/1

Para você pegar esses parâmentros da url amigável, pode se usar expressões regulares. No inicio de seu arquivo “index.php” coloque o código:


$aux = substr( $_SERVER['REQUEST_URI'], strlen('/'));
if( substr( $aux, -1) == '/'){
 $aux=substr( $aux, 0, -1);
}
$urlARRAY___ =explode( '/', $aux);

O que acontece aqui ?, Você está pegando sua url e separando dentro de um array, pela string de separaçao “/” (barra).

Se tiver (catalogo/1) então ele separa, “catalogo” e “1“, porque a / (barra) está definida como separador.

A sua url é: www.site.com.br/catalogo/1 . Então por causa do htaccess, ele será direcionado para o arquivo “index.php” e depois a url será recortada levando em consideração a / (barra) como separador:

$urlARRAY___[1] vai receber o valor “catalogo”

$urlARRAY___[2] vai receber o valor “1″

Pronto feito isso! é só vc trabalhar com os seus parâmentro…

Uma observação importante:

Usando esse exemplo de URL, você deve chamar arquivos de imagens, css, video, flash etc..com o caminho completo:

Se antes você usava:


<link rel="stylesheet" type="text/css" media="all" href="css/stylo.css" />

Agora você deve usar:


<link rel="stylesheet" type="text/css" media="all" href="http://www.site.com.br/css/stylo.css" />

Por causa do arquivo .htaccess em ação, você precisa arrumar esses caminhos para sua aplicação achar os arquivos corretamente.

GD2 – Criando Thumb para Imagens dinâmicamente

3 Comments

Nesse artigo, vamos trabalhar com a biblioteca GD2 do PHP, no qual conseguimos manipular imagens dinâmicamente.

Primeiramente para trabalhar com a GD2, você precisa habilitar antes:

  • Abra o arquivo de configuração do PHP em um editor de texto, o arquivo se chama “php.ini“. Depois procure pela linha:
;extension=php_gd2.dll 

Agora, tire “;” (ponto e virgula) da frente, a linha deve ficar assim:

extension=php_gd2.dll 

Salva o arquivo “php.ini” e reinicie seu php, para as nova configuração ser aplicada.

Esse (;) ponto e virgula, serve para comentar a linha, por isso você precisa tirar, para descomentar a linha e ativar a biblioteca. Caso essa linha não tenha o (;) , isso quer dizer que a sua biblioteca já estava habilidade“.

Agora com a GD2 ativa em seu ambiente virtual,  podemos trabalhar dinâmicamente as imagens.

O exemplo a seguir mostra como criar dinâmicamente uma Thumb (miniatura) de uma determinada imagem.

Classe: Class_Image.php


<?php

require_once "bmp_1.php";//SUPORTE A BMP
//CLASSE IMAGE
class Image{

 function Criar_thumb($path,$width) {
 //VERIFICA SE EXISTE $PATH
 if (!file_exists($path)) return THUMB_ERROR_IMAGE_NOT_FOUND;
 //DEFINE QUAL É O TIPO
 ereg ("(.*)\.([^.]+)$", $path, $partes);

 define("IMAGETYPE_JPEG", 1);
 define("IMAGETYPE_PNG",  2);
 define("IMAGETYPE_GIF",  3);
 define("IMAGETYPE_BMP",  4);
 define("IMAGETYPE_UNKNOWN",  -1);

 if     ($partes[2] == "jpg" || $partes[2] == "JPG")  $type = IMAGETYPE_JPEG;
 elseif ($partes[2] == "jpeg"|| $partes[2] == "JPEG") $type = IMAGETYPE_JPEG;
 elseif ($partes[2] == "png" || $partes[2] == "PNG")  $type = IMAGETYPE_PNG;
 elseif ($partes[2] == "gif" || $partes[2] == "GIF")  $type = IMAGETYPE_GIF;
 elseif ($partes[2] == "bmp" || $partes[2] == "BMP")  $type = IMAGETYPE_BMP;
 else return THUMB_ERROR_INVALID_IMAGE_TYPE;
 //CRIA A IMAGEM NA MEMORIA
 switch ($type) {
 case IMAGETYPE_JPEG:
 $img_origem = @imagecreatefromjpeg($path);
 break;
 case IMAGETYPE_PNG:
 $img_origem = @imagecreatefrompng($path);
 break;
 case IMAGETYPE_GIF:
 $img_origem = @imagecreatefromgif($path);
 break;
 case IMAGETYPE_BMP:
 $img_origem = imagecreatefrombmp($path);//GD NAO TEM SUPORTE ENTÃO USAMOS A FUNCAO;
 break;
 default:
 return THUMB_ERROR_INVALID_IMAGE_TYPE;
 }

 //PEGA DIMENSAO ORIGINAL E TIRA 80%
 if($img_origem){

 $origem_altura  = ImagesY($img_origem);
 $origem_largura = ImagesX($img_origem);

 $aprox=$width;

 $x = $origem_largura;
 $y = $origem_altura;
 if($x >= $y){
 if($x > $aprox)
 {
 $x1= (int)($x * ($aprox/$x));
 $y1= (int)($y * ($aprox/$x));
 } else {
 $x1 = $x;
 $y1 = $y;
 }
 } else {
 if($y > $aprox){
 $x1 = (int)($x * ($aprox/$y));
 $y1 = (int)($y * ($aprox/$y));
 } else {
 $x1 = $x;
 $y1 = $y;
 }
 }
 $x = $x1;
 $y = $y1;
 //CRIA A NOVA IMAGEM
 $img_final  = imagecreatetruecolor($x, $y);

 imagecopyresized($img_final, $img_origem, 0,0,0,0, $x+1, $y+1, $origem_largura, $origem_altura);

 } else { // Imagem "Processando..."

 $img_final = imagecreate(100, 60);
 $bg = imagecolorallocate($img_final, 255, 255, 255);
 $textcolor = imagecolorallocate($img_final, 0, 0, 255);
 imagestring($img_final, 2, 2, 20, "Processando...", $textcolor);

 }
 $img_thumb = $partes[1]."_th_.".$partes[2];

 //GRAVA A IMAGEM Q FOI CRIADA
 switch ($type) {
 case IMAGETYPE_JPEG:
 imagejpeg($img_final, $img_thumb, 100);
 break;
 case IMAGETYPE_PNG:
 imagepng($img_final, $img_thumb);
 break;
 case IMAGETYPE_GIF:
 imagegif($img_final, $img_thumb, 100);
 break;
 case IMAGETYPE_BMP:
 imagejpeg($img_final, $img_thumb);
 break;
 }
 //DEPOIS Q GRAVA, DELETA A IMAGEM DA MEMORIA
 if ($img_origem) @imagedestroy($img_origem);
 if ($img_final) @imagedestroy($img_final);

 return;
 }

}

?>

Para instânciar e executar a classe, você pode fazer da seguinte forma:

executa.php


<?php

require_once "Class_Image.php";

$image = new Image();

$image->Criar_thumb("imagem.jpg",100);

?>

O primeiro parametro, é a imagem em sí, e o segundo é o valor em pixel que a thumb vai ter. (Nesse caso ela terá aproximadamente 100px de largura)“.

Observação importante:

A GD2 não suporta imagens no formato BMP, por isso vamos usar um pacote “bmp_1.php”. (você vai perceber que estamos importando esse package na linha 3 da Class_Image.php).

Pode pegar esse package aqui. bmp_1.php

Veja o exemplo, estude a classe, e qualquer dúvida comente.

Valeu.

Expressões Regulares (compatíveis com o padrão POSIX) parte 1

2 Comments

Vamos falar um pouco sobre, expressões regulares no php.

São usadas para manipulações complexas de strings no PHP.

As funções suportas são:

  • ereg()
  • ereg_replace()
  • eregi()
  • eregi_replace()
  • split()
  • spliti()

Não precisa de nenhuma biblioteca externa. PHP usa expressões regulares compatíveis com o padrão POSIX.

Vou dividir esse artigo, em pequenas partes, nessa primeira vamos falar sobre 1 função:

(ereg()). Mas antes, alguns conceitos básicos.

Padrões individuais

.

Casa qualquer caractere, o ponto é tratado como um literal. Por exemplo.
a.c casa “abc” e assim por diante.

[]

Lista de caracteres. Casa uma ocorrência de qualquer caractere contido na lista.

Por exemplo. [abc] casa “a”,”b” ou “c”.

Podemos definir intervalos de caracteres: [a-z] casa qualquer caractere de “a” a ”z”,  e [0123456789] é igual a [0-9].

[^ ]

Lista negada de caracteres. Casa uma ocorrência de qualquer caractere não contido na lista. Por exemplo. [^abc] casa qualquer caractere que não seja “a”, “b” ou “c”, [^a-z] casa qualquer caractere que não esteja em caixa baixa.

Vamos à função:

ereg() – Casando expressões regulares.

Descrição:

ereg(string expressão, string variável, [array registros])

Verifica se a ‘variável’ casa com a expressão regular definida em “expressão” em modo (casa sensitive).
So for passado o terceiro parâmetro “registros”, a execução guardara os elementos resultantes na matriz “registros”.

Exemplo 1:


<?php
 //data no padrão ISO
 $data = "2010-04-18";
 ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $data, $registros);
echo $registros[3]."/".$registros[2]."/".$registros[1];
?>

Resultado na tela: 18/04/2010

Exemplo 2:


<?php
 $data = "18/04/2010";
 ereg ("([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})", $data, $registros);
 echo $registros[1]."-".$registros[2]."-".$registros[3];
?>

Resultado na tela: 2010-04-18

Você pode usar essa função para validar imagens que vem de um formulário.

Exemplo 3:

Temos um formulário simples, apontando para “acao.php” onde, vai pegar os dados do formulário com o método “post”.

gravar.php


<form name="form" id="form" method="post" action="acao.php?acao=gravar" enctype="multipart/form-data">
 Arquivo:
<input type="file" name="img" id="img"><br>
 <input id="limpar" type="reset" id="Entrar" value="limpar">
 <input id="gravar" type="submit" id="gravar" value="gravar">
</form>

acao.php


<?php
 if($_GET['acao'] == "gravar"):
 //PEGANDO A IMAGEM

 $string = $_FILES['img']['name'];

 ereg ("(.*)\.([^.]+)$", $string, $partes);

 echo "nome da imagem: ".$partes[1];
 echo "<br>";
 if($partes[2] == "jpg")echo "imagem do tipo jpg";
 if($partes[2] == "jpeg")echo "imagem do tipo jpeg";
 if($partes[2] == "png")echo "imagem do tipo png";
 if($partes[2] == "gif")echo "imagem do tipo gif";
 if($partes[2] == "bmp")echo "imagem do tipo bmp";
 endif;
?>

Ele pega a string , e separa as partes, baseando no caractere “.” ponto.
Exe:

“$string = imagem.jpg”
ereg ("(.*)\.([^.]+)$", $string, $partes);
$partes[1] = imagem
$partes[2] = jpg

Na próxima parte do artigo, vou explicar mais detalhadamente esse ultimo exemplo e colocar mais alguns. E vou falar das outras funções também.

Você pode ler mais: http://br.php.net/ereg

Valeu!