• STATISTIQUES
  • Il y a eu un total de 3 membres et 15080 visiteurs sur le site dans les dernières 24h pour un total de 15 083 personnes!


    2 membres se sont inscrits dans les dernières 24h!


    Membres: 2 447
    Discussions: 3 590
    Messages: 32 838
    Tutoriels: 77
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Le site du zero
    Découvrez gratuitement la programmation (C, C++, PHP, MySQL, XHTML, CSS...), Linux, le Mapping, la modé...
    Programmation
    [EN] HackQuest
    Logic: 12, JavaScript: 14, Applet: 6, CrackIt: 13, Crypto: 11, Internet: 3, Exploit: 7, Stegano: 12, Flash: 1, Programmi...
    Challenges
    [EN] Astalavista
    JavaScript: 1, Exploit: 2, Crypto: 34, CrackIt: 15, Stegano: 8, Programming: 12, Logic: 36, Special: 6, Science: 4, Info...
    Challenges
    [EN] Listbrain Version 3
    Site proposant 66 challenges présentés dans une liste mélangée.
    Challenges
    [FR] InfoMirmo
    Apprentissage de l'informatique par l'intermédiaire de challenges de sécurité. Venez app...
    Hacking
    [FR] Infomirmo
    Challenge présenté sous la forme de 6 niveaux de difficultés diverses et variées avec chacun plusieurs chall...
    Challenges
    [EN] phrack
    Lot's of stuff !
    Hacking

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[Php] Raccourcir ses urls
22-02-2013, 23h45 (Modification du message : 23-02-2013, 14h09 par InstinctHack.)
Message : #1
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
[Php] Raccourcir ses urls
Voilà, c'est un simple fichier php à lancer avec deux paramètres get
mode = c #en mode création
mode = r #en mode redirection

url = url #si c'est en mode création
url = id #si c'est en mode redirection

On peux pas mal améliorer le truc, là c'est brut, mais fonctionnel Wink
Encore une fois, n'hésitez pas pour les retours \o/


Code PHP :

<?php
if(    isset($_GET['mode']) && is_string($_GET['mode']) &&
        isset($_GET['url']) && is_string($_GET['url'])
)
{
    $url=basename(__FILE__);
    $pathfile="./table.txt";
    if(!file_exists($pathfile))
    {
        $monfichier = fopen($pathfile, 'w+');
        fclose($monfichier);
    }
    if($_GET['mode']=="c")    
    {
        echo "tu veut creer".'<br />'.PHP_EOL;
        $unique=false;
        while(!$unique)
        {
            $id=base64_encode(openssl_random_pseudo_bytes(5));
            if(isset($found)){unset($found);}
            foreach(file($pathfile) as $key=>$value)
            {
                $value=explode("\t",trim($value));
                if($value[0]==$id)
                {
                    $found=true;
                }
                if(urldecode($value[1])==$_GET['url'])
                {
                    echo "<a href='$url?mode=r&url=$value[0]'>Voilà ton url qui existait déjà</a>";
                    exit();
                }
            }
            if(!isset($found)){$unique=true;}
        }
        $monfichier = fopen($pathfile, 'a');
        fwrite($monfichier,$id."\t". urlencode($_GET['url']).PHP_EOL);
        fclose($monfichier);
        echo "<a href='$url?mode=r&url=$id'>Voilà ton url</a>";
    }
    elseif($_GET['mode']=="r")
    {
        foreach(file($pathfile) as $key=>$value)
        {
            $value=explode("\t",trim($value));
            echo $value[0].' : '.$_GET['url'].'<br />';
            if($value[0]==$_GET['url'])
            {
                header("Location: ".urldecode($value[1]));
            }
        }
    }
    else
    {
        echo "...";
    }
}
else
{
    echo "???";    
}
 
Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!"
j'ai pas compris pourquoi, je croyais qu'on était dans la même classe
+1 (1) -1 (0) Répondre
23-02-2013, 13h21
Message : #2
Sh4dows Hors ligne
Tweetos
*



Messages : 293
Sujets : 5
Points: 49
Inscription : Dec 2012
RE: [Php] Raccourcir ses urls
C'est pas trop mal, mais comme tu l'as dis c'est loin d'être parfait !
Par exemple ceci ne devrait pas être possible :

