O que aprendemos com o Cala Boca Galvão

Filed Under (Diversão e Cia., Humor, Internet, Marketing Viral, Negócios, Web Marketing) by Alex P. Torres on 26-06-2010

Tagged Under : , , , ,

Esta semana circula a edição da Revista Veja que tem na sua capa o famoso viral que estourou no Twitter na semana passada, o CALA BOCA GALVÃO. A matéria mostra um panorama geral do Twitter, incluindo informações bastante curiosas, como a briga entre a CNN e o ator Ashton Kutcher pelo primeiro milhão de seguidores, a recente briga entre Rick Martin e Hugo Chavez, que tuitou que o cantor era chavista e foi desmentido, e um comentário meu, onde afirmo que 18% dos votos serão disputados na Internet nas eleições 2010.

Além disso, a matéria apresenta fatos interessantes sobre a ferramenta :

  • O Twitter já é a segunda maior rede social do planeta.
  • O Twitter já tem 150 milhões de usuários, e 190 milhões de visitas únicas por mês.
  • Todos os dias são 65 milhões de mensagens via Twitter.
  • Todos os dias são feitas 600 milhões de buscas no Twitter.
  • No Brasil o Twitter é a segunda maior rede social com 11 milhões de visitantes únicos, perdendo só para o Orkut.

Durante o sucesso do CALA BOCA GALVÃO, alguns dos meus seguidores no Twitter (@oclaudiotorres) pediram que eu comentasse sobre o assunto, e outros afirmaram que seria o Case do Ano em Marketing Viral.

Como sempre faço, decidi esperar um pouco para entender melhor o que de fato estaria acontecendo, para depois escrever um artigo mais relevante para meus leitores, com uma análise mais coerente.

Primeiro é preciso que se diga que a frase original Cala a boca, Galvão foi criada pelo Macaco Simão, do brilhante José Simão, que dispensa apresentações. Portanto já era um hit na comunicação jornalística e na boca do povo. Segundo é preciso ponderar que não houve um primeiro emissor, ou um gênio por trás da ação. Foi simplesmente a abertura da Copa do Mundo e, consequentemente, o início dos comentários do locutor da Globo Galvão Bueno, que dispararam a frase, e sua consequente repercussão no Twitter, por milhares de Internautas. Ao que me consta, foi no dia 10/06, o dia da abertura oficial da Copa do Mundo, que a frase CALA BOCA GALVÃO apareceu pela primeira vez no Trend Topics (lista do Twitter com os assuntos mais comentados).

Como já aconteceu, e vem acontecendo todos os dias, alguma frase sempre acaba no Trend Topics. O que de fato gerou a explosão, e o interesse mundial, é que em função da gigantesca audiência da Copa do Mundo e, particularmente, o imenso interesse dos brasileiros pelo futebol, fizeram que a frase aparece-se não no TTBr (o Trend Topics que mede só os assuntos discutidos no Brasil), mas no Trend Topics geral do Twitter. Imagine os americanos, lendo uma frase incompreensível em Inglês, aparecendo no Trend Topics no dia da abertura do Mundial.

É óbvio que a curiosidade sobre o significado da frase foi o motivo que levou os Twiteiros de todo mundo, e a imprensa americana, a se interessar pelo nosso CALA BOCA GALVÃO. A grande explosão ocorreu no dia 11 quando o Wall Street Journal publicou, em seu blog, matéria sobre o tema e o significado da frase.

Depois disso, um publicitário brasileiro, que ao que me consta mora nos Estados Unidos, postou o famoso vídeo no YouTube, com a campanha em defesa do pássaro Galvão, uma das explicações dadas de brincadeira pelos brasileiros para os americanos.

Mais uma vez, no dia 15, a frase CALA BOCA GALVÃO vai para o Trend Topics do Twitter, por causa da matéria publica pelo The New York Times explicando toda a história.

Assim, olhando toda a história, posso realmente comentar o que aprendemos com o CALA BOCA GALVÃO, em particular do ponto de vista do marketing digital, do uso da Internet para os negócios.

Em primeiro lugar, é fato notório, comprovado mais uma vez neste caso, que a impressa está ligada no Twitter de forma irreversível, e que assuntos que aparecem com relevância na rede passam a pautar muito jornais importantes. Isso mostra que o Twitter pode ser uma ferramenta de comunicação empresarial muito eficiente, principalmente se associada a um blog, o que dá mais profundidade aos textos. Os jornalistas estão, cada dia mais, ligados à Internet e ao Twitter, e a ferramenta passou a ser fundamental na assessoria de comunicação e nas relações públicas.

