Otima Classe para integrar um template em seu sistema

Filed Under (PHP, Programação) by Alex P. Torres on 30-11-2009

Tagged Under : , , , , , , ,

Uma das coisas que as pessoas mais me perguntam sobre PHP, é sobre o uso de Templates. Ou porque leram em algum livro ou fórum, ou seja porque eu comentei em aula.

Através do uso de templates, deixamos toda a estrutura visual (HTML ou XML, CSS, etc) separado da lógica de programação (código PHP), o que melhora e muito tanto a construção quanto a manutenção de sistemas web.

Existem vários mecanismo de template para PHP, e há um bom tempo no mercado. Mas qual indicar? Sem dúvida alguma, o Smarty é hoje o mais completo deles. Porém, o mais complexo, e de curva mais demorada. Ele é praticamente uma linguagem a parte do PHP.

Com base nisso, eu resolvi colocar criar um tutorial baseado em um mecanismo de template muito mais simples. Ou seja: este não é um tutorial sobre o Smarty. É sobre Templates, mas baseado uma biblioteca que eu mesmo desenvolvi, e uso em meus projetos (mesmo nos maiores deles), na qual gastei bastante tempo desenvolvendo e melhorando, sempre com o foco principal na facilidade de uso.

Mas quase todos os conceitos vistos neste tutorial se aplicam a maioria das classes de Template existentes em PHP, portanto, se você entender as idéias explicadas aqui, poderá usar seu mecanismo de Templates favorito.

Para criar esta biblioteca (eu uso templates há muitos anos, quando só existia a PHPLib), eu estudei vários mecanismos de templates (PHPLib, Sigma, etc), portanto não estou “reinventando a roda”, apenas “me apoiei no ombro de gigantes” para criar algo muito mais fácil de usar, que atendesse minhas necessidades e da empresa que eu trabalhava na época. De fato, atualmente muita gente usa esta biblioteca.

Eu inclusive traduzi os comentários dos métodos/funções públicos para facilitar. Você verá que será preciso entender apenas duas idéias básicas: variáveis e blocos.

Então, vamos lá.

LINK: site do desenvolvedor

Top 100 de Ferramentas de Segurança Open Source

Filed Under (Internet, Programação) by Alex P. Torres on 23-11-2009

Tagged Under : , , , , , ,

esta listagem foi feita pelo reconhecido Jeromie Jackson, consultor de segurança em informática,

1
Stockade Virtual Appliance with Snort, BASE, Inprotect, CACTI, NTOP & Others
2

Nessus

Open source vulnerability assessment tool
3
Snort Intrusion Detection (IDS) tool
4
Wireshark TCP/IP Sniffer- AKA Ethereal
5

WebScarab

Analyze applications that communicate using the HTTP and HTTPS protocols
6
Wikto Web server assessment tool
7
BackTrack Penetration Testing live Linux distribution
8
Netcat The network Swiss army knife
9
Metasploit Framework Comprehensive hacking framework
10
Sysinternals Collection of windows utilities
11
Paros proxy Web application proxy
12
Enum Enumerate Windows information
13
P0F v2 Passive OS identification tool
14
IPPersonality Masquerade IP Stack
15
SLAN Freeware VPN utility
16
IKE Crack IKE/IPSEC cracking utility
17
ASLEAP LEAP cracking tool
18
Karma Wireless client assessment tool- dangerous
19
WEPCrack WEP cracking tool
20
Wellenreiter Wireless scanning application
21

SiteDigger

Great Google hacking tool
22
Several DDOS Tools Distributed Denial of Service(DDOS) tools
23
Achilles Web Proxy Tool
24
Firefox Web Developer Tool Manual web assessment
25
Scoopy Virtual Machine Identification tool
26
WebGoat Learning tool for web application pentests
27
FlawFinder Source code security analyzer
28
ITS4 Source code security analyzer
29
Slint

Source code security analyzer