1J5JkBc= http%3A%2F%2Fgoogle.fr%2F
6CHp0gQ= http%3A%2F%2Fgoogle.fr%2F
4h6dXwQ= http%3A%2F%2Fgoogle.fr%2F
JVEda4Q= http%3A%2F%2Fgoogle.fr%2F
9XoJtBQ= http%3A%2F%2Fgoogle.fr%2F
COCqdpI= http%3A%2F%2Fgoogle.fr%2F
BvgYwOU= http%3A%2F%2Fgoogle.fr%2F
PibJXUo= http%3A%2F%2Fgoogle.fr%2F
MFOHwO8= http%3A%2F%2Fgoogle.fr%2F
fBxDhbk= http%3A%2F%2Fgoogle.fr%2F
DaaniYU= http%3A%2F%2Fgoogle.fr%2F
odZwXwA= http%3A%2F%2Fgoogle.fr%2F
iJXS37s= http%3A%2F%2Fgoogle.fr%2F
db1QVbY= http%3A%2F%2Fgoogle.fr%2F
PEEeUF0= http%3A%2F%2Fgoogle.fr%2F
mA/PXi0= http%3A%2F%2Fgoogle.fr%2F
thhUr54= http%3A%2F%2Fgoogle.fr%2F
dv24QnA= http%3A%2F%2Fgoogle.fr%2F
edBgey4= http%3A%2F%2Fgoogle.fr%2F
AX+W5/o= http%3A%2F%2Fgoogle.fr%2F
F/YP3Pw= http%3A%2F%2Fgoogle.fr%2F
1zV1Hc0= http%3A%2F%2Fgoogle.fr%2F
GYMvxug= http%3A%2F%2Fgoogle.fr%2F
RwIMEwU= http%3A%2F%2Fgoogle.fr%2F
bv+jNYI= http%3A%2F%2Fgoogle.fr%2F
nHsdaLM= http%3A%2F%2Fgoogle.fr%2F
k/5Y6M0= http%3A%2F%2Fgoogle.fr%2F
S+nbBrk= http%3A%2F%2Fgoogle.fr%2F
DmU7N+g= http%3A%2F%2Fgoogle.fr%2F
lMD2Xp8= http%3A%2F%2Fgoogle.fr%2F
Jb6/LcE= http%3A%2F%2Fgoogle.fr%2F
M2ZGoGw= http%3A%2F%2Fgoogle.fr%2F
N1vN01Q= http%3A%2F%2Fgoogle.fr%2F
Urina3g= http%3A%2F%2Fgoogle.fr%2F
yyaN0Ks= http%3A%2F%2Fgoogle.fr%2F
GJN6Hk4= http%3A%2F%2Fgoogle.fr%2F
R1+p5Zo= http%3A%2F%2Fgoogle.fr%2F
tmmcVWI= http%3A%2F%2Fgoogle.fr%2F
Qclw708= http%3A%2F%2Fgoogle.fr%2F
CQOgk0c= http%3A%2F%2Fgoogle.fr%2F
cBSfrHw= http%3A%2F%2Fgoogle.fr%2F
QXqFLmg= http%3A%2F%2Fgoogle.fr%2F
dRqjImE= http%3A%2F%2Fgoogle.fr%2F
j9ggR98= http%3A%2F%2Fgoogle.fr%2F
sVS2oNo= http%3A%2F%2Fgoogle.fr%2F
VxAuGKg= http%3A%2F%2Fgoogle.fr%2F
kc7H8ns= http%3A%2F%2Fgoogle.fr%2F
Faites ce que je dis et non ce que je fais !
+1 (0) -1 (0) Répondre
23-02-2013, 14h09
Message : #3
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
RE: [Php] Raccourcir ses urls
C'est corrigé Wink
Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!"
j'ai pas compris pourquoi, je croyais qu'on était dans la même classe
+1 (0) -1 (0) Répondre
23-02-2013, 15h20 (Modification du message : 23-02-2013, 15h22 par Sh4dows.)
Message : #4
Sh4dows Hors ligne
Tweetos
*



Messages : 293
Sujets : 5
Points: 49
Inscription : Dec 2012
RE: [Php] Raccourcir ses urls
(23-02-2013, 14h09)khaled a écrit : C'est corrigé Wink

Cool, du coup j'ai apporté quelques modifications notamment l'ajout d'une regex afin de checker l'url Wink

En ce qui concerne l'utilisation, elle reste la même :
Citation :?m=c&u=http://ex.ex/
?m=r&u=...
Code PHP :

