Un paio di settimane fa ho trovato la necessità di utilizzare uno di quei sistemi che sono là fuori per accorciare URL 's. Ho bisogno di inviare una e-mail e ha dovuto prendere il minor numero possibile di caratteri per quella di ottimizzare il testo del messaggio. Come era solito geniale pensando come utilizzare un sistema numerico base36 per ridurre in modo esponenziale il numero di caratteri nel redirect. Questo sarebbe stato, quindi, un articolo sui vantaggi dei sistemi di numerazione diversi per decimale per alcuni progetti, ma alla fine si trasformò in un progetto completo. Quando si avvia la spiegazione teorica è stato pensato, perché no? Perché non mostrare quanto velocemente e facilmente è possibile montare qualsiasi cosa su Internet oggi?
Così, dopo circa 15 ore di lavoro che presento IraUrl.me , lo stile di un URL shortener di TinyUrl o Bit.ly . Mi è costato di più per scrivere l'articolo per farlo accadere, divertente eh. In realtà, come l'applicazione mi stava preparando altre cose accadevano sarebbe interessante per montare, in modo che le prime otto ore o giù di lì, sono diventati 15.
Teoria
Per chi non lo sapesse, un reperto URL shortener è basato su un dominio più breve possibile e di creare redirect HTTP 301 altro URL 's. Il trucco è quello di ottimizzare i parametri di aggiungere l'URL di essere il più breve possibile, noi non ci penalizza in quanto breve il dominio.
Come fanno abbreviazione URL allora questi 's? Molto più facile di quanto sembra e come probabilmente sarebbe successo a te. Basta avere un database in cui si aggiunge record a una tabella in cui vengono creati a breve di nuovo URL. Questa tabella ha un campo contatore, la chiave della tabella, che per ogni nuovo URL restituisce un identificatore univoco, in modo che ciascuna direzione potrebbe essere accessibile nel solito modo:
http://dominio.com/1
http://dominio.com/1000000
Questo è esattamente l'idea, tutto ciò che fai è cambiare l'identificatore all'interno di base10 (quella del nostro sistema metrico) a base36 o base62 nel mio caso. Altri sistemi di numerazione noti sono l' esadecimale (Base16) e base64 .
Ok, ho 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 combinazioni di possibili numeri. Quello che già sappiamo, dai. Il binario utilizza due cifre (0 e 1), il 16 esadecimali (0 .. 9ABCDE), base36, come suggerisce il nome, trentasei (0 .. 9 ° .. z) e base62 usa 62 numeri di cifra che comprende 0-9 e le lettere dalla A alla Z in maiuscolo e in minuscolo (0 .. 9 ° .. zA .. Z). Ecco alcuni esempi:
| Binary | 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 |
Si può vedere a colpo d'occhio, con l'aumento del numero, maggiore è la base in grado di gestire un numero di cifre. I numeri, del resto, sono continui tra tutte le combinazioni di cifre posibles.Así, a seconda della base e il numero di cifre, il più grande numero rappresentabile rappresentabile sarebbe:
Num cifre | Decimale | Base62 |
| 1 | 10 | 62 |
| 2 | 100 | 3844 |
| 3 | 1000 | 238.328 |
| 4 | 10000 | 14776336 |
| 5 | 100000 | 916132832 |
| 6 | 1000000 | 56800235584 |
| 7 | 10000000 | 3521614606208 |
| 8 | 100000000 | 218340105584896 |
| 9 | 1000000000 | 13537086546263552 |
O quello che è lo stesso, di base (numero di cifre), 62 Settembre 9-10. Spero che tu capisca la teoria. Come curiosità:
Decimale: 10000000000000000000000
Base62: 36aHo5IWaicak
La domanda ora sarebbe Perché Base62 e Base64, ad esempio, meglio conosciuto? Semplice, perché oltre ai 62 caratteri di Base62, Base64 usa due in più, e di solito + / =, inoltre, che convertono la stringa Web non sicuri, cioè i caratteri speciali dovrebbero tradurre al trasporto non danno problemi, che sarebbero perdere i vantaggi del nostro crittografia breve. I 62 caratteri utilizzati in Base62 sono completamente sicuro, solo lettere (maiuscole e minuscole) e numeri.
Sapendo ora come funziona il sistema, vedremo come creare la nostra applicazione. Ovviamente non vi dico tutto passo per passo perché altrimenti vorrà molto più tempo per scrivere l'articolo che rendono l'applicazione, vado a prendere solo le cose che sono più importanti.
Per codificare / decodificare base10 di base62 utilizzerà queste librerie:
$dec , $base , $digits = FALSE ) { funzione dec2base ($ dicembre, $ database, $ caratteri = FALSE) {
$base < 2 or $base > 256 ) { if ($ basso <2 o $ base> 256) {
"Invalid Base: .$base \n " ) ; die ("di base non valida:. $ base \ n"); }
; $ Valore = ";
! $digits ) { if ($ caratteri) {
$base ) ; $ Digits = cifre ($ base);
}
$dec > $base – 1 ) { while ($ dec> $ base - 1) {
( $dec , $base ) ; $ Resto =
bcmod ($ dicembre, $ base); ( $dec , $base ) ; $ Dec =
bcdiv ($ dicembre, $ base); [ $rest ] . $value ; $ Valore = $ numeri [$ resto] $ Valore.;
}
[ intval ( $dec ) ] . $value ; $ Valore =
$ numeri [ intval ($ dec)] $ value.; string ) $value ; (string) $ valore di ritorno;
}
$value , $base , $digits = FALSE ) { funzione base2dec ($ valore, $ database, $ caratteri = FALSE) {
$base < 2 or $base > 256 ) { if ($ basso <2 o $ base> 256) {
"Invalid Base: .$base \n " ) ; die ("di base non valida:. $ base \ n"); }
$base < 37 ) { if ($ denominatore <37) {
}
! $digits ) { if ($ caratteri) {
$base ) ; $ Digits = cifre ($ base);
}
( $value ) ; $ Size =
strlen ($ value); ; $ Dec = '0 ';
$loop = 0 ; $loop < $size ; $loop ++ ) { for ($ loop = 0; $ anello <$ size, $ anello + +) {
( $digits , $value [ $loop ] ) ; $ Elemento =
strpos ($ cifre, $ valore [$ anello]); ( $base , $size - $loop -1 ) ; $ Potenza =
bcpow ($ database, $ size -
$ anello -1); ( $dec , bcmul ( $element , $power ) ) ; $ Dec =
bcadd ($ dicembre, bcmul ($ elemento, $ componente)); }
string ) $dec ; ritorno (string) $ dicembre;
}
$base ) { cifre funzione ($ base) {
$base < 64 ) { if ($ denominatore <64) {
( '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_' , 0 , $base ) ; tornare substr ('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_ ', 0, $ base); { Else {}
}
}
$value ) { funzione ($ value) {base_encode
base2dec ( $value , 256 ) , 62 ) ; dec2base ritorno (base2dec ($ valore, 256), 62);
}
$value ) { funzione base_decode ($ value) {
base2dec ( $value , 62 ) , 256 ) ; dec2base ritorno (base2dec ($ valore, 62), 256);
}
Le ultime due funzioni sono quelli che utilizzano per le conversioni.
Pacchetti e le librerie utilizzate:
Inoltre:
- Un dominio e hosting per ospitare esso (6 €).
- PHP e MySQL (non obbligatorio, è possibile farlo con qualsiasi tecnologia).
- 15 ore del vostro tempo
.
Struttura del sito
Ogni progetto web che si rispetti dovrebbe iniziare descrivendo quello che vogliamo mostrare ai nostri visitatori, di raccogliere tutte le idee, decidere quali veramente interessato a studiare il modo in cui sono di avere nel frontend e terminano con una mappa del sito che indica il flusso per rimanere sul posto di lavoro. Questo sarà il nostro:
Quando un utente va a uno di richiesta http nostro davvero breve di url sarà trasmesso all'interno di uno script commissionato di fare l'intero processo nel mio caso link.php.
Per visualizzare le statistiche per un URL che mi è piaciuto il sistema di bit.ly , quindi copiarlo
. Aggiunta di un "+" alla fine della URL breve, invece di saltare alla direzione lunga statistiche spettacolo. Questo è fatto, come nel caso precedente, portando internamente ad un altro script, stats.php.
Se l'ID che si intende utilizzare per passare il lungo URL o visualizzare statistiche lì, inviare di nuovo a index.php per visualizzare un messaggio di errore del tipo "L'URL non esiste".
Il dominio
Ovviamente dobbiamo trovare un dominio più breve possibile, la maggior parte sono già occupato, ma ricerca e la ricerca in TLD s 'strano si può trovare qualcosa. Ho scelto una. Perché ho un meno di un. Com
e non costa una cosa s '.
.
Database
Molto semplice, solo due tabelle in un mantengono 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 PREDEFINITO 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,
`Ora` datetime NOT NULL,
) NOT NULL, `Nazione` varchar (255) NOT NULL,
) NOT NULL, `Marca` varchar (255) NOT NULL,
) NOT NULL, `Modello` varchar (255) NOT NULL,
` ) , PRIMARY KEY (`id`),
Idurl `` KEY (`idurl`, `time`)
MyISAM DEFAULT CHARSET= latin1; ) ENGINE = MyISAM PREDEFINITO charset = latin1;
Configurazione di Apache
Come abbiamo discusso quando vogliamo qualcuno di andare a qualsiasi URL del nostro sito il tipo
http://tudominio.com/prueba3
Internamente redirect script è link.php che sarà responsabile per l'elaborazione della richiesta. Allo stesso modo se qualcuno visite
http://tudominio.com/prueba3+
statistiche mostreranno che URL (se presente). Configurare Apache per tener conto di tutte queste caratteristiche, mod_rewrite è nostro amico per farlo. Nel mio caso ho fatto che, se la chiamata non è uno script php, oppure un'immagine o un file non un css javascript o ha il segno "+", è quello di link.php. Se avete il "+" andrà stats.php.
RewriteEngine on RewriteCond% {} REQUEST_URI! ^ / (. *). Php $ RewriteCond% {} REQUEST_URI! ^ / Css \ / (. *) $ RewriteCond% {} REQUEST_URI! ^ / Js \ / (. *) $ RewriteCond % {} REQUEST_URI! ^ / (. *) \ + $ RewriteCond% {} REQUEST_URI! ^ / images \ / (. *) $ RewriteRule ^ (. +) / link.php id = $ 1 RewriteCond% {REQUEST_URI} ^ / (. *) \ + $ RewriteRule ^ (. +) / stats.php id = $ 1 Immagine e design
Per la progettazione, o lo fai da te o se sei un creativo come ho rifiutato un download template superchula di freecsstamplates.org e di adattarlo alle proprie esigenze, io non vado più in dettaglio.
Creare URL brevi
Il primo script nell'applicazione. Un semplice modulo in cui l'utente inserisce l'URL che si desidera abbreviare e ridurre presentare ... l'integrazione del sistema con controllo del malware che ha spiegato qualche giorno fa
.
; $ URLBase = "";
isset ( $_POST [ 'url' ] ) ) { if ( isset ($ _POST ['url'])) { [ 'url' ] ; $ Url = $ _POST ['url'];
try {
substr ( $url , 0 , 4 ) != "http" ) if ( substr ($ url, 0, 4)! =
"http") . $url ; . $ Url = "http://" $ URL;
GoogleSafeBrowsing ( 'ABQIAAAAQYvf-54bCBMuGY20SeONVxQ236Mc_IjryQBl-W_Repaw3fCykA' , true ) ; $ Classe = new GoogleSafeBrowsing ('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, $ partite); ( $matches [ 1 ] ) ; $ HtmlTitle =
Trim ($ matches [1]); }
; $ Query = "select * from url dove url = '$ url'";
-> Execute ( $query ) ; $ R = $ conn -> Execute ($ query);
$rs -> recordcount ( ) > 0 ) { if ($ rs -> recordcount ()> 0) {
-> fields [ 'id' ] ; $ Id = $ rs -> campi ['id'];
{ Else {}
; $ Query = "INSERT INTO URL (url, titolo) 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;
}
}
Abbiamo aggiunto un piccolo assegno. Se l'URL che si desidera aggiungere esiste già, di nuovo lo stesso URL breve, ho preso questa decisione, si può fare quello che vuoi. Anche ottenere il titolo di URL finale di un riferimento alla stessa questione di semplicità visiva
.
Inoltro URL lunghi
Abbiamo il nostro URL breve, ci sarà ora inoltrare richieste ad esso alla fine. Ricordiamo che il nostro Apache avremo reindirizzare la richiesta di link.php id = XXXX. I nostri script aggiorna anche visite Statistiche della URL.
isset ( $_GET [ 'id' ] ) ) { LANG = <pre
"php"> if
( isset ($ _GET ['id'])) { [ 'id' ] ; $ IDB = $ _GET ['id'];
$idb ) +0 ; $ Id = base_decode ($ IDB) +0;
try {
; $ Query = "select * from url dove id = $ id";
-> Execute ( $query ) ; $ R = $ 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, $ partite)> 0) [ 1 ] ; $ Hostreferer = $ matches [1];
$_SERVER [ 'HTTP_USER_AGENT' ] ) ; $ Terminal = getMarcaModelo ($ _SERVER ['HTTP_USER_AGENT']);
[ 'marca' ] ; $ Marca = $ fine ['marca'];
[ 'modelo' ] ; $ Modello = $ fine ['modello'];
$ip ) ; $ Temp = getGeoCodeAndPais ($ ip);
[ 'code' ] ; $ Codpais = $ temp ['codice'];
[ 'pais' ] ; $ Paese = $ temp ['country'];
$ Query = "INSERT INTO statistiche (idurl, codpais, referer, ua, ora, paese, marca, modello, hostreferer) VALORI
($ Id, '$ codpais', '$ referer', '$ u', now (), '$ nazione', '$ marca', '$ model', '$ hostreferer') ";
-> Execute ( $query ) ; $ Rs2 = $ conn -> Execute ($ query);
"HTTP/1.x 301 Moved" ) ; intestazione ("301 Moved HTTP/1.x"); { Else {}
"Location: http://iraurl.me/index.php?err=1" ) ; intestazione ("Location: http://iraurl.me/index.php?err=1"); }
exception $e ) { } Catch (Exception $ e) {
"Location: http://iraurl.me/index.php?err=2" ) ; intestazione ("Location: http://iraurl.me/index.php?err=2"); }
}
"Location: http://iraurl.me/index.php?err=1" ) ; intestazione ("Location: http://iraurl.me/index.php?err=1");
Vedete, se l'URL non esiste per index.php reindirizzare l'utente con un messaggio di errore. Hai bisogno di due funzioni aggiuntive, che ci restituiscono le informazioni del paese di origine di un terminale IP e dati utente (SPOSTA o web). Non entrare nei dettagli sull'installazione Maxmind GeoLite Paese o Würfl / Tera-Würfl .
$ip ) { funzione getGeoCodeAndPais ($ ip) {
dirname ( __FILE__ ) . "/geoip/geoip.inc" ) ; require_once ( dirname (__ FILE__) "/ geoip / geoip.inc".); "/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 serie ('paese' =>
$ Paese, "codice" =>
$ codpais); }
$ua ) { funzione getCapabilities ($ ua) {
dirname ( __FILE__ ) . "/Tera-WURFL/TeraWurfl.php" ) ; require_once ( dirname (__ FILE__) "/ Tera-WURFL/TeraWurfl.php".); TeraWurfl ( ) ; $ WurflObj TeraWurfl = new ();
-> GetDeviceCapabilitiesFromAgent ( $ua ) ; WurflObj abbinato = $ $ -> GetDeviceCapabilitiesFromAgent ($ ua);
-> capabilities ; $ Cella = $ wurflObj -> capacità;
; return $ mobile;
}
Statistiche
La teoria è la stessa. Se vi è un carico URL i dati, se non reindirizzare la casa. Nel nostro caso usiamo il linguette componente jQueryUI di organizzare diversi tipi di dati che consentono di visualizzare e aggiungere i pulsanti per esportare in Excel e PDF.
( $_GET [ 'id' ] , 0 , strlen ( $_GET [ 'id' ] ) -1 ) ; $ IDB =
substr ($ _GET ['id'], 0, strlen ($ _GET ['id']) -1); $idb ) +0 ; $ Id = base_decode ($ IDB) +0;
; $ Query = "select * from url dove id = $ id";
-> Execute ( $query ) ; $ R = $ conn -> Execute ($ query);
$rs -> recordcount ( ) > 0 ) { if ($ rs -> recordcount ()> 0) {
. $idb ; $ URLBase = "http://iraurl.me/" $ 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 (*) from statistiche dove come NREGS idurl = $ id";
-> Execute ( $query ) ; $ R = $ conn -> Execute ($ query);
-> fields [ 'nregs' ] ; $ Clicks = $ rs -> campi ['NREGS'];
{ Else {}
"Location: http://iraurl.me/index.php?err=1" ) ; intestazione ("Location: http://iraurl.me/index.php?err=1"); }
Molto semplice.
La cosa più difficile è quello di mostrare i grafici con FusionCharts. Per ciascuno deve aggiungere del codice html:
<div id="chartClicks"> </ div>
<script type="text/javascript">
var mychart = new FusionCharts ("images/Charts/FCF_Column3D.swf", "idChartClicks", "430", "400", "0", "1");
myChart.setDataURL (escape ("xml.php t = cli & id = '$ IDB..'?"));
myChart.setTransparent (true);
myChart.render ("chartClicks");
</ Script>
Lo script xml.php restituirà i dati nel formato appropriato per FusionCharts. Eg
$ Query = "select GIORNO (tempo) come giorno, mese (tempo) come mese, anno (tempo) come anno, count (*) come nclicks
da statistiche
dove idurl = $ id
gruppo per anno, mese, giorno
ordinare per tempo ";
-> Execute ( $query ) ; $ R = $ conn -> Execute ($ query);
; $ Xml = '<grafico caption = "Clic" rotateNames = "1" xAxisName = YAxisName "Giorno" = "Clic" showNames = "1" decimalPrecision = "0" formatNumberScale chartLeftMargin = "0" = "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 = "'. $ R ['giorno']." / ". $ R ['mese']." / ". $ R ['anno']. '" Value = "' . $ r ['nclicks'] '"color =" # a1a1a1 "/>'.;
}
; $ Xml = '</ Grafico>'.;
Io do solo un esempio, il resto si ride da soli
.
Decifrare URL brevi
Tutti i sistemi di abbreviare il lavoro di URL come racconto in questo articolo, fare una HTTP/301 reindirizzamento all'URL originale.
Dal URL breve può sapere che è l'URL originale reindirizza a seguito di lo fa. Molto semplice con PHP e serve anche per integrazione nel nostro API di malware , evitare problemi con l'URL finale.
$url ) funzione get_web_page ($ url)
{
, 'User_agent' => 'ragno',
, 'Max_redirects' => 10,
, 'Timeout' => 120,
));
( $url , false , $context ) ; $ Page = @
file_get_contents ($ url, false, $ contesto); $page != false ) if ($ page! = false)
'content' ] = $page ; $ Risultato ['content'] = $ pagina;
! isset ( $http_response_header ) ) else if (! isset ($ http_response_header)) ; // Bad url, timeout restituire null; / / Bad url, timeout
/ / Salva l'intestazione
'header' ] = $http_response_header ; $ Risultato ['header'] = $ http_response_header;
/ / Ottiene l'ultimo * codice di stato HTTP *
( $http_response_header ) ; $ Nlines =
count ($ http_response_header); $i = $nLines -1 ; $i >= 0 ; $i -- ) for ($ i = $ NRigheVuote -1, $ i> = 0, $ i -)
{
[ $i ] ; $ Riga = $ http_response_header [$ i];
{
( ' ' , $line ) ; $ Risposta =
esplodere ('', $ line); 'http_code' ] = $response [ 1 ] ; $ Risultato ['HTTP_CODE'] = $ risposta [1];
break;
}
}
; return $ risultato;
}
; $ Url = "";
isset ( $_POST [ 'url' ] ) ) { if ( isset ($ _POST ['url'])) { [ 'url' ] ; $ Url = $ _POST ['url'];
$url ) ; $ Dati = get_web_page ($ url);
$datos ) { if ($ data) {
[ 'header' ] ; $ Intestazioni = $ dati ['header'];
( $url ) ; $ Url =
matrice ($ url); $headers as $head ) { foreach ($ intestazioni come $ testa) {
( " " , $head ) ; $ Temp =
esplodere ("", $ head); = $temp [ 1 ] ; $ Url [] = $ temp [1];
}
}
; $ HtmlTitle = "";
'/(.*)< \/ title>/is' , $datos [ 'content' ] , $matches ) ; preg_match ('/ (*) <\ / title> / E'. ', $ data [' content '], $ partite); ( $matches [ 1 ] ) ; $ HtmlTitle =
Trim ($ matches [1]); }
}
Lì, a $ url avere la lista di quelli che stanno saltando, fino alla fine.
Api
Oggi tutto deve avere Api . Per le statistiche è molto semplice, il proprio XML generiamo a consumare con FusionCharts consente ai clienti esterni per la sua alimentazione. Per creare s 'URL breve distanza, è sufficiente creare un file di api.php:
isset ( $_GET [ 'url' ] ) ) { if (isset ($ _GET ['url'])) {
$_GET [ 'url' ] ) ; $ URL = UrlDecode ($ _GET ['url']);
try {
; $ 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, $ partite);
is_array ( $matches ) && count ( $matches > 0 ) ) se (is_array ($ risultati) && count ($ match> 0))
$matches [ 1 ] ) ; $ HtmlTitle = trim ($ matches [1]);
}
; $ Query = "select * from url dove url = '$ url'";
->Execute ( $query ) ; $ R = $ conn -> Execute ($ query);
$rs ->recordcount ( ) > 0 ) { if ($ rs -> recordcount ()> 0) {
->fields [ 'id' ] ; $ Id = $ rs -> campi ['id'];
{ Else {}
; $ Query = "INSERT INTO URL (url, titolo) 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 "ERRORE";
}
}
Tutto qui. Non dimenticare di integrare anche il sistema da malware.
Conclusioni
Beh, tutta questa roba e perché?. E 'semplice, in modo da poter vedere che oggi la tecnologia è a disposizione di tutti, è semplice e veloce per creare un progetto su Internet, c'è di tutto in ogni angolo, la tecnologia non è importante, ciò che conta è il modo spostare la tecnologia di monetizzare quel prodotto e realizzare un profitto da esso.
Ora ho il mio progetto in corso superchulo solo mi è costato circa 15 ore. Ho messo un po 'di Adsense qui e là. Così ora che cosa? Per attendere le persone a entrare e mi fanno un milionario?
E 'molto più complicato di così, come tutti sapete, in primo luogo si deve avere una massa di utenti elevato che dà movimento al progetto e poi si deve ottenere la maggior parte di loro sono persone normali, persone non tecniche, gli utenti che non pagano per niente o fare clic nella pubblicità
.
Oggi, su Internet, come in qualsiasi attività commerciale, marketing e tecniche di vendita sono molto più importanti di quanto la tecnologia stessa, è difficile ammetterlo, ma è così. E 'inutile avere il miglior prodotto in tutto il mondo, se non si ottiene la gente a usare e lasciare i soldi, pianura. Se si hanno le competenze giuste per spostare il business, non ti preoccupare, la tecnologia ti dà alcun partner per una piccola tassa, ma mettere nelle mani di un altro dell'intera strategia di vendita la vostra azienda non è così chiaro non è vero?.
Spero che tu servi qualcosa l'articolo. Volevo mostrare praticamente come l'utilizzo di alcune librerie che si possono ottenere senza alcun costo è possibile fare qualcosa di veramente utile e funzionale, con il minimo sforzo. Certo si disegna qualche idea.
Ci scusiamo per il rotolo
Nel costo finale mi ha molto di più per scrivere l'articolo che lo implementano.