30
PwDump3 Dumps Windows 2000 & NT passwords
31
Loki ICMP covert channel tool
32
Zodiac DNS testing tool
33
Hunt TCP hijacking tool
34
SniffIT Curses-Based sniffing tool
35
CactiEZ Network traffic analysis ISO
36
Inprotect Web-based Nessus administration tool
37
OSSIM Security Information Management (SIM)
38
Nemesis Command-Line network packet manipulation tool
39
NetDude TCPDump manipulation tool
40
TTY Watcher Terminal session hijacking
41
Stegdetect Detects stego-hidden data
42
Hydan Embeds data within x86 applications
43
S-Tools Embeds data within a BMP, GIF, & WAV Files
44
Nushu Passive covert channel tool
45
Ptunnel Transmit data across ICMP
46
Covert_TCP Transmit data over IP Header fields
47
THC-PBX Hacker PBX Hacking/Auditing Utility
48
THC-Scan Wardialer
49
Syslog-NG MySQL Syslog Service
50

WinZapper

Edit WinNT 4 & Win2000 log files
51
Rootkit Detective Rootkit identification tool
52
Rootkit Releaver Rootkit identification tool
53
RootKit Hunter Rootkit identification tool
54

Chkrootkit

Rootkit identification tool
55
LKM Linux Kernal Rootkit
56
TCPView Network traffic monitoring tool
57
NMAP Network mapping tool
58
Ollydbg Windows unpacker
59
UPX Windows packing application
60
Burneye Linux ELF encryption tool
61

SilkRpoe 2000

GUI-Based packer/wrapper
62
EliteWrap Backdoor wrapper tool
63
SubSeven

Remote-Control backdoor tool

64
MegaSecurity Site stores thousands of trojan horse backdoors
65
Netbus

Backdoor for Windows

66
Back Orfice 2000 Windows network administration tool
67
Tini Backdoor listener similar to Netcat
68

MBSA

Microsoft Baseline Security Analyzer
69
OpenVPN SSL VPN solution
70
Sguil An Analyst Console for network security/log Monitoring
71
Honeyd Create your own honeypot
72
Brutus Brute-force authentication cracker
73
cheops / cheops-ng Maps local or remote networks and identifies OS of machines
74
ClamAV A GPL anti-virus toolkit for UNIX
75
Fragroute/Fragrouter Intrusion detection evasion toolkit
76
Arpwatch Monitor ethernet/IP address pairings and can detect ARP Spoofing
77
Angry IP Scanner Windows port scanner
78
Firewalk Advanced traceroute
79
RainbowCrack Password Hash Cracker
80
EtherApe EtherApe is a graphical network monitor for Unix
81
WebInspect Web application scanner
82
Tripwire File integrity checker
83
Ntop Network traffic usage monitor
84
Sam Spade Windows network query tool
85
Scapy Interactive packet manipulation tool
86
Superscan A Windows-only port scanner
87
Airsnort 802.11 WEP Encryption Cracking Tool
88
Aircrack WEP/WPA cracking tool
89
NetStumbler Windows 802.11 Sniffer
90
Dsniff A suite of powerful network auditing and penetration-testing tools
91
John the Ripper Multi-platform password hash cracker
92
BASE The Basic Analysis and Security Engine- used to manage IDS data
93
Kismet Wireless sniffing tool
94

THC Hydra

Network authentication cracker
95
Nikto Web scanner
96
Tcpdump TCP/IP analysis tool
97

L0phtcrack

Windows password auditing and recovery application
98

Reverse WWW Shell

Shell access across port 80
99
THC-SecureDelete Ensure deleted files are unrecoverable
100
THC-AMAP Application mapping tool

Resultados de busca do Google no seu site

Filed Under (PHP, Programação) by Alex P. Torres on 23-11-2009

Tagged Under : , , , , , , , , , , ,

Aprenda usar a API do Google para fazer buscas atraves de seu site.
esta classe foi desenvolvida por Thiago Belem

Eu somente utilizei e gostei como funciona muito bom..


<?php

/**
 * API de busca do Google
 *
 * @author   Thiago Belem (<a href="mailto:contato@thiagobelem.net">contato@thiagobelem.net</a>)
 * @link   <a href="http://thiagobelem.net/blog/">http://thiagobelem.net/blog/</a>
 * @version   1.1
 */
class googleSearchAPI {
 protected $url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=large&start=%s&q=%s';
 var $resultado, $pagina, $keywords;

 function __construct() {
  if (!function_exists('curl_init')) {
   trigger_error('A biblioteca cURL não está instalada!');
   return false;
  }
  if (!function_exists('json_decode')) {
   trigger_error('A biblioteca para manipulação de JSON não está instalada!');
   return false;
  }
 }

 /**
  * Pega o resultado HTTP de uma URL
  */
 protected function httpRequest($url) {
  $cURL = curl_init($url);
  curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($cURL, CURLOPT_FOLLOWLOCATION, true);
  $resultado = curl_exec($cURL);
  $resposta = curl_getinfo($cURL, CURLINFO_HTTP_CODE);
  curl_close($cURL);
  return $resultado;
 }

 /**
  * Executa a busca
  */
 function busca($keywords = null, $pagina = 1, $site = null) {
  $keywords = (is_null($keywords)) ? $this->keywords : $keywords;
  $start = (is_null($pagina)) ? 0 : (($pagina - 1) * 8);

  $bkeywords = (!is_null($site)) ? ($keywords . ' site:' . $site) : $keywords;

  $url = sprintf($this->url, (int)$start, urlencode($bkeywords));
  $resultado = $this->httpRequest($url);
  if (!$resultado) {
   trigger_error('Não foi possível acessar a URL de busca:<br />' . $url);
   return false;
  }
  $resultado = json_decode($resultado, true);

  $this->resultado = $resultado['responseData'];
  $this->keywords = $keywords;
  $this->pagina = $pagina;
 }

 /**
  * Pega os resultados encontrados
  */
 function resultadoSites() {
  return $this->resultado['results'];
 }

 /**
  * Pega o total de sites encontrados
  */
 function resultadoTotal() {
  return $this->resultado['cursor']['estimatedResultCount'];
 }
}

?>

Exemplo de Uso nesta pagina você modifica a seu gosto.


<?php

$keywords = 'Thiago Belem';
$pagina = (isset($_GET['p'])) ? (int)$_GET['p'] : 1;

$gs = new googleSearchAPI();
//$gs->busca($keywords, $pagina); // Busca normal
$gs->busca($keywords, $pagina, 'thiagobelem.net'); // Busca em um site específico

$total = $gs->resultadoTotal();

echo "Total estimado de resultados: " . $total;
echo "<br />";
echo "<h2>Pagina: " . $gs->pagina . "</h2>";

foreach ($gs->resultadoSites() as $item) {
 echo "<h3>" . $item['title'] . "</h3>";
 echo "<p>" . $item['content'] . "</p>";
 echo '<a href="' . $item['unescapedUrl'] . '">' . $item['visibleUrl'] . "</a>";
}

echo "<hr />";

// Paginadores:

if (($pagina - 5) > 1) echo '...&nbsp;';

for ($n = 1; $n <= ceil($total / 8); $n++) {
 if (($n < ($pagina - 5)) OR ($n > ($pagina + 5))) continue;
 echo '<a href="?q='.$keywords.'&p='.$n.'">'.$n.'</a>&nbsp;';
}

if (($pagina + 5) < $total) echo '...';

?>

Infelizmente essa API de busca do Google só retorna 8 resultados por vez (uma limitação do Google mesmo)… mas você tem acesso a todas as páginas que precisar.. É só mudar o valor da variável $pagina (do exemplo).

Script Corretor de texto para seu site ou sistema

Filed Under (PHP, Programação) by Alex P. Torres on 18-11-2009

Tagged Under : , , , , , , , , , ,