<?php
    if (!empty($_GET['m']) && !empty($_GET['u'])){
        $pathfile="./table.txt";
        if(!file_exists($pathfile))
            fclose(fopen($pathfile, 'w+'));
        if($_GET['m'] == 'c' && preg_match("#^(https?):\/\/(www.)?[a-z0-9]*.[a-z]{2,4}\/#", $_GET['u']))
        {
            $unique = false;
            while (!$unique)
            {
                $id=base64_encode(openssl_random_pseudo_bytes(5));
                if(isset($found)){unset($found);}
                foreach(file($pathfile) as $key=>$value)
                {
                        $value=explode("\t",trim($value));
                        if($value[0] == $id)
                            $found=true;
                        if(urldecode($value[1]) === $_GET['u'])
                        {
                            echo "<a href='$url?m=r&u=$value[0]'>Your link !</a>";
                            exit();
                        }
                }
                if(!isset($found))
                    $unique=true;
            }
            $monfichier = fopen($pathfile, 'a');
            fwrite($monfichier,$id."\t". urlencode($_GET['u']).PHP_EOL);
            fclose($monfichier);
            $url=basename(__FILE__);
            echo "<a href='$url?m=r&u=$id'>Your link !</a>";
        }
        elseif($_GET['m'] == 'r')
        {
            foreach(file($pathfile) as $key=>$value)
            {
                $value=explode("\t",trim($value));
                echo $value[0].' : '.$_GET['u'].'<br />';
                if($value[0] === $_GET['u'])
                    header("Location: ".urldecode($value[1]));
            }
        } else { echo "Invalid URL or Unknown mode !"; }
    } else { echo "Usage : ?m=c&u=http://example.com/"; }
 
 
Faites ce que je dis et non ce que je fais !
+1 (1) -1 (0) Répondre
23-02-2013, 15h53 (Modification du message : 23-02-2013, 16h04 par InstinctHack.)
Message : #5
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
RE: [Php] Raccourcir ses urls
sympa pour les modifs, mais j'ai des doutes sur ta regex...
www n'est pas le seul possible Wink
et pour ton nom de domaine c'est "+" pas "*" car il faut AU-MOINS un caractère
Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!"
j'ai pas compris pourquoi, je croyais qu'on était dans la même classe
+1 (0) -1 (0) Répondre
23-02-2013, 17h46 (Modification du message : 23-02-2013, 17h47 par Sh4dows.)
Message : #6
Sh4dows Hors ligne
Tweetos
*



Messages : 293
Sujets : 5
Points: 49
Inscription : Dec 2012
RE: [Php] Raccourcir ses urls
(23-02-2013, 15h53)khaled a écrit : sympa pour les modifs, mais j'ai des doutes sur ta regex...
www n'est pas le seul possible Wink
et pour ton nom de domaine c'est "+" pas "*" car il faut AU-MOINS un caractère

Tu as raison, elle est loin d'être parfaite et je n'ai pas géré les sous domaine Tongue

Edit : Nouvelle REGEX
Code :
#^(https?):\/\/(([a-z0-9\-]+)[.])+([a-z]{2,4})\/#
Faites ce que je dis et non ce que je fais !
+1 (0) -1 (0) Répondre
24-02-2013, 14h59 (Modification du message : 24-02-2013, 15h04 par Booster2ooo.)
Message : #7
Booster2ooo Hors ligne
Contributeur
****



Messages : 165
Sujets : 14
Points: 63
Inscription : Aug 2011
RE: [Php] Raccourcir ses urls
Salut, j'ai réécrit vite fait le script pour éviter les boucles for. Je pense que sur un fichier volumineux, ce script est plus performant, à vérifier. Je n'ai par contre pas inclus les modifs de Sh4dows, libre à vous de le faire.

Code PHP :