Em segundo lugar, o caso mostra a importância de estar monitorando as mídias sociais, e a repercussão que um ataque à sua marca ou a um candidato a eleição, pode atingir na rede. Não se trata de patrulhamento, mas da constatação que a Internet pode prejudicar uma marca, um produto ou uma pessoa em escala planetária, sem que ela sequer esteja presente na rede. Note que o Galvão Bueno não é um usuário intensivo das redes sociais, e que não houve nenhuma frase, comentário, post ou ação nas mídias sociais que gerasse o efeito indesejado do CALA BOCA GALVÃO. Foi uma ação espontânea de Internautas que estavam cansados do seu estilo de locução. Assim, estar presente nas mídias sociais e ficar atento aos ataques a sua marca ou nome é uma atividade prioritária para qualquer negócio, mesmo para um gigante das comunicações como a Rede Globo, ou uma figura popular como o locutor Galvão Bueno.

Em último lugar, cabe dizer que não se trata de marketing viral. É, sim, um bom exemplo sociológico sobre o efeito viral da rede. Mas não é marketing viral. É importante que as pessoas separem a comunicação na Internet, como um fenômeno social, do marketing digital, uma parte dessa comunicação voltada a produzir efeitos positivos nos negócios, nas marcas e nos produtos. Para ser marketing viral, deve haver uma mensagem que traga benefício à marca. Para isso, é preciso planejamento, difusão, controle e principalmente resultados. O caso do CALA BOCA GALVÃO não foi criado por alguém, nem planejado, e nem beneficia nenhuma marca. Ele tem na verdade um ataque a imagem do locutor Galvão Bueno, mas que pode ser considerada quase neutra, já que apenas mostra que alguns gostam dele e outros não, coisa comum em figuras de grande exposição na mídia. Criar uma grande barulho na rede através do efeito viral, não é marketing viral, mas somente uma constatação do efeito viral que, como todos já sabemos, está presente na rede.

O caso CALA BOCA GALVÂO nos mostra importantes lições sobre comunicação empresarial e sobre a importância de se ter planos de comunicação em momentos de crise nas redes sociais. Mostra também que o efeito viral é muito poderoso, o que valoriza o marketing viral, mas que alerta para a necessidade de se trabalhar ações virais muito bem planejadas, para evitar que o tiro saia pela culatra.

Em tempos de eleições e campanha política, o CALA BOCA GALVÃO reforça uma das frases que digo em todos os meus seminários: nenhum candidato vai ganhar as eleições por causa de Internet, mas muitas vão perder por causa dela.

Em tempo de negócios globalizados, o CALA BOCA GALVÃO reforça outra frase que repito sempre quando falo de marketing digital: Aja agora, porque amanhã é tarde.

Fonte: Imasters

Corrector de texto PHP – com Textarea

Filed Under (PHP, Programação) by Alex P. Torres on 22-05-2010

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

PHPWebCorrector é uma correção do texto desenvolvido por ProgramacionWeb.net que funciona em qualquer servidor web que tenha PHP, sem a necessidade de instalar qualquer biblioteca executável ou externo.

Esta correcção é escrito em PHP puro e permite a correção de um texto de um arquivo de dados com todas as palavras certas, com um tempo realmente incrível. Você pode ver um exemplo de quão bem ele funciona e baixar o arquivo de correção, que inclui o dicionário de espanhol, portugues e outros idiomas como estes.

Español
Catalan
Inglés
Portugués

Configurando o Corretor.
Para usar a magia, provavelmente terá que incluir no seu arquivo phpwebcorrect.php página PHP, então você pode usar as seguintes funções:


include 'phpwebcorrect/phpwebcorrect.php';

phpwc_init();
phpwc_boton_corregir('text2');
phpwc_boton_idioma('text2');
phpwc_textarea(500,200,'text2','ejemplo');

Veja um exemplo On-line
http://www.programacionweb.net/descargas/corrector-texto-php/ejemplo/

Ja chegou o mais novo Portal De Links da Internet

Filed Under (Eventos, Internet, Marketing Viral, Negócios, SEO, Web Marketing) by Alex P. Torres on 18-04-2010

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

Neste Mês esta nascendo o portal de Links da Amixel.
direcionado para todo tipo de links da Internet de Interesse geral, o portal de links esta baseando na metodologia de SEO para ajudar a ser achado os melhores links da internet , como tutoriais, apostilas, downloads, musicas etc..
tudo que for de interesse sera postado no portal.

Se você tiver um site ou portal e quiser colocar seus links no portal não duvide entre em contato pelo e-mail : suporte@amixel.com.br
Para você acessar este é o endereço: links.amixel.com

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…