PHPWebCorrector é um corretor  de texto desenvolvido por ProgramacionWeb.net que trabalha em qualquer servidor web que tenha php sem necessidade de instalar nenhum biblioteca.

Disponivel em Ingles, Catalan, e Portugues da Portugal

para mais informação acesse aqui:

http://www.programacionweb.net/descargas/corrector-texto-php/descargar/

Gerador de miniaturas que gravam em seu servidor ( Thumbnails )

Filed Under (PHP, Programação) by Alex P. Torres on 17-11-2009

Tagged Under : , , , , , , , , , , ,

icone_jpeg

gerador de miniaturas no codigo esta o autor e on tutorial bem simples.


<?php

/***
script que gera efetua download de imagens e gera miniaturas

Se miniatura nao existir, gera a miniatura
Apos ou se a miniatura ja existir, redireciona o usuario para a imagem em cache

autor: Roberto Berto darkelder@php.net
licença: GPL v2

Caracteristicas:
- gera miniaturas JPG ja do width e height desejado
- usa cache: o algoritmo de redimensionamento - que e' pesado - e' utilizado
apenas uma vez para cada imagem, sendo o resultado salvo em uma pasta

Exemplo:
- sua imagem em tamanho grande esta em http://www.seusite.com.br/fotos/foto_joao.jpg
o tamanho da mesma e' 640x480 pixels
- voce utiliza o seguinte codigo hoje:
<img src="/fotos/foto_joao.jpg" width="80" height="60" >

- agora utilize apenas da seguinte forma:
<img src="/miniatura.php?foto=/fotos/foto_joao.jpg&width=80" width="80" height="60" >

onde:
foto= url da foto
width= tamanho em pixels da largura a ser gerada
height= tamanho em pixels da altura a ser gerada

Configuracao:
1) altere a constante de PASTA e URL da PASTA abaixo para a pasta onde as miniaturas serao salvas

2) voce deve criar a pasta da constante pelo seu FTP sem nenhum arquivo dentro

3) pergunte ao seu provedor se a pasta tem permissao para gravar arquivos, dependendo da configuracao
do provedor e' necessario adicionar essa permissao na pasta. Geralmente isso pode ser feito por voce
mesmo no gerenciador de arquivos do seu painel de controle ou pelo seu programa de FTP com o chmod 0777
Na TeHospedo (http://tehospedo.com.br/), que e' o provedor onde trabalho, esse procedimento nao e' necessario nem no Windows
nem no Linux

**/

// essa variavel e' o seu dominio
define("URL_SITE", 'http://seusite.com.br'); # ----> nao ponha / no final

/******* configuracao para linux **********/
// em linux na TeHospedo apenas altere meuUserdeFTP:
define("PASTA_CACHE", '/home/meuuserdeFTP/public_html/miniaturas/');

/******* configuracao para windows ********/
// em windows na TeHospedo descomente a linha abaixo e mude apenas o meuDominio.com.br:
// mesmo em windows, nao use \ para separar diretorios, use / que e' mais facil
// se descomentar a linha abaixo comente o define anterior
//
// define("PASTA_CACHE", 'd:/domains/meuDominio.com.br/wwwroot/miniaturas/');

/******* configuracao tanto para windows quanto para linux ******/
// a URL abaixo deve corresponder ao endereco web da PASTA_CACHE
define('URL_CACHE', 'http://seusite.com.br/miniaturas'); # ---> nao ponha / no final

// se for uma grande quantidade de arquivos, e' interessante deixar true
// assim, ira separar as miniaturas em subpastas
define('USAR_MULTI_DIRETORIOS', true);

////////////////////// NAO EDITE ABAIXO /////////////////////////
////////////////////// NAO EDITE ABAIXO /////////////////////////
////////////////////// NAO EDITE ABAIXO /////////////////////////
////////////////////// NAO EDITE ABAIXO /////////////////////////
////////////////////// NAO EDITE ABAIXO /////////////////////////

/******** tratamento de variaveis *********/
$url = URL_SITE . '/' . $_REQUEST['foto'];

$width = (int)$_REQUEST['width'];

$width = 143;

// nome dos arquivos que sera usado dentro da pasta de cache
$arquivo = sprintf("%s-%d.jpg",
  md5($url),
  $width
);

if (USAR_MULTI_DIRETORIOS == true) {
	// nome do arquivo com multiplos diretorios
	$arquivo_full = sprintf("%s/%s/%s",
	   substr($arquivo, 0, 2),
	   substr($arquivo, 2, 2),
	   $arquivo
	);
} else {
 	// nome do arquivo sem multiplos diretorios
	$arquivo_full = $arquivo;
}

// path e url do arquivo completa
$arquivo_path = sprintf("%s/%s", PASTA_CACHE, $arquivo_full);
$arquivo_path = str_replace("//", "/", $arquivo_path); // substitui // por /
$arquivo_url  = sprintf("%s/%s", URL_CACHE, $arquivo_full);
$arquivo_path_tmp = $arquivo_path . '.tmp';

/*

printf("full: %s\n", $arquivo_full);
printf("path: %s\n", $arquivo_path);
printf("url: %s\n", $arquivo_url);
*/

if (file_exists($arquivo_path)) { // arquivo existe, vamos apenas redirecionar para ele
	header(sprintf("Location: %s", $arquivo_url));
	exit;
}

// miniatura nao existe, vamos gerar!

// gerar subdiretorio se for usado este metodo
if (USAR_MULTI_DIRETORIOS == true) {
	$dir_level_1 = sprintf("%s/%s",
		PASTA_CACHE,
	        substr($arquivo, 0, 2)
	);

	$dir_level_2 = sprintf("%s/%s/%s",
		PASTA_CACHE,
	        substr($arquivo, 0, 2),
		substr($arquivo, 2, 2)
	);

	// subdiretorio nao existe, cria
	if (!file_exists($dir_level_1)) {
		mkdir($dir_level_1);
	}

	if (!file_exists($dir_level_2)) {
		mkdir($dir_level_2);
	}
}

// efetuar download da miniatura num arquivo tmp
$fp = fopen($arquivo_path_tmp, 'w');

// abre o arquivo
$dados = file_get_contents($url);
if ($dados === false) {
	die("nao posso abrir o arquivo\n\n");
}

fwrite($fp, $dados);

// gerar o thumb

$i = new imagethumbnail();
$i->open($arquivo_path_tmp); // coloque aqui o nome do arquivo original
$i->setX($width);
$i->imagejpeg($arquivo_path, 70);

unlink($arquivo_path_tmp);

if (file_exists($arquivo_path)) { // arquivo existe, vamos apenas redirecionar para ele
	header(sprintf("Location: %s", $arquivo_url));
	exit;
}

die("Algum erro ocorreu");

    class imagethumbnail {

        var $filename;
        var $x;
        var $y;
        var $image;
        var $thumbnail;

        function open($filename) {

            $this->filename = $filename;
            $imageinfo = array();
            $imageinfo = getimagesize($this->filename,$imageinfo);

            $this->old_x = $imageinfo[0];
            $this->old_y = $imageinfo[1];

            switch ($imageinfo[2]) {
                case "1": $this->image = imagecreatefromgif($this->filename); break;
                case "2": $this->image = imagecreatefromjpeg($this->filename); break;
                case "3": $this->image = imagecreatefrompng($this->filename); break;
            }

        }

        function setX($x="") {
            if (isset($x)) { $this->x = $x; }
            return $this->x;
        }

        function setY($y="") {
            if (isset($y)) { $this->y = $y; }
            return $this->y;
        }

        function generate() {

            if ($this->x > 0 and $this->y > 0) {
                $new_x = $this->x;
                $new_y = $this->y;
            } elseif ($this->x > 0 and $this->x != "") {
                $new_x = $this->x;
                $new_y = ($this->x/$this->old_x)*$this->old_y;
            } else {
                $new_x = ($this->y/$this->old_y)*$this->old_x;
                $new_y = $this->y;
            }

            $this->thumbnail = imagecreatetruecolor($new_x,$new_y);
            $white = imagecolorallocate($this->thumbnail,255,255,255);
            imagefill($this->thumbnail,0,0,$white);

            imagecopyresampled ( $this->thumbnail, $this->image, 0, 0, 0, 0, $new_x, $new_y, $this->old_x, $this->old_y);

        }

        function imagejpeg($filename="",$quality=100) {
            if (!isset($this->thumbnail)) { $this->generate(); }
            imagejpeg($this->thumbnail,$filename,$quality);
        }

    }

?>

Duvidas comente

<?php

/***
script que gera efetua download de imagens e gera miniaturas

Se miniatura nao existir, gera a miniatura
Apos ou se a miniatura ja existir, redireciona o usuario para a imagem em cache

autor: Roberto Berto darkelder@php.net
licença: GPL v2

Caracteristicas:
- gera miniaturas JPG ja do width e height desejado
- usa cache: o algoritmo de redimensionamento - que e' pesado - e' utilizado
apenas uma vez para cada imagem, sendo o resultado salvo em uma pasta

Exemplo:
- sua imagem em tamanho grande esta em http://www.seusite.com.br/fotos/foto_joao.jpg
o tamanho da mesma e' 640x480 pixels
- voce utiliza o seguinte codigo hoje:
<img src="/fotos/foto_joao.jpg" width="80" height="60" >

- agora utilize apenas da seguinte forma:
<img src="/miniatura.php?foto=/fotos/foto_joao.jpg&width=80" width="80" height="60" >

onde:
foto= url da foto
width= tamanho em pixels da largura a ser gerada
height= tamanho em pixels da altura a ser gerada

Configuracao:
1) altere a constante de PASTA e URL da PASTA abaixo para a pasta onde as miniaturas serao salvas

2) voce deve criar a pasta da constante pelo seu FTP sem nenhum arquivo dentro

3) pergunte ao seu provedor se a pasta tem permissao para gravar arquivos, dependendo da configuracao
do provedor e' necessario adicionar essa permissao na pasta. Geralmente isso pode ser feito por voce
mesmo no gerenciador de arquivos do seu painel de controle ou pelo seu programa de FTP com o chmod 0777
Na TeHospedo (http://tehospedo.com.br/), que e' o provedor onde trabalho, esse procedimento nao e' necessario nem no Windows
nem no Linux

**/

// essa variavel e' o seu dominio
define("URL_SITE", 'http://seusite.com.br'); # ----> nao ponha / no final

/******* configuracao para linux **********/
// em linux na TeHospedo apenas altere meuUserdeFTP:
define("PASTA_CACHE", '/home/meuuserdeFTP/public_html/miniaturas/'); 

/******* configuracao para windows ********/
// em windows na TeHospedo descomente a linha abaixo e mude apenas o meuDominio.com.br:
// mesmo em windows, nao use \ para separar diretorios, use / que e' mais facil
// se descomentar a linha abaixo comente o define anterior
//
// define("PASTA_CACHE", 'd:/domains/meuDominio.com.br/wwwroot/miniaturas/');  

/******* configuracao tanto para windows quanto para linux ******/
// a URL abaixo deve corresponder ao endereco web da PASTA_CACHE
define('URL_CACHE', 'http://seusite.com.br/miniaturas'); # ---> nao ponha / no final

// se for uma grande quantidade de arquivos, e' interessante deixar true
// assim, ira separar as miniaturas em subpastas
define('USAR_MULTI_DIRETORIOS', true);

////////////////////// NAO EDITE ABAIXO /////////////////////////
////////////////////// NAO EDITE ABAIXO /////////////////////////
////////////////////// NAO EDITE ABAIXO /////////////////////////
////////////////////// NAO EDITE ABAIXO /////////////////////////
////////////////////// NAO EDITE ABAIXO /////////////////////////