<?php
    if (isset($_GET))
        $GET= &$_GET ;
    else
        $GET= &$HTTP_GET_VARS ;
       
    if($GET!= false && count($GET) == 2)
    {
        if(isset($GET['mode']) && !empty($GET['mode']) && is_string($GET['mode'])) {
            $mode = $GET['mode'];
        }
        if(isset($GET['url']) && !empty($GET['url']) && is_string($GET['mode'])) {
            $url= addslashes(strip_tags($GET['url'])); // pseudo sécu vite fait
        }
        unset($GET);
        unset($_GET);
       
        if(isset($mode) && !empty($mode) && isset($url) && !empty($url))
        {
            $base=  basename(__FILE__);
            $pathfile = "./table.txt";
            $file = @file_get_contents($pathfile);
            if($file === false) $file = "";
            if($mode == "c")
            {
                $url = urlencode($url);
                $exp = '#(.*)\t'.$url.'[\r\n]#Uim';
                echo "<p>Let's dance!</p><br />";
                if(!preg_match($exp, $file, $matches))
                {
                    $unique = false;
                    $id = 0;
                    while(!$unique)
                    {
                        $id=base64_encode(openssl_random_pseudo_bytes(5));
                        if(stripos($file,$id) === false) $unique = true;
                    }
                    $fs = fopen($pathfile, 'a+');
                    fwrite($fs, "$id\t$url".PHP_EOL);
                    fclose($fs);
                    echo "<a href='$base?mode=r&url=$id'>Here it is!</a>";
                }
                else
                {
                    $id = $matches[1];
                    echo "<p>Already in, bitch! <a href='$base?mode=r&url=$id'>Here it is!</a></p><br />";
                }
            }
           
            elseif($mode == "r")
            {
                $exp = '#'.$url.'\t(.*)[\r\n]#Uim';
                if(!preg_match($exp, $file, $matches)) echo "<p>It doesn't exist</p>";
                else
                {
                    $id = $url;
                    $url = urldecode($matches[1]);
                    header("Location: $url");
                }                
            }            
            else echo "<p>No valid action were found.</p>";
        }
        else echo "<p>Something went wrong.</p>";
    } else echo "<p>Something went wrong.</p>";
?>
 


J'ai toutefois détecté un problème (et j'imagine qu'il est présent dans ton script aussi). Si l'url passée contient un &var=, alors la valeur de $_GET['url'] est tronquée.
+1 (0) -1 (0) Répondre
24-02-2013, 15h54
Message : #8
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
RE: [Php] Raccourcir ses urls
@booster2ooo, je voit l'utilisation de file_get_contens à la place de file, mais le problème est le même, l'intégralité du fichier est chargé dans la ram, et si il excède le quota de php, c'est dead, il faudrais parcourir le fichier soi-meme pour ne charger qu'une ligne à la fois, et encore mieux serais l'utilisation d'une vraie bdd, mais cela serais sorti de mes objectifs Smile

sinon pour le problème de &var= il suffit d'urlencode et urldecode les parametres.
Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!"
j'ai pas compris pourquoi, je croyais qu'on était dans la même classe
+1 (0) -1 (0) Répondre
24-02-2013, 16h53
Message : #9
Booster2ooo Hors ligne
Contributeur
****



Messages : 165
Sujets : 14
Points: 63
Inscription : Aug 2011
RE: [Php] Raccourcir ses urls
En effet, c'est un peu problématique. Pourquoi ne pas utiliser de db, même en flatfile si c'est ça le soucis ?
+1 (0) -1 (0) Répondre
24-02-2013, 17h02
Message : #10
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
RE: [Php] Raccourcir ses urls
facilité de mise de place, un fichier un chmod et puis voilà Smile
Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!"
j'ai pas compris pourquoi, je croyais qu'on était dans la même classe
+1 (0) -1 (0) Répondre
24-02-2013, 19h12
Message : #11
Booster2ooo Hors ligne
Contributeur
****



Messages : 165
Sujets : 14
Points: 63
Inscription : Aug 2011
RE: [Php] Raccourcir ses urls
khaled > un avec sqlite, ca peut pas le faire ?
+1 (0) -1 (0) Répondre
24-02-2013, 19h45
Message : #12
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
RE: [Php] Raccourcir ses urls
si, mais perso, j'essaye d'use le moins possible les bdd, donc pour gérer 1000 urls, ce script avec fichier me vas très bien
Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!"
j'ai pas compris pourquoi, je croyais qu'on était dans la même classe
+1 (0) -1 (0) Répondre
24-02-2013, 20h11
Message : #13
Sh4dows Hors ligne
Tweetos
*



Messages : 293
Sujets : 5
Points: 49
Inscription : Dec 2012
RE: [Php] Raccourcir ses urls
Enfin, avec 1000 urls tu va commencer à perdre en performance..
Faites ce que je dis et non ce que je fais !
+1 (0) -1 (0) Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 3 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut