Un paio di settimane fa ho trovato la necessità di utilizzare uno di questi sistemi là fuori per abbreviare 's. URL Avevo bisogno di inviare un SMS indirizzo e ha dovuto prendere la minor quantità possibile di quel personaggio al fine di ottimizzare il testo del messaggio. Mentre lui usato ingegno pensato di utilizzare un sistema di numerazione base36 per ridurre in modo esponenziale il numero di caratteri nel reindirizzamento. Sarebbe quindi un articolo sui vantaggi dei diversi sistemi di numerazione decimale per alcuni progetti, ma è finito per diventare un progetto completo. Quando stavo iniziando la spiegazione teorica ho pensato, perché no? Perché non mostrare come semplice e veloce che è possibile montare qualsiasi cosa su Internet oggi?
Così, dopo 15 ore di lavoro vi presento IraUrl.me , un accorciamento del URL nello stile di TinyUrl o Bit.ly . E mi è costato di più a scrivere l'articolo per farlo accadere, eh divertente?. In realtà l'applicazione mi stava preparando altre cose che stavano accadendo sarebbe interessante da guidare, così il primo otto ore o poco più, sono diventati 15.
La teoria
Per coloro che non sanno, un accorciamento di URL è basato sulla ricerca di un nome di dominio come short possibile, nonché redirect HTTP 301 URL 's. other Il trucco è quello di ottimizzare i parametri che aggiungere alla URL di essere il più breve possibile, non vogliono penalizzare noi la brevità del dominio.
Come poi accorciare 's URL? Molto più facile di quanto sembri come te e sicuramente sarebbe successo. Dobbiamo solo uno database in cui noi continuiamo ad aggiungere record a uno come table are creating nuovo URL della breve. This tabella è uno campo Contatore, la chiave della tabella, that for each URL restituisce uno nuovo identificatore univoco, che ogni direzione potrebbero essere resi accessibili nel solito modo:
http://dominio.com/1
http://dominio.com/1000000
Questo è esattamente l'idea, tutto ciò che facciamo è cambiare l'identificatore di una questione di base10 (quella dei nostri metriche) a base36 o base62 nel mio caso. Altri sistemi di numerazione conosciuti sono i esadecimale (base 16 codifiche) e base64 .
Bene, hai parlato in cinese. Che cosa è questo? Vediamo.
Su basi di numerazione
Il sistema decimale utilizza dieci cifre (da cui il decimale
) Per formare tutte le possibili combinazioni di numeri. Quello che già sappiamo, dai. Gli usi due cifre binarie (0 e 1), 16 esadecimale (0 .. 9ABCDE), base36, come indica il nome, trentasei (il nono .. 0 .. z) e utilizzare i 62 base62 cifre comprendono i numeri 0-9 e le lettere dalla A alla Z nel caso in cui (il 9 .. 0 .. zA .. Z). Ecco alcuni esempi:
| Binario | Decimale | Esadecimale | Base36 | Base62 |
| 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 | 1 |
| 10 | 2 | 2 | 2 | 2 |
| 1010 | 10 | A | a | a |
| 1100100 | 100 | 64 | 2s | 1c |
| 1000000 | F4240 | lfls | 4c92 | |
| 10000000 | 989 680 | 5yc1s | FXsk |
Potete vedere a colpo d'occhio, come il numero aumenta, maggiore sarà la base sarà di gestire un minor numero di cifre. I numeri, dopo tutto, continuano tra tutte le combinazioni posibles.Así cifre, a seconda della base e il numero di cifre, il più grande numero rappresentabile rappresentabili sarebbe:
| No. cifre | Decimale | Base62 |
| 1 | 10 | 62 |
| 2 | 100 | 3.844 |
| 3 | 1000 | 238 328 |
| 4 | 10 000 | 14776336 |
| 5 | 100 000 | 916132832 |
| 6 | 1000000 | 56800235584 |
| 7 | 10000000 | 3521614606208 |
| 8 | 100000000 | 218340105584896 |
| 9 | 1000000000 | 13537086546263552 |
O che cosa è la stessa, base (numero di cifre), 62 9-10 settembre. Spero che tu capisca la teoria. A titolo di curiosità:
Decimale: 10000000000000000000000
Base62: 36aHo5IWaicak
La questione adesso sarebbe, perché Base62 e Base64, per esempio, meglio conosciuto? Semplice, perché oltre alle 62 caratteri di Base62, Base64 utilizza due supplementari, di solito + e / = aggiunta, il che rende la catena Il sito non sicuro, cioè, i caratteri speciali dovrebbe essere tradotta in non dare problemi di trasporto, avremmo perdere i benefici della nostra encryption breve. Il 62 caratteri utilizzati in Base62 sono completamente sicuri, solo lettere (maiuscole e minuscole) e numeri.
Sapere come funziona il sistema e vedremo come creare la nostra applicazione. Ovviamente non vi dico tutto step by step, perché altrimenti ci vuole molto più tempo per scrivere l'articolo per rendere l'applicazione, io metterò solo le cose che sono più importanti.
Per codificare / decodificare base10 per base62 utilizzerà queste librerie:
- $dec , $base , $digits = FALSE ) { funzione ($ dicembre, $ base, $ cifre dec2base = FALSE) (
- $base < 2 or $base > 256 ) { if ($ base <2 o $ base> 256) (
- )
- ; Value $ = ";
- ! $digits ) { if ($ cifre) (
- $base ) ; Cifre $ = cifre ($ base);
- )
- $dec > $base – 1 ) { while ($> $ dicembre base - 1) (
- [ $rest ] . $value ; $ Valore = $ numeri [] $ riposo. $ Valore;
- )
- string ) $value ; ritorno (string) $ valore;
- )
- $value , $base , $digits = FALSE ) { funzione base2dec ($ valore, $ base, $ numeri = FALSE) (
- $base < 2 or $base > 256 ) { if ($ base <2 o $ base> 256) (
- )
- $base < 37 ) { if ($ base <37) (
- )
- ! $digits ) { if ($ cifre) (
- $base ) ; Cifre $ = cifre ($ base);
- )
- ; $ Dec = '0 ';
- $loop = 0 ; $loop < $size ; $loop ++ ) { for ($ loop = 0; $ loop <$ dimensione, ciclo $ + +) (
- )
- string ) $dec ; ritorno (string) $ dicembre;
- )
- $base ) { cifre funzione ($ base) (
- $base < 64 ) { if ($ base <64) (
- ( '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_' , 0 , $base ) ; ritorno 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 ) ; ritorno substr ("\ 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 il 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 la \ 8 x 8 ter \ x 8c \ x 8 D \ 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 il 9 \ x 9 ter \ x 9c \ x 9 D \ x 9e \ x 9 F \ x a0 \ x a1 \ x a2 \ x a3 \ x a4 \ x a5 \ x a6 \ x a7 \ x a8 \ x a9 \ AA \ ab x \ x c \ x d \ x \ x ae af \ x b0 \ x B1 \ B2 x \ x b3 \ b4 x \ x b5 \ b6 x \ x b7 \ x a8 \ x b9 \ x ba \ bb x \ x bc \ bd \ x essere x \ x bf \ x c0 \ c1 x \ x c2 \ x c3 \ c4 x \ x c5 \ x c6 \ x c7 \ x c8 \ x c9 \ x CA \ cb x \ x cc \ x \ cd x \ ce x cf \ x d0 \ x d1 \ x d2 \ x d3 \ x d4 \ x d5 \ x d6 \ x d7 \ d8 x \ x d9 \ x dà \ x \ db x dc \ x \ gg x \ x \ x df e0 \ x e1 \ x e2 \ x e3 \ e4 x \ x E6 x \ x e7 \ x e8 \ x e9 \ x EA \ x EB x \ ce \ x ed x ee \ \ \ e5 x EF \ x f0 \ x f1 \ x f2 \ f3 x \ x f4 \ x f5 \ f7 \ f8 x \ x f9 \ x F \ x fb x k \ x \ x fd \ \ fede x \ x f6 x ff ", 0, $ base);
- )
- )
- $value ) { funzione base_encode ($ valore) (
- base2dec ( $value , 256 ) , 62 ) ; dec2base return (base2dec ($ valore, 256), 62);
- )
- $value ) { funzione base_decode ($ valore) (
- base2dec ( $value , 62 ) , 256 ) ; dec2base return (base2dec ($ value, 62), 256);
- )
Le ultime due funzioni sono quelle usate per le conversioni.
Pacchetti e biblioteche:
- Free CSS Templates : per un modello bello xhtml per il nostro progetto
. - MaxMind GeoLite Paese : Per la localizzazione geografica di un utente tramite il loro IP.
- WURFL : Per identificare il browser / terminale di un visitatore per il suo User Agent . I integrare con Tera-WURFL di mantenere le informazioni in un database.
- Fusion schemi gratuiti : per i grafici delle statistiche.
- Appunti Zero : Per copiare negli appunti l'url brevi ottenuti senza che l'utente di selezionare, con un solo clic.
- JqueryUI : Per la componente di navigazione a schede.
- SafeBrowsing API di Google : Per verificare se un url è potenzialmente pericoloso.
- ADODB (opzionale): accesso al database di abstract. Io lo uso su tutti i miei progetti, ma è possibile utilizzare le funzioni native di PHP.
- PHPExcel : Per generare Excel e PDF.
Inoltre:
- Un dominio e hosting di ospitare (6 €).
- PHP e MySQL (non obbligatorio, si può fare con qualsiasi tecnologia).
- 15 ore del vostro tempo
.
Struttura del Sito
Qualsiasi rispettando progetto web self should cominciare col descrivere quello che vogliamo mostrare i nostri visitatori, dobbiamo raccogliere tutte le idee, decidere nell'interesse della verità, si consideri come saranno disponibili nel frontend e terminano con una mappa del sito che ci dice il flusso per continuare a lavorare. Questa è la nostra:
Quando un utente si reca in uno dei nostri URL breve davvero essere l'inoltro della richiesta http script all'interno di una tassa di rendere l'intero processo, link.php nel mio caso.
Per visualizzare le statistiche per un URL che mi piaceva il sistema di bit.ly , quindi la copia
. L'aggiunta di un "+" alla fine della URL breve, invece di saltare alla direzione lungo le statistiche dimostrano. Ciò avviene, come nel caso precedente, portando ad un altro script internamente, stats.php.
Se l'ID che si intende utilizzare per saltare per l'url lunga o visualizzare statistiche lì, nuovamente a index.php per visualizzare un messaggio di errore come "L'URL non esiste."
Il dominio
Ovviamente dobbiamo trovare un nome di dominio più breve possibile, la maggior parte sono già occupati, ma guardando e guardando TLD 's strano che puoi trovare qualcosa. Ho scelto uno. Me perché ha un meno di un. Com
e non costa ciò che è a.
.
La banca dati
Molto semplice, solo due tabelle di un tenere gli URL generati e altre statistiche di accesso ad essi.
- CREATE TABLE IF NOT EXISTS `URL` (
- 20 ) NOT NULL auto_increment, `Id` bigint (20) NOT NULL auto_increment,
- ) NOT NULL, `URL` varchar (500) NOT NULL,
- ) NOT NULL, `Titolo` varchar (255) NOT NULL,
- ` ) PRIMARY KEY (`id`)
- MyISAM DEFAULT CHARSET= latin1; ) ENGINE = MyISAM DEFAULT CHARSET = latin1;
- CREATE TABLE IF NOT EXISTS `stats` (
- 20 ) NOT NULL auto_increment, `Id` bigint (20) NOT NULL auto_increment,
- ) 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,
- »Ore` datetime NOT NULL,
- ) NOT NULL, »PAESE` varchar (255) NOT NULL,
- ) NOT NULL, `Marca` varchar (255) NOT NULL,
- ) NOT NULL, `Modello` varchar (255) NOT NULL,
- ` ) , PRIMARY KEY (`id`)
- Idurl `` KEY (`idurl`, `ora`)
- MyISAM DEFAULT CHARSET= latin1; ) ENGINE = MyISAM DEFAULT CHARSET = latin1;
Configurazione di Apache
Come abbiamo detto che vogliamo che quando qualcuno va a tutte le url del nostro sito tipo
http://tudominio.com/prueba3
E reindirizzare internamente per link.php script che sarà responsabile per l'elaborazione della richiesta. Analogamente, se qualcuno visita
http://tudominio.com/prueba3+
statistiche mostrano che l'URL (se disponibile). Configurare Apache per tener conto di tutte queste peculiarità, mod_rewrite sarà il nostro amico per farlo. Nel mio caso ho fatto che se la chiamata non è uno script PHP o un'immagine o un file o un css o javascript è il segno "+" sta per link.php. Se hai il segno "+" andrà stats.php.
RewriteEngine su RewriteCond% (REQUEST_URI) !^/(.*). php $ RewriteCond% (REQUEST_URI)! ^ / Css \ /(.*)$ RewriteCond% (REQUEST_URI)! ^ / J \ /(.*)$ RewriteCond % (REQUEST_URI) !^/(.*) \ + $ RewriteCond% (REQUEST_URI)! ^ / images \ /(.*)$ RewriteRule ^(.+) / link.php? id = 1 RewriteCond% $ (REQUEST_URI) ^ /(.*) \ + $ RewriteRule ^(.+) / stats.php? id = $ 1 Di immagine e design
Per la progettazione, o fai da te o tu are un creativo come ho negato di scaricare un modello di superchula freecsstamplates.org and adatta al vostro bisogno, non non andare nei dettagli.
Creare url brevi
Il primo script della nostra applicazione. Una forma semplice in cui l'utente inserisce la URL che si desidera accorciato e ridotto a presentare ... l'integrazione con il sistema di controllo del malware , che ha spiegato alcuni giorni fa
.
- ; URLBase $ = "";
- [ 'url' ] ; Url = $ _POST ['$ url'];
- prova (
- . $url ; $ Url = "http://". $ Url;
- GoogleSafeBrowsing ( 'ABQIAAAAQYvf-54bCBMuGY20SeONVxQ236Mc_IjryQBl-W_Repaw3fCykA' , true ) ; Classe $ = GoogleSafeBrowsing nuovo ('ABQIAAAAQYvf-54bCBMuGY20SeONVxQ236Mc_IjryQBl-W_Repaw3fCykA', true);
- -> lookupsFor ( $url ) ; Nomalware $ = $ classe - lookupsFor> ($ url);
- $nomalware ) { if ($ nomalware) (
- ; Htmltitle $ = "";
- $html != "" ) { if ($ html! = "") (
- '/(.*)< \/ title>/is' , $html , $matches ) ; preg_match ('/(.*)< \ / title> / è ', $ html, $ matches);
- )
- ; $ Query = "SELECT * FROM URL dove url = '$ url';"
- -> Execute ( $query ) ; $ Rs = $ conn -> Execute ($ query);
- $rs -> recordcount ( ) > 0 ) { if ($ rs -> RecordCount ()> 0) (
- -> fields [ 'id' ] ; Id = $ rs -> campi ['id'];
- { Else ()
- ; $ Query = inserire "nella URL (url, titolo) VALUES ('$ url', '$ htmltitle')";
- -> Execute ( $query ) ; $ Rs = $ 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;
- )
- )
Abbiamo aggiunto un piccolo controllo. Se l'URL che si desidera aggiungere esiste già, si ritorna lo stesso URL breve, ho preso questa decisione, si può fare quello che vuoi. Anche ottenere il titolo del URL finale di rinvio alla stessa questione di semplice visiva
.
Rinvio alla URL lunghi
Noi abbiamo la nostra breve URL, ora in avanti le richieste ad esso alla fine. Ricordate che il nostro Apache sta per reindirizzare la richiesta di link.php? Id = XXXX. Il nostro script aggiorna, inoltre, le statistiche delle visite del url.
- [ 'id' ] ; IDB $ = $ _GET 'id ['];
- $idb ) +0 ; $ Id = base_decode ($ IDB) 0;
- prova (
- ; $ Query = "select * from URL dove id = $ id";
- -> Execute ( $query ) ; $ Rs = $ conn -> Execute ($ query);
- $rs -> recordcount ( ) > 0 ) { if ($ rs -> RecordCount ()> 0) (
- -> fields [ 'url' ] ; $ Url = $ rs -> campi ['url'];
- [ 'HTTP_REFERER' ] ; Referer = @ $ _SERVER ['HTTP_REFERER $'];
- [ 'HTTP_USER_AGENT' ] ; Ua = @ $ _SERVER ['HTTP_USER_AGENT $'];
- [ 'REMOTE_ADDR' ] ; Ip = @ $ _SERVER ['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 ($ _SERVER ['HTTP_USER_AGENT']);
- [ 'marca' ] ; Bandiera $ = $ fine 'tag ['];
- [ 'modelo' ] ; Modello $ = $ fine modello '['];
- $ip ) ; $ Temp = getGeoCodeAndPais ($ ip);
- [ 'code' ] ; Codpais $ = $ temp 'codice ['];
- [ 'pais' ] ; Paese $ = $ temp 'paese ['];
- $ Query = inserisce "in stats (idurl, codpais, referer, UA, tempo, paese, marca, modello, hostreferer) VALUES
- Id, '$ codpais', '$ referer', '$ ua', now (), '$ paese' $, '$ marca (', '$ modello', '$ hostreferer') ";
- -> Execute ( $query ) ; Rs2 $ = $ conn -> Execute ($ query);
- uscita ;
- { Else ()
- "Location: http://iraurl.me/index.php?err=1" ) ; header ("Location: http://iraurl.me/index.php?err=1");
- uscita ;
- )
- exception $e ) { ) Catch (Exception $ e) (
- "Location: http://iraurl.me/index.php?err=2" ) ; header ("Location: http://iraurl.me/index.php?err=2");
- uscita ;
- )
- )
- "Location: http://iraurl.me/index.php?err=1" ) ; header ("Location: http://iraurl.me/index.php?err=1");
Come si vede, se l'URL non esiste index.php reindirizzare l'utente con un messaggio di errore. Ci sarà bisogno di due funzioni supplementari, che ci restituiscono le informazioni nel paese di origine di IP e dati del terminale utente (film o web). Senza entrare nei dettagli sull'installazione MaxMind GeoLite Paese o WURFL / Tera-WURFL .
- $ip ) { getGeoCodeAndPais funzione ($ 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 ) ; Paese $ = geoip_country_name_by_addr ($ gi, $ ip);
- ) ; geoip_close ($ gi);
- ( "pais" => $pais , "code" => $codpais ) ; ritorno array ("paese" => $ paese, "codice" => $ codpais)
- )
- $ua ) { GetCapabilities funzione ($ ua) (
- TeraWurfl ( ) ; $ WurflObj TeraWurfl = new ();
- -> GetDeviceCapabilitiesFromAgent ( $ua ) ; Abbinato $ = $ wurflObj -> GetDeviceCapabilitiesFromAgent ($ ua);
- -> capabilities ; $ Telefono = $ wurflObj - Capacità>;
- ; return $ telefono;
- )
Statistica
La teoria è la stessa. Se vi è l'URL carichiamo i dati, se non reindirizzare la casa. Nel nostro caso si utilizza il componente schede JqueryUI to organizzare i tipi differenti di dati che consente di visualizzare e add i buttons per esportare in Excel e PDF.
- $idb ) +0 ; $ Id = base_decode ($ IDB) 0;
- ; $ Query = "select * from URL dove id = $ id";
- -> Execute ( $query ) ; $ Rs = $ conn -> Execute ($ query);
- $rs -> recordcount ( ) > 0 ) { if ($ rs -> RecordCount ()> 0) (
- . $idb ; = $ URLBase http://iraurl.me/ ". $ Dell'IDB;
- -> fields [ 'url' ] ; $ Url = $ rs -> campi ['url'];
- -> fields [ 'id' ] ; Id = $ rs -> campi ['id'];
- -> fields [ 'titulo' ] ; Htmltitulo $ = $ rs -> campi ['title'];
- $htmltitulo == "" ) if ($ htmltitulo == "")
- ; Htmltitulo $ = $ url;
- ; $ Query = "select count (*) da statistiche DOVE NREGS come idurl = $ id";
- -> Execute ( $query ) ; $ Rs = $ conn -> Execute ($ query);
- -> fields [ 'nregs' ] ; Clic $ = $ rs -> campi ['NREGS'];
- { Else ()
- "Location: http://iraurl.me/index.php?err=1" ) ; header ("Location: http://iraurl.me/index.php?err=1");
- uscita ;
- )
Molto semplice.
La parte difficile è quello di mostrare il grafico con FusionCharts. Per ciascuno di essi si aggiungono alcuni codice html:
- <div id="chartClicks"> </ div>
- <script type="text/javascript">
- var = myChart FusionCharts nuovo ("images/Charts/FCF_Column3D.swf", "idChartClicks", "430", "400", "0", "1");
- myChart.setDataURL (fuga ("xml.php? t = cli & id = '. $ IDB .'"));
- myChart.setTransparent (true);
- myChart.render (chartClicks ");
- </ Script>
Xml.php Lo script restituirà i dati formattati per FusionCharts. Per esempio:
- $ Query = "SELECT giorno (ore) come il giorno, MESE (ora) come mese, anno (ora) come l'anno, count (*) come nclicks
- statistiche dal
- WHERE id = $ idurl
- gruppo per anno, mese, giorno
- ordina per tempo ";
- -> Execute ( $query ) ; $ Rs = $ conn -> Execute ($ query);
- ; Xml $ = 'caption grafico <= "Click" rotateNames = "1" xAxisName = "yAxisName Day" = "Click" 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 .= <"set name =" '. $ [' Giorno R ']. "/ $ R [' mese '.]". "/ $ R [' year '.]".' "Value =" ' . $ r ['nclicks'] '. "color =" # A1A1A1 "/>';
- )
- ; $ Xml .= '</> grafico';
Ho un solo esempio, il resto si guida da sola
.
Decifrare URL brevi
Tutti i sistemi per accorciare URL stanno lavorando come non appropriato in questo articolo, fare un redirect HTTP/301 all'URL originale.
Dalla breve URL sappiamo che cosa l'URL originale reindirizza semplicemente a seguito della lo fa. Molto semplice con PHP e serve anche ad esso l'integrazione nel nostro malware API , evitare potenziali problemi connessi con l'URL finale.
- $url ) get_web_page funzione ($ url)
- (
- , 'User_agent' = 'ragno>'
- , 'Max_redirects' => 10,
- , 'Timeout' => 120,
- ));
- $page != false ) if ($ pagina! = false)
- 'content' ] = $page ; [Risultato 'contenuto $'] = $ pagina;
- ; // Bad url, timeout ritorno null; / / url Bad, timeout
- / / Salva l'intestazione
- 'header' ] = $http_response_header ; '[Header' Risultato] = $ http_response_header;
- / / Recupera l'ultima * * codice di stato HTTP
- $i = $nLines -1 ; $i >= 0 ; $i -- ) for ($ i = $ nline -1; $ i> = 0, $ i -)
- (
- [ $i ] ; $ Riga = $ http_response_header [$ i];
- (
- 'http_code' ] = $response [ 1 ] ; [Risultato 'http_code $'] = $ risposta [1];
- break;
- )
- )
- ; return $ risultato;
- )
- ; $ Url = "";
- [ 'url' ] ; Url = $ _POST ['$ url'];
- $url ) ; $ Dati = get_web_page ($ url);
- $datos ) { if ($ data) (
- [ 'header' ] ; $ Intestazioni = $ dati 'header ['];
- $headers as $head ) { foreach ($ intestazioni come testa di $) (
- = $temp [ 1 ] ; $ Urls [] = $ temp [1];
- )
- )
- ; Htmltitle $ = "";
- '/(.*)< \/ title>/is' , $datos [ 'content' ] , $matches ) ; preg_match ('/(.*)< \ / title> / è ', [' content 'dati] $, $ matches);
- )
- )
Lì, a $ url, abbiamo la lista di URL che stanno saltando fino alla finale.
Api
Oggi tutto deve essere Api . Per le statistiche è molto semplice, l'attuale XML che si generano a consumare FusionCharts permette ai clienti esterni per la sua alimentazione. Per creare l'URL 's breve distanza, è sufficiente creare un file api.php:
- isset ( $_GET [ 'url' ] ) ) { if (isset ($ ['url _GET'])) (
- $_GET [ 'url' ] ) ; $ Url = urldecode ($ _GET ['url']);
- prova (
- ; Htmltitle $ = "";
- substr ( $url , 0 , 4 ) != "http" ) if (substr ($ url, 0, 4)! = "http")
- . $url ; $ Url = "http://". $ Url;
- $url ) ; $ Html = file_get_contents ($ 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 URL dove url = '$ url';"
- ->Execute ( $query ) ; $ Rs = $ conn -> Execute ($ query);
- $rs ->recordcount ( ) > 0 ) { if ($ rs -> RecordCount ()> 0) (
- ->fields [ 'id' ] ; Id = $ rs -> campi ['id'];
- { Else ()
- ; $ Query = inserire "nella URL (url, titolo) VALUES ('$ url', '$ htmltitle')";
- ->Execute ( $query ) ; $ Rs = $ 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 "errore";
- )
- )
Tutto qui. Non dimenticare di integrare anche con il sistema di malware.
Conclusioni
Bene, tutta questa roba per cosa?. Così semplice, così can vedere che oggi la tecnologia è disponibile a tutti, è semplice e veloce per creare un progetto su Internet, c'è tutto from tutti gli angoli, la tecnologia non è importante, ciò che conta è come spostare questo prodotto della tecnologia per il ritorno e un profitto da esso.
Ho il mio progetto in corso superchulo solo mi è costato circa 15 ore. Ho messo qualche Adsense in giro qua e là. E adesso? Per attendere le persone a entrare e mi fanno un milionario?
E 'molto più complicato di quello che come tutti sapete, prima devi avere una grande massa di users che movimenta il progetto e poi si deve ottenere la maggior parte di loro sono persone normali, non i tecnici, gli utenti che non pagano per niente oppure fare clic nella pubblicità
.
Oggi, Internet, come in qualsiasi attività commerciale, marketing e tecniche di vendita sono molto più importante della tecnologia stessa, è difficile ammetterlo, ma vero. Nessun uso di avere il miglior prodotto del mondo intero, se si ottiene la gente lo utilizza e lasciare i soldi, questo è chiaro. Se si hanno le giuste competenze per spostare l'attività, non si preoccupi, la tecnologia ti dà qualsiasi partner per una piccola tassa, ma mettere nelle mani di un altro vendite intera strategia di business è il tuo non è così chiaro non è vero?.
Spero che qualcosa di servire l'articolo. Volevo mostrare praticamente come usare alcune librerie che si possono ottenere gratuitamente può realmente fare qualcosa di utile e funzionale con il minimo sforzo. Certo, si ottiene una certa idea.
Ci scusiamo per il rotolo
Alla fine mi costa di più a scrivere l'articolo per attuarla.













7 utenti hanno commentato "un articolo del progetto ha spiegato passo per passo: accorciare gli URL con IraUrl.me"
Feed commenti per questa voce TrackbackOttimo articolo, grazie.
Un paio di chiarimenti / dettagli.
Se questo commento in php.net è corretto: # 92 620 http://www.php.net/manual/en/function.header.php non è "luogo", ma "Location".
Il guaio con ritorno a breve la URL stesso se l'URL che si desidera aggiungere esiste è già that le statistiche sono mescolati, come ad esempio: utente A scarica un URL, l'utente B scarica la stessa URL, quando guarda le statistiche i due sono uguali ... e probabilmente sarà sorpreso di vedere B accessi multipli al suo "breve nuovo URL".
Ciao Jack,
Grazie per il commento, vedo che l'avete letta in profondità
.
In effetti hai ragione, ma guarda che faccio:
strtolower ($ temp [0 ])==" località:
Prima convertito in minuscolo per tenere conto di ogni possibilità.
Per la tua seconda osservazione, sì, e ho pensato, ma come già detto, ho deciso di farlo, serve anche il contrario
.
Mi riferivo a questa posizione:
header ("HTTP/1.x 301 Spostato");
header ("location: $ url");
uscita;
Else ()
header ("location: index.php? err = 1");
uscita;
)
) Catch (Exception $ e) (
header ("location: index.php? err = 2");
uscita;
)
)
header ("location: index.php? err = 1");
Posizione dovrebbe essere: con un URL assoluto.
Hai ragione Giorgio!
E 'modificato con le osservazioni effettuate. Spero di non si sono verificate in cantiere
.
Grazie per l'avvertimento.
Mi è piaciuto l'articolo, cercherò nel mio server casalingo.
Ma, molto simile al q commento mi farà alla fine:
"Il marketing e tecniche di vendita sono molto più importanti rispetto alla tecnologia stessa ..."
«Non serve avere il miglior prodotto in il world intero se si ottiene la gente lo uso e lasciare denaro, e di certo ..."
Il mondo cambia così in fretta che c'è da sapere tutto, a parte quello che sai.
Beh saluti e grazie per l'articolo.
JoeR macho, tanto di cappello!
Quale macchina
[...] Conclusione, ho fatto lo stesso qualche mese fa con il primo progetto. Io lo copia come è perché è proprio come [...]
Lascia una risposta