/******** tratamento de variaveis *********/
$url = URL_SITE . '/' . $_REQUEST['foto'];

$width = (int)$_REQUEST['width'];

$width = 143;

// nome dos arquivos que sera usado dentro da pasta de cache
$arquivo = sprintf("%s-%d.jpg",
  md5($url),
  $width
);

if (USAR_MULTI_DIRETORIOS == true) {
	// nome do arquivo com multiplos diretorios
	$arquivo_full = sprintf("%s/%s/%s",
	   substr($arquivo, 0, 2),
	   substr($arquivo, 2, 2),
	   $arquivo
	);
} else {
 	// nome do arquivo sem multiplos diretorios
	$arquivo_full = $arquivo;
}

// path e url do arquivo completa
$arquivo_path = sprintf("%s/%s", PASTA_CACHE, $arquivo_full);
$arquivo_path = str_replace("//", "/", $arquivo_path); // substitui // por /
$arquivo_url  = sprintf("%s/%s", URL_CACHE, $arquivo_full);
$arquivo_path_tmp = $arquivo_path . '.tmp';

/*

printf("full: %s\n", $arquivo_full);
printf("path: %s\n", $arquivo_path);
printf("url: %s\n", $arquivo_url);
*/

if (file_exists($arquivo_path)) { // arquivo existe, vamos apenas redirecionar para ele
	header(sprintf("Location: %s", $arquivo_url));
	exit;
}

// miniatura nao existe, vamos gerar!

// gerar subdiretorio se for usado este metodo
if (USAR_MULTI_DIRETORIOS == true) {
	$dir_level_1 = sprintf("%s/%s",
		PASTA_CACHE,
	        substr($arquivo, 0, 2)
	);

	$dir_level_2 = sprintf("%s/%s/%s",
		PASTA_CACHE,
	        substr($arquivo, 0, 2),
		substr($arquivo, 2, 2)
	);

	// subdiretorio nao existe, cria
	if (!file_exists($dir_level_1)) {
		mkdir($dir_level_1);
	}

	if (!file_exists($dir_level_2)) {
		mkdir($dir_level_2);
	}
}

// efetuar download da miniatura num arquivo tmp
$fp = fopen($arquivo_path_tmp, 'w');

// abre o arquivo
$dados = file_get_contents($url);
if ($dados === false) {
	die("nao posso abrir o arquivo\n\n");
}

fwrite($fp, $dados);

// gerar o thumb

$i = new imagethumbnail();
$i->open($arquivo_path_tmp); // coloque aqui o nome do arquivo original
$i->setX($width);
$i->imagejpeg($arquivo_path, 70);

unlink($arquivo_path_tmp);

if (file_exists($arquivo_path)) { // arquivo existe, vamos apenas redirecionar para ele
	header(sprintf("Location: %s", $arquivo_url));
	exit;
} 

die("Algum erro ocorreu");

    class imagethumbnail {

        var $filename;
        var $x;
        var $y;
        var $image;
        var $thumbnail;

        function open($filename) {

            $this->filename = $filename;
            $imageinfo = array();
            $imageinfo = getimagesize($this->filename,$imageinfo);

            $this->old_x = $imageinfo[0];
            $this->old_y = $imageinfo[1];

            switch ($imageinfo[2]) {
                case "1": $this->image = imagecreatefromgif($this->filename); break;
                case "2": $this->image = imagecreatefromjpeg($this->filename); break;
                case "3": $this->image = imagecreatefrompng($this->filename); break;
            }

        }

        function setX($x="") {
            if (isset($x)) { $this->x = $x; }
            return $this->x;
        }

        function setY($y="") {
            if (isset($y)) { $this->y = $y; }
            return $this->y;
        }

        function generate() {

            if ($this->x > 0 and $this->y > 0) {
                $new_x = $this->x;
                $new_y = $this->y;
            } elseif ($this->x > 0 and $this->x != "") {
                $new_x = $this->x;
                $new_y = ($this->x/$this->old_x)*$this->old_y;
            } else {
                $new_x = ($this->y/$this->old_y)*$this->old_x;
                $new_y = $this->y;
            }

            $this->thumbnail = imagecreatetruecolor($new_x,$new_y);
            $white = imagecolorallocate($this->thumbnail,255,255,255);
            imagefill($this->thumbnail,0,0,$white);

            imagecopyresampled ( $this->thumbnail, $this->image, 0, 0, 0, 0, $new_x, $new_y, $this->old_x, $this->old_y);

        }

        function imagejpeg($filename="",$quality=100) {
            if (!isset($this->thumbnail)) { $this->generate(); }
            imagejpeg($this->thumbnail,$filename,$quality);
        }

    }

