Um par de semanas atrás eu encontrei a necessidade de utilizar um desses sistemas lá fora, para encurtar 's. URL Eu precisava de um endereço para enviar SMS e tive que tomar o mínimo possível para que o personagem para otimizar o texto da mensagem. Enquanto ele usou inteligência pensou em utilizar um sistema de numeração base36 para reduzir exponencialmente o número de caracteres no redirecionamento. Seria, portanto, um artigo sobre as vantagens dos diferentes sistemas de numeração decimal para determinados projectos, mas acabou por se tornar um projeto completo. Quando eu estava começando a explicação teórica eu pensei, por que não? Por que não mostrar como é rápido e fácil que você pode montar qualquer coisa na internet hoje?
Assim, após 15 horas de trabalho que apresento IraUrl.me , um encurtamento de URL's no estilo de TinyUrl ou Bit.ly . Custou-me mais para escrever o artigo para que isso aconteça, né engraçado?. Na verdade, como o pedido foi me preparando mais coisas foram acontecendo que seria interessante dar uma volta, de modo que o inicial de 8 horas ou assim, eles se tornaram 15.
A teoria
Para quem não sabe, um encurtamento de URLs é baseado em encontrar um nome de domínio mais curto possível e criar redirecionamentos HTTP 301 'URL s. outros O truque é otimizar os parâmetros que contribuem para a URL a ser tão curto quanto possível e não querem penalizar-nos a falta de domínio.
Como então eles encurtar 's URLs? Muito mais fácil do que parece que você e certamente você teria acontecido. Nós só temos um banco de dados onde continuamos a adicionar registros a uma tabela como eles estão criando a nova URL curta. Esta tabela possui um campo AutoNumeração, a chave da tabela, que para cada nova URL retorna um identificador único, que cada sentido poderia ser acessível da forma habitual:
http://dominio.com/1
http://dominio.com/1000000
Isso é exatamente a idéia, tudo que fazemos é alterar o identificador em questão de Base10 (o da nossa métrica) para base36 e base62 no meu caso. Outros sistemas de numeração mais conhecidos são o hexadecimal (Base 16 codificação) e base64 .
Ok, você tem falado em chinês. O que é isso? Vamos ver.
Em bases de numeração
O sistema decimal utiliza dez dígitos (daí o decimal
) Para formar todas as combinações possíveis de números. O que já sabemos, vamos lá. O binário utiliza dois dígitos (0 e 1), 16 hexadecimal (0 .. 9ABCDE), base36, como o próprio nome indica, trinta e seis (0 .. 9 .. a z) e usar o base62 62 dígitos incluir os números 0-9 e letras de A a Z, no caso (o 9 .. 0 .. zA .. Z). Aqui estão alguns exemplos:
| Binário | Decimal | Hexadecimal | Base36 | Base62 |
| 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 | 1 |
| 10 | 2 | 2 | 2 | 2 |
| 1010 | 10 | A | para | para |
| 1100100 | 100 | 64 | 2s | 1c |
| 1000000 | F4240 | lfls | 4c92 | |
| 10000000 | 989 680 | 5yc1s | FXsk |
Você pode ver rapidamente a medida que aumenta o número, maior a base vai lidar com menos dígitos. Os números, apesar de tudo, continuam entre todas as combinações posibles.Así dígitos, dependendo da base e do número de dígitos, o maior número representável representável seria:
| dígitos No. | Decimal | Base62 |
| 1 | 10 | 62 |
| 2 | 100 | 3844 |
| 3 | 1000 | 238 328 |
| 4 | 10 000 | 14776336 |
| 5 | 100 000 | 916132832 |
| 6 | 1000000 | 56800235584 |
| 7 | 10000000 | 3521614606208 |
| 8 | 100000000 | 218340105584896 |
| 9 | 1000000000 | 13537086546263552 |
Ou o que é o mesmo, a base (número de dígitos), 62, 09-10 setembro. Espero que você entenda a teoria. Como curiosidade:
Decimal: 10000000000000000000000
Base62: 36aHo5IWaicak
A pergunta agora seria, por Base62 e Base64, por exemplo, mais conhecido? Simples, porque para além dos 62 caracteres do Base62, Base64 usa dois adicionais, geralmente + e / = além, o que torna a cadeia Site não é seguro, ou seja, caracteres especiais devem ser traduzidos para não dar problemas de transporte, que estaria perdendo os benefícios da nossa criptografia curto. Os 62 caracteres usados em Base62 são completamente seguros, apenas letras (maiúsculas e minúsculas) e números.
Sabendo como funciona o sistema e vamos ver como criar nosso aplicativo. Obviamente que não dizê-lo passo a passo tudo porque senão demoraria muito mais tempo para escrever o artigo sobre como fazer o pedido, vou colocar somente as coisas que são mais importantes.
Para codificar / decodificar base62 Base10 estar usando essas bibliotecas:
- $dec , $base , $digits = FALSE ) { função dec2base ($ dezembro, $ base, $ dígitos = FALSE) (
- $base < 2 or $base > 256 ) { if ($ base <2 ou US $ base> 256) (
- )
- ; Valor $ = ";
- ! $digits ) { if (! $ dígitos) (
- $base ) ; Dígitos = $ dígitos ($ base);
- )
- $dec > $base – 1 ) { while ($> $ base dezembro - 1) (
- [ $rest ] . $value ; $ Valor = $ dígitos [] $ rest. $ Valor;
- )
- string ) $value ; (String de retorno) $ value;
- )
- $value , $base , $digits = FALSE ) { (Função $ value, $ base, $ dígitos base2dec = FALSE) (
- $base < 2 or $base > 256 ) { if ($ base <2 ou US $ base> 256) (
- )
- $base < 37 ) { if ($ base <37) (
- )
- ! $digits ) { if (! $ dígitos) (
- $base ) ; Dígitos = $ dígitos ($ base);
- )
- ; $ Dec = '0 ';
- $loop = 0 ; $loop < $size ; $loop ++ ) { for ($ loop = 0; $ loop <$ size, $ loop + +) (
- )
- string ) $dec ; (String de retorno) $ dezembro;
- )
- $base ) { dígitos de função ($ base) (
- $base < 64 ) { if ($ base <64) (
- ( '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_' , 0 , $base ) ; retorno substr ('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_ ', 0, $ base);
- { Else ()
- ( " \x 0 \x 1 \x 2 \x 3 \x 4 \x 5 \x 6 \x 7 \x 8 \x 9 \x a \x b \x c \x d \x e \x f \x 10 \x 11 \x 12 \x 13 \x 14 \x 15 \x 16 \x 17 \x 18 \x 19 \x 1a \x 1b \x 1c \x 1d \x 1e \x 1f ! \x 22# \x 24%&'()*+,-./0123456789:;<=> \x 3f@ABCDEFGHIJKLMNOPQRSTUVWXYZ[ \] ^_`abcdefghijklmnopqrstuvwxyz{|}~ \x 7f \x 80 \x 81 \x 82 \x 83 \x 84 \x 85 \x 86 \x 87 \x 88 \x 89 \x 8a \x 8b \x 8c \x 8d \x 8e \x 8f \x 90 \x 91 \x 92 \x 93 \x 94 \x 95 \x 96 \x 97 \x 98 \x 99 \x 9a \x 9b \x 9c \x 9d \x 9e \x 9f \x a0 \x a1 \x a2 \x a3 \x a4 \x a5 \x a6 \x a7 \x a8 \x a9 \x aa \x ab \x ac \x ad \x ae \x af \x b0 \x b1 \x b2 \x b3 \x b4 \x b5 \x b6 \x b7 \x b8 \x b9 \x ba \x bb \x bc \x bd \x be \x bf \x c0 \x c1 \x c2 \x c3 \x c4 \x c5 \x c6 \x c7 \x c8 \x c9 \x ca \x cb \x cc \x cd \x ce \x cf \x d0 \x d1 \x d2 \x d3 \x d4 \x d5 \x d6 \x d7 \x d8 \x d9 \x da \x db \x dc \x dd \x de \x df \x e0 \x e1 \x e2 \x e3 \x e4 \x e5 \x e6 \x e7 \x e8 \x e9 \x ea \x eb \x ec \x ed \x ee \x ef \x f0 \x f1 \x f2 \x f3 \x f4 \x f5 \x f6 \x f7 \x f8 \x f9 \x fa \x fb \x fc \x fd \x fe \x ff" , 0 , $base ) ; retorno substr ("\ x \ 0 x 1 x \ 2 \ 3 x \ x 4 \ x 5 x \ 6 \ x 7 x \ \ 8 x 9 \ X a \ X \ b X c \ x d x \ e \ x f \ x 10 \ x 11 \ x 12 \ x 13 \ x 14 \ x 15 \ x 16 \ x 17 \ x 18 \ x 19 \ x o 1 \ x 1B x \ 1c \ x 1d \ x 1e \ x 1f ! \ x 22 # \ x 24 %&'()*+,-./ :;<=> 0123456789 \ x 3f @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _ `abcdefghijklmnopqrstuvwxyz (|) ~ \ x 7f \ x 80 \ x 81 \ x 82 \ x 83 \ x 84 \ x 85 \ x 86 \ x 87 \ x 88 \ x 89 x \ o \ 8 x 8-B \ x 8c \ x 8d \ x 8e \ x 8f \ x 90 \ x 91 \ x 92 \ x 93 \ x 94 \ x 95 \ x 96 \ x 97 \ x 98 \ x 99 \ x o 9 \ x 9b \ x 9c \ x 9d \ x 9e \ x 9F \ x a0 x \ A1 \ x a2 \ x \ x A4 \ x a5 \ x a6 \ x a7 \ x a8 \ x a9 \ a3 x aa \ ab x x c \ x d \ x \ ae x af \ b0 x \ x B1 \ B2 x \ x \ b4 x \ x b5 \ b6 x \ x b7 \ x a8 \ x b9 b3 x ba \ bb x x bc \ bd \ x x ser \ bf x \ x c0 \ c1 x \ x c2 \ x c3 \ x \ x c5 \ x c6 \ x c7 \ x c8 \ x c9 \ ca c4 x \ \ x x cb cc cd \ \ x x \ ce cf x \ x d0 \ x d1 \ x d2 \ d3 x \ x d4 \ x d5 \ x d6 \ x d7 \ d8 x \ x d9 \ x dá \ x \ x db dc \ dd \ x x \ x \ df x e0 \ x e1 \ x e2 \ x e3 \ e4 x \ x e6 x \ x e7 \ x \ E8 x e9 \ EA x \ x EB ce x \ \ x ed x ee \ \ \ e5 x EF x \ f0 \ x f1 \ x f2 x \ f3 \ x f4 \ x f5 \ f7 \ f8 x \ x f9 \ x F \ x FB x k \ x \ x fd \ fé x \ x f6 x ff ", 0, $ base);
- )
- )
- $value ) { função base_encode ($ value) (
- base2dec ( $value , 256 ) , 62 ) ; retorno dec2base (base2dec ($ value, 256), 62);
- )
- $value ) { função base_decode ($ value) (
- base2dec ( $value , 62 ) , 256 ) ; retorno dec2base (base2dec ($ value, 62), 256);
- )
As duas últimas funções são utilizadas para as conversões.
Pacotes e bibliotecas:
- Free CSS Templates : Para um bom modelo xhtml para o nosso projeto
. - MaxMind GeoLite País : Para a geolocalização de um usuário através do seu IP.
- WURFL : Para identificar o navegador / terminal de um visitante para o seu User Agent . Eu complemento com Tera-WURFL para manter as informações em um banco de dados.
- Fusion Charts Free : Para gráficos de estatísticas.
- Clipboard Zero : Para copiar para o clipboard o url curto gerada sem que o usuário selecione, com apenas um clique.
- JqueryUI : Para o componente de navegação por abas.
- SafeBrowsing API do Google : Para verificar se uma URL é potencialmente perigosa.
- ADOdb (opcional) resumo: acesso ao banco de dados. Eu costumo usá-lo em todos os meus projetos, mas pode usar funções nativas do PHP.
- PHPExcel : Gerar Excel e PDF.
Além disso:
- Um domínio e hospedagem para hospedá-lo (6 €).
- PHP e MySQL (não é obrigatório, você pode fazer com qualquer outra tecnologia).
- 15 horas de seu tempo
.
Estrutura do Site
Qualquer respeitando web do projecto de auto-deve começar por descrever o que queremos mostrar aos nossos visitantes, temos de recolher todas as idéias, decidir sobre o interesse da verdade, pense em como eles vão estar disponíveis no frontend e terminam com um mapa do site que nos diz que o fluxo continuem a trabalhar. Esta será a nossa:
Quando um usuário vai para um dos nossos url's curto muito ser o encaminhamento do script request http internamente a um encarregado de fazer todo o processo, link.php no meu caso.
Para visualizar as estatísticas de uma URL Gostei do sistema de bit.ly , então copiá-lo
. Adicionar um "+" no final da URL curta, em vez de saltar para a direção de longo estatísticas mostram. Isto é feito, como no caso anterior, levando a um outro script internamente, stats.php.
Se o ID que você pretende usar para saltar para a url longa ou ver as estatísticas lá reenviar para index.php para mostrar uma mensagem de erro como "O URL não existe."
O domínio
Obviamente, temos de encontrar um nome de domínio tão breve quanto possível, a maioria já estão ocupadas, mas olhando e olhando TLD é estranho que você pode encontrar alguma coisa. Eu escolhi uma. Me porque tem um menor que um. Com
e não custa o que é a.
.
O banco de dados
Muito simples, apenas duas tabelas em um manter a URLs geradas e outras estatísticas de acesso a eles.
- CREATE TABLE IF NOT EXISTS `urls» (
- 20 ) NOT NULL auto_increment, `Id` bigint (20) NULL auto_increment, NÃO
- ) NOT NULL, Url `` varchar 500) NOT NULL (,
- ) NOT NULL, `` Varchar título (255) NOT NULL,
- ` ) PRIMARY KEY (`id`)
- MyISAM DEFAULT CHARSET= latin1; ) ENGINE = MyISAM DEFAULT CHARSET = latin1;
- CREATE TABLE IF NOT EXISTS `status` (
- 20 ) NOT NULL auto_increment, `Id` bigint (20) NULL auto_increment, NÃO
- ) NOT NULL, `` Idurl bigint (20) NOT NULL,
- ) NOT NULL, `` Codpais varchar (255) NOT NULL,
- ) NOT NULL, "Referer varchar (255) NOT NULL,
- ) NOT NULL, `` Hostreferer varchar (255) NOT NULL,
- ) NOT NULL, «Ua» varchar 255) NOT NULL (,
- »Horário» datetime NOT NULL,
- ) NOT NULL, «País», varchar 255) NOT NULL (,
- ) NOT NULL, «Marca» varchar 255) NOT NULL (,
- ) NOT NULL, «Modelo» varchar 255) NOT NULL (,
- ` ) , PRIMARY KEY (`id`)
- Idurl `` KEY (`idurl`, `hora`)
- MyISAM DEFAULT CHARSET= latin1; ) ENGINE = MyISAM DEFAULT CHARSET = latin1;
Configurando o Apache
Como já dissemos que queremos que, quando alguém vai a qualquer URL do nosso site tipo
http://tudominio.com/prueba3
É redirecionar internamente para link.php script que será responsável por processar a solicitação. Da mesma forma, se alguém visitar
http://tudominio.com/prueba3+
estatísticas mostrará que URL (se disponível). Configurar o Apache para ter em conta todas essas peculiaridades, mod_rewrite será nosso amigo para o fazer. No meu caso eu ter feito isso se a chamada não é um script php ou uma imagem ou um ficheiro ou css ou javascript tem o sinal "+" vai link.php. Se você tem o sinal mais vai stats.php.
RewriteEngine on RewriteCond% REQUEST_URI () !^/(.*). php $ RewriteCond% (REQUEST_URI)! ^ / \ /(.*)$ RewriteCond% CSS (REQUEST_URI)! ^ / Js \ /(.*)$ RewriteCond % (REQUEST_URI) !^/(.*) \ + $ RewriteCond% (REQUEST_URI)! ^ / images \ /(.*)$ RewriteRule ^(.+) link.php /? id = $ 1 RewriteCond% (REQUEST_URI) ^ /(.*) \ + $ RewriteRule ^(.+) stats.php /? id = $ 1 Imagem e design
Para o projeto, ou fazê-lo sozinho ou você é um criativo como eu neguei você baixar um modelo de superchula freecsstamplates.org e se adapta às suas necessidades, não entrar em detalhes.
Crie URLs curtas
O primeiro script da nossa aplicação. Uma forma simples, onde o usuário digita a URL que você quer encurtado e encurtou a apresentar ... integração do sistema de verificação de malware que explicou há poucos dias
.
- ; URLBase $ = "";
- [ 'url' ] ; = $ _POST [Url '$ url'];
- tente (
- . $url ; $ Url = "http://". $ Url;
- GoogleSafeBrowsing ( 'ABQIAAAAQYvf-54bCBMuGY20SeONVxQ236Mc_IjryQBl-W_Repaw3fCykA' , true ) ; $ Classe = GoogleSafeBrowsing novo ('ABQIAAAAQYvf-54bCBMuGY20SeONVxQ236Mc_IjryQBl-W_Repaw3fCykA', true);
- -> lookupsFor ( $url ) ; $ $ Nomalware => - lookupsFor classe ($ url);
- $nomalware ) { if ($ nomalware) (
- ; Htmltitle $ = "";
- $html != "" ) { if ($ html! = "") (
- '/(.*)< \/ title>/is' , $html , $matches ) ; preg_match ('/(.*)< \ title> / / é ', $ html, $ matches)
- )
- ; $ Query = "SELECT * FROM urls WHERE url = '$ url'";
- -> Execute ( $query ) ; R $ = $ conn -> Execute ($ query);
- $rs -> recordcount ( ) > 0 ) { if ($ rs -> RecordCount ()> 0) (
- -> fields [ 'id' ] ; Id = $ rs -> Campos "[id '];
- { Else ()
- ; $ Query = "INSERT INTO urls (url, title) VALUES (" $ url "," $ htmltitle ') ";
- -> Execute ( $query ) ; R $ = $ conn -> Execute ($ query);
- -> insert_id ( ) ; Id = $ conn -> INSERT_ID ();
- )
- $id ) ; Base = $ base_encode ($ id);
- . $base ; URLBase $ = "http://iraurl.me/. $ Base;
- { Else ()
- ; $ Err = 4;
- )
- exception $e ) { ) Catch (Exception $ e) (
- ; $ Err = 3;
- )
- )
Nós adicionamos um cheque de pequeno porte. Se a URL que você deseja adicionar já existe, voltamos a mesma URL curta, eu tomei essa decisão, você pode fazer o que quiser. Também obter o título final da URL de referência para a mesma questão de visual simples
.
Consulta ao longo urls
Temos o nosso URL curta, agora frente aos pedidos eventualmente. Lembre-se que o nosso Apache vai redirecionar a solicitação para link.php? Id = XXXX. Nossa atualizações de script, além disso, as estatísticas de visitas do url.
- [ 'id' ] ; BID = $ _GET "[id '];
- $idb ) +0 ; $ Id = base_decode ($ BID) 0;
- tente (
- ; $ Query = select * "de URLs onde id = $ id";
- -> Execute ( $query ) ; R $ = $ conn -> Execute ($ query);
- $rs -> recordcount ( ) > 0 ) { if ($ rs -> RecordCount ()> 0) (
- -> fields [ 'url' ] ; $ Url = $ rs -> Campos '[url'];
- [ 'HTTP_REFERER' ] ; @ = $ _SERVER [Referer 'HTTP_REFERER $'];
- [ 'HTTP_USER_AGENT' ] ; @ = $ _SERVER [Ua 'HTTP_USER_AGENT $'];
- [ 'REMOTE_ADDR' ] ; @ = $ _SERVER [IP 'REMOTE_ADDR $'];
- ; Hostreferer $ = "";
- preg_match ( '@^(?:http://)?([^/]+)@i' , $referer , $matches ) > 0 ) if ( preg_match (http://'@^(?: )?([^/]+) i ', $ referer, $ matches)> 0)
- [ 1 ] ; Hostreferer $ = $ matches [1];
- $_SERVER [ 'HTTP_USER_AGENT' ] ) ; Terminal getMarcaModelo $ = ($ 'HTTP_USER_AGENT' _SERVER []);
- [ 'marca' ] ; Flag = $ fim "tag ['];
- [ 'modelo' ] ; $ Modelo = $ fim "modelo ['];
- $ip ) ; $ Temp = getGeoCodeAndPais ($ ip);
- [ 'code' ] ; Codpais $ = $ temp ['Código'];
- [ 'pais' ] ; $ Country = $ temp ['País'];
- $ Query = "INSERT INTO stats (idurl, codpais, referer, ua, o tempo, o país, marca, modelo, hostreferer) VALUES
- ($ Id, '$ codpais', '$ referer', '$ ua', now () ', $ country', '$ marca', '$ modelo', '$ hostreferer') ";
- -> Execute ( $query ) ; Rs2 = $ conn -> Execute ($ query);
- saída ;
- { Else ()
- "Location: http://iraurl.me/index.php?err=1" ) ; header ("Location: http://iraurl.me/index.php?err=1");
- saída ;
- )
- exception $e ) { ) Catch (Exception $ e) (
- "Location: http://iraurl.me/index.php?err=2" ) ; header ("Location: http://iraurl.me/index.php?err=2");
- saída ;
- )
- )
- "Location: http://iraurl.me/index.php?err=1" ) ; header ("Location: http://iraurl.me/index.php?err=1");
Como você vê, se a URL não existe index.php redirecionar o usuário com uma mensagem de erro. Vamos precisar de duas funções adicionais, que retornam informações que no país de origem de IP e os dados do terminal do usuário (filme ou web). Não entrarei em detalhes sobre como instalar MaxMind GeoLite País ou WURFL / Tera-WURFL .
- $ip ) { getGeoCodeAndPais função ($ ip) (
- "/usr/share/GeoIP/GeoIP.dat" ,GEOIP_STANDARD ) ; Gi = $ geoip_open ("/ usr / share / GeoIP / GeoIP.dat" GEOIP_STANDARD)
- $gi , $ip ) ; $ Codpais = geoip_country_code_by_addr ($ gi, $ ip);
- $gi , $ip ) ; $ Country = geoip_country_name_by_addr ($ gi, $ ip);
- ) ; geoip_close ($ gi);
- )
- $ua ) { GetCapabilities função ($ ua) (
- TeraWurfl ( ) ; $ WurflObj TeraWurfl = new ();
- -> GetDeviceCapabilitiesFromAgent ( $ua ) ; Matched $ = $ wurflObj -> GetDeviceCapabilitiesFromAgent ($ ua);
- -> capabilities ; $ Telefone = $ wurflObj -> Recursos;
- ; $ Telefone de retorno;
- )
Estatística
A teoria é a mesma. Se houver a URL que carregar os dados, se não redirecionar para o lar. No nosso caso, usamos o componente guias JqueryUI para organizar os diferentes tipos de dados que podem ver e adicione os botões para exportar para Excel e PDF.
- $idb ) +0 ; $ Id = base_decode ($ BID) 0;
- ; $ Query = select * "de URLs onde id = $ id";
- -> Execute ( $query ) ; R $ = $ conn -> Execute ($ query);
- $rs -> recordcount ( ) > 0 ) { if ($ rs -> RecordCount ()> 0) (
- . $idb ; $ URLBase = "http://iraurl.me/. $ BID;
- -> fields [ 'url' ] ; $ Url = $ rs -> Campos '[url'];
- -> fields [ 'id' ] ; Id = $ rs -> Campos "[id '];
- -> fields [ 'titulo' ] ; Htmltitulo $ = $ rs -> Campos '[título'];
- $htmltitulo == "" ) if ($ htmltitulo == "")
- ; Htmltitulo = $ url;
- ; $ Query = select count (*) a partir de estatísticas WHERE NREGS como idurl = $ id ";
- -> Execute ( $query ) ; R $ = $ conn -> Execute ($ query);
- -> fields [ 'nregs' ] ; R $ = $ cliques -> Campos ['NREGS'];
- { Else ()
- "Location: http://iraurl.me/index.php?err=1" ) ; header ("Location: http://iraurl.me/index.php?err=1");
- saída ;
- )
Muito simples.
A parte difícil é mostrar os gráficos com FusionCharts. Para cada um que adicionar algum código html:
- <div id="chartClicks"> </ div>
- <script type="text/javascript">
- var = Mychart FusionCharts novo ("images/Charts/FCF_Column3D.swf", "idChartClicks", "430", "400", "0", "1");
- myChart.setDataURL (escape ("xml.php? cli t = & id = '. $ BID .'"));
- myChart.setTransparent (true);
- myChart.render (chartClicks ");
- </ Script>
Xml.php O script irá retornar os dados formatados para FusionCharts. Por exemplo:
- $ Query = "SELECT DAY (horas), dia, mês (tempo) como mês e ano (tempo) do ano, count (*) como nclicks
- Estatísticas da
- WHERE id = $ idurl
- grupo, por ano, mês, dia
- ordenar por hora ";
- -> Execute ( $query ) ; R $ = $ conn -> Execute ($ query);
- ; $ Xml = 'legenda do gráfico <= "Cliques" rotateNames = "1 xAxisName =" Dia yAxisName = "Cliques" showNames = "1 decimalPrecision =" 0 formatNumberScale = "0 chartLeftMargin" = "5 chartRightMargin" = "5 "chartTopMargin =" 0 "> ';
- $r = $rs -> fetchrow ( ) ) { while ($ r = $ rs -> fetchRow ()) (
- . $r [ 'dia' ] . "/" . $r [ 'mes' ] . "/" . $r [ 'ano' ] . '" value="' . $r [ 'nclicks' ] . '" color="#A1A1A1" />' ; $ Xml .= "<Nome do conjunto =" ". $ [" Dia R "]." / R $ ['meses'. "]." / R $ ['ano'. "]." Value = "" . $ r ['nclicks']. "color =" # A1A1A1 "/>';
- )
- ; $ Xml .= '</> gráfico;
Dou apenas um exemplo, montar vós descanso em seu próprio
.
Decifrando URLs curtas
Todos os sistemas para encurtar URL's estão trabalhando como inapropriada neste artigo, fazer um redirecionamento HTTP/301 para a URL original.
A partir da URL curta, sabemos que a URL original simplesmente redireciona o seguinte ele faz. Muito simples com PHP e também serve para incorporá-lo em nosso malware API , evitar problemas potenciais com a URL final.
- $url ) get_web_page função ($ url)
- (
- , 'User_agent =' spider> '
- , "Max_redirects '=> 10,
- , 'Timeout' => 120,
- ));
- $page != false ) if ($ page! = false)
- 'content' ] = $page ; '[Conteúdos] Resultado = $ page;
- ; // Bad url, timeout return null; / Bad url / timeout
- / / Salvar o cabeçalho
- 'header' ] = $http_response_header ; «[Cabeçalho« Resultado] = $ http_response_header;
- / / Pega o último * * código de status HTTP
- $i = $nLines -1 ; $i >= 0 ; $i -- ) for ($ i = $ nLine -1; $ i> = 0, $ i -)
- (
- [ $i ] ; $ $ Http_response_header = linha [$ i];
- (
- 'http_code' ] = $response [ 1 ] ; «[Http_code '] Resultado = $ resposta [1];
- break;
- )
- )
- ; $ Resultado de retorno;
- )
- ; $ Url = "";
- [ 'url' ] ; = $ _POST [Url '$ url'];
- $url ) ; $ Dados = get_web_page ($ url);
- $datos ) { if ($ dados) (
- [ 'header' ] ; Headers = $ dados "header ['];
- $headers as $head ) { foreach ($ $ headers como cabeça) (
- = $temp [ 1 ] ; $ Urls [] = $ temp [1];
- )
- )
- ; Htmltitle $ = "";
- '/(.*)< \/ title>/is' , $datos [ 'content' ] , $matches ) ; preg_match ('/(.*)< \ title> / / é "[" conteúdo "dados], $ matches);
- )
- )
Lá, em US $ urls temos a lista de URLs que estão pulando até o final.
Api
Hoje tudo tem que ser Api . Para estatística é muito simples, o verdadeiro XML que geramos para consumir FusionCharts permite que os clientes externos para alimentá-lo. Para criar URL é curta distância, basta criar um arquivo api.php:
- isset ( $_GET [ 'url' ] ) ) { if (isset (se _GET ['URL'] $)) (
- $_GET [ 'url' ] ) ; Url = urldecode ($ _GET 'url'] [$);
- tente (
- ; Htmltitle $ = "";
- substr ( $url , 0 , 4 ) != "http" ) if (substr ($ url, 0, 4)! = "http")
- . $url ; $ Url = "http://". $ Url;
- $url ) ; $ = File_get_contents Html ($ url);
- $html != "" ) { if ($ html! = "") (
- title>/is' , $html , $matches ) ; preg_match ('/(.*)< \ title> / / é ', $ html, $ matches);
- is_array ( $matches ) && count ( $matches > 0 ) ) if (is_array ($ matches) & & count ($ matches> 0))
- $matches [ 1 ] ) ; $ Htmltitle = trim ($ matches [1]);
- )
- ; $ Query = "SELECT * FROM urls WHERE url = '$ url'";
- ->Execute ( $query ) ; R $ = $ conn -> Execute ($ query);
- $rs ->recordcount ( ) > 0 ) { if ($ rs -> RecordCount ()> 0) (
- ->fields [ 'id' ] ; Id = $ rs -> Campos "[id '];
- { Else ()
- ; $ Query = "INSERT INTO urls (url, title) VALUES ('$ url', '$ htmltitle')";
- ->Execute ( $query ) ; R $ = $ conn -> Execute ($ query);
- ->insert_id ( ) ; Id = $ conn -> INSERT_ID ();
- )
- $id ) ; Base = $ base_encode ($ id);
- . $base ; URLBase $ = "http://iraurl.me/. $ Base;
- ; echo $ URLBase;
- exception $e ) { ) Catch (Exception $ e) (
- ; echo "ERRO";
- )
- )
É isso aí. Não se esqueça de também integrar com o sistema de malware.
Conclusões
Bem, este material para quê?. Tão simples, assim você pode ver que hoje a tecnologia é acessível a todos, é simples e rápido para criar um projeto na Web, em cada esquina, a tecnologia não é importante, o que realmente importa é o mover este produto de tecnologia para retornar e fazer um lucro com isso.
Eu tenho o meu projeto em execução superchulo só me custou cerca de 15 horas. Eu coloquei alguns Adsense aqui e ali. E agora? Para esperar as pessoas a entrar e fazer-me um milionário?
É muito mais complicado do que isso, como todos sabem, primeiro você tem que ter uma grande massa de usuários que dá movimento ao projeto e então você tem que obter a maioria deles são pessoas normais, as pessoas não técnicas, os usuários que não pagam por nada ou clique na publicidade
.
Hoje, a Internet, como em qualquer negócio, marketing e técnicas de vendas são muito mais importantes do que a tecnologia em si, é difícil admitir, mas é verdade. Não adianta ter o melhor produto do mundo inteiro, se você levar as pessoas a usá-lo e deixar o dinheiro, é claro. Se você tiver as habilidades certas para movimentar o negócio, não se preocupe, a tecnologia dá-lhe qualquer sócio de uma pequena taxa, mas coloquei nas mãos de uma outra estratégia de vendas de todo o seu negócio não é tão clara não é?.
Eu espero que você servir algo que o artigo. Eu queria mostrar basicamente como usar algumas bibliotecas que você pode obter gratuitamente pode realmente fazer algo útil e funcional, com muito pouco esforço. Claro que vocês colocaram para fora alguma idéia.
Desculpem-me por o rolo
No final me custou mais a escrever o artigo para implementá-lo.













7 usuários comentaram sobre "um artigo do projeto explica passo a passo: encurtar URLs com IraUrl.me"
Feed comentários para esta entrada TrackbackMuito bom artigo, obrigado.
Um casal de esclarecimentos / detalhes.
Se este comentário em php.net está correto: # 92 620 http://www.php.net/manual/en/function.header.php não é "local", mas "Localização".
O problema com retorno a curto mesma URL se a URL que você deseja adicionar já existe é que as estatísticas são misturadas, por exemplo: Um usuário apurado uma URL, o usuário B descarregada a mesma URL, quando olhar para as estatísticas os dois são a mesma coisa ... e, provavelmente, ficará surpreso ao ver B múltiplos acessos ao seu "novo" URL curta.
Jack Hi,
Obrigado pelo comentário, eu vejo que você leu em profundidade
.
Na verdade você está certo, mas olhe que eu faço:
strtolower ($ temp [0 ])==" localização:
Primeira convertida em minúsculas em conta qualquer possibilidade.
Para o seu segundo comentário, sim, e eu pensei, mas como disse, eu decidi fazê-lo, serve também para o outro lado
.
Eu estava me referindo a este local:
header ("HTTP/1.x 301 Moved");
header ("Location: $ url");
saída;
Else ()
header ("Location: index.php? err = 1");
saída;
)
) Catch (Exception $ e) (
header ("Location: index.php? err = 2");
saída;
)
)
header ("Location: index.php? err = 1");
Situação deve ser: com uma URL absoluta.
Você está certo George!
Trata-se de vez com as observações que você faz. Espero não ter havido qualquer na calha
.
Obrigado pelo aviso.
Gostei do artigo, vou tentar no meu servidor de casa.
Mas, mais eu gostei do comentário no final do q:
"O marketing e técnicas de vendas são muito mais importantes do que a tecnologia em si ..."
"Não adianta ter o melhor produto do mundo inteiro, se você levar as pessoas a usá-lo e deixar o dinheiro e, é claro ..."
O mundo está mudando tão rápido que há para saber de tudo, para além do que você sabe.
Bem, saudações e agradecimentos para o artigo.
Joer macho, eu tiro meu chapéu!
Que máquina
[...] Conclusão, fiz o mesmo há alguns meses com o primeiro projeto. Eu copiá-lo como é, porque é tão [...]
Deixe uma resposta