?>

Redirecionar sites dependendo do IP do pais ou estado

Filed Under (PHP, Programação) by Alex P. Torres on 17-11-2009

Tagged Under : , , , , , , , , , ,

globo
Muitas veces você se pergunta como o Google faz ou o Yahoo, para redirecionar para seu Pais ?
é simples com a Classe em PHP  geoPlugin com esta classe você podera pégar valores como estes:

array (
  'geoplugin_city' => '',
  'geoplugin_region' => '',
  'geoplugin_areaCode' => '0',
  'geoplugin_dmaCode' => '0',
  'geoplugin_countryCode' => 'BR',
  'geoplugin_countryName' => 'Brazil',
  'geoplugin_continentCode' => 'SA',
  'geoplugin_latitude' => '-10',
  'geoplugin_longitude' => '-55',
  'geoplugin_currencyCode' => 'BRL',
  'geoplugin_currencySymbol' => 'R$',
  'geoplugin_currencyConverter' => 1.7130000335,
)

è muito util para quem trabalha com sites no Exterior ou quer
identificar seus usuarios que acessam.
como vocês vem o geoPlugin utiliza o seu proprio Webservice
no site deles vocês tem varios exemplos de como utilizar.
aqui eu vou ensinar como redirecinar um site utiliza a classe
geoPlugin e seu webservice.
aqui vai o codigo.

</pre>
<?php
require_once('geoplugin.class.php');
/// CHAMAMOS A CLASSE
$geoplugin = new geoPlugin();

 ///COMEÇA CLASSE
$geoplugin->locate();

 /// ESTE VALOR PEGA O IP DO USUARIO PARA USAR NA CLASSE
$ip= $geoplugin->ip ;

/// VERIFICA O CODIGO DO PAIS
$cod_pais = $geoplugin->countryCode ;

/// APARTIR DAQUI VERIFICA SI ALGUM VALOR CORRESPONDE
/// SE FOR "BR" REDIRECIONAR PARA SITE DO BRASIL
/// SE FOR "AR" REDIRECIONAR PARA O SITE DA ARGENTINA
if ($cod_pais=="BR"){
 /// SITE DO BRASIL
 $pag = "http://www.amixel.com.br/index.php";
}

if ($cod_pais=="AR"){
 //// SITE DA ARGENTINA
 $pag = "http://www.amixel.com.ar/index.php";
}

if ($cod_pais=="US"){
 /// SITE DE ESTADOS UNIDOS
 $pag = "http://www.amixel.com.ar/index.php";
}

if ($cod_pais=="PY"){
 /// SITE DE ´PARAGUAY
 $pag = "http://www.amixel.com.ar/index.php";
}

if ($cod_pais=="UY"){
 /// SITE DE URUGUAY
 $pag = "http://www.amixel.com.ar/index.php";
}

#if ($cod_pais=="BO"){
 /// SITE DE BOLOVIA
 #$pag = "http://www.SEUSITE.com/index.php";
#}

/// FAZ O REDIRECIONAMENTO
header("Location: $pag");

?>

a estava esquecendo para ficar mais facil Download Classe

Bom esse foi o codigo bem simples.
espero que tenham gostado si tiverem duvidas comente…