IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Réduction d'URL


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut Réduction d'URL
    Bonjour,

    Je cherche à crypter une chaine longue pour en faire une chaine cryptée d'une longueur fixe (5 ou 6 caractères). Est-ce possible ?
    Il faudrait donc transformer http://www.google.fr par exemple en 1Tr@Z5
    Pour détailler pourquoi je demande çà. En fait je cherche à faire comme les réducteurs de liens pour mettre des liens sur twitter mais il faut que le code crypté soit unique ce qui sera impossible si 2 utilisateurs chez moi veulent raccourcir le même lien, j'y ajouterais donc un identifiant unique de membre
    Est-ce que vous savez comment font ces sites pour que les liens soient vraiment unique ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    il faut juste comprendre le principe de fonctionnement d'un Réduction d'URL.
    Le principe général de la réduction d'URL consiste à assigner une clé unique de quelques caractères à une page web spécifique.
    Un utilisateur désirant se rendre sur cette page web peut ensuite simplement fournir cette clé à la suite du nom de domaine d'un tel service de réduction,
    qui le redirige (redirection d'URL) alors vers la page appropriée.
    En pratique, c'est assez simple à réaliser.

    Ecriture :
    1/ un simple formulaire pour inscrire l'URL à minifier
    2/ on récupère l'URL
    3/ on crée un identifiant unique urlmini alphanumérique (nombres + minuscules + majuscules + caractères spéciaux = 64 caractères)
    (on vérifie d'abord que cette URL n'est pas déjà inscrite : auquel cas on affiche l'urlmini associé)
    4/ on enregistre les deux dans une table en base de données

    Le lien minifié est de la forme : http://mon-site.com/urlmini

    Lecture :
    1/ dans le .htaccess : un peu d'URLrewriting pour rediriger vers une page du type : /redirectURL.php?urlmini=$1
    2/ Dans redirectURL.php, on récupère urlmini
    3/ on va chercher en BdD l'URL associée à cet urlmini
    4/ on redirige avec un header('location:'.$URL); et le tour est joué.
    Dernière modification par Invité ; 03/09/2015 à 08h17.

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    Merci
    J'ai fait des recherches de mon côté également. Sur le principe on est d'accord mais il y a un léger souci.
    Les reducteurs d'url mettent un code de 6 caractères maximum ce qui limite à 999 999, c'est pas mal mais insuffisant
    Si on convertit l'id (increment mysql du site ajouté) de base 10 en base 64 on obtient beaucoup plus de possibilités car la base 64 utilise les lettres en majuscules et minuscules aussi et donc on peut crypter les id unique sur 6 caractères mais les id pourront atteindre plusieurs milliards sans souci
    Le souci restant que la convertion de base proposé par php est de maximum 36

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par pas30 Voir le message
    Les reducteurs d'url mettent un code de 6 caractères maximum ce qui limite à 999 999
    Faux.

    Qui a parlé d'identifiant numérique ? ou d'auto-incrément ?

    Je parlais bien d'alphanumérique : nombres + minuscules + majuscules + caractères spéciaux.
    • urlmin de 6 caractères => 64 puissance 6 = 68 719 476 736 combinaisons possibles.
    • urlmin de 8 caractères => 64 puissance 8 = 281 474 976 710 656 combinaisons possibles.




    Sinon, en pratique, combien penses-tu en enregistrer ?
    Dernière modification par Invité ; 03/09/2015 à 08h15.

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    Comment on peut transformer un chiffre en base 64 ?
    Exemple : j'ajoute une url elle aura l'id 1 en base de donnée ce qui donnera donc en base 64 ???
    Je cherche justement en php à faire cette conversion de base 10 à base 64, il existe convert_base en php mais çà ne gère que jusqu'à base36

  6. #6
    Invité
    Invité(e)
    Par défaut
    Dialogue de sourds...

    J'ai parlé d'identifiant unique.

    Je n'ai PAS parlé d'id auto-incrémenté.

    La table aura cette structure :
    • id (int 11 unsigned, auto-incrémenté) => celui dont TU parles
    • urlmin (varchar 10) => identifiant alphanumérique dont JE parle !
    • url (varchar 255)

    Et il y a très peu de chance que tu atteignes 100 000 lignes... (s'il ne s'agit que des URLs de ton propre site)

    Au delà ?
    Alors il suffit de SUPPRIMER le champ id de la table ! (après tout, il ne sert à RIEN ici !)

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    Et ton champ alphanumérique (en base 64) tu le créés comment ???
    C'est çà la question en fait
    Tu vas enregistrer l'équivalent en base64 de 1,2,3, etc jusqu'à plusieurs milliards puisque avec la base 64 on va pouvoir coder plusieurs milliards de liens
    Le script que je développe n'est pas pour mon utilisation personnelle, un même lien pourra être insérer plusieurs fois dans mon cas car j'aurais plusieurs utilisateurs ils pourront donc vouloir raccourcir la même url et il faudra des identifiants différents

  8. #8
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Moi je comprends pas :

    Machin encode www.google.fr qui lui donne l'url 123456 (on s'en fout c'est pour l'exemple).

    Truc encode www.google.fr qui lui donne 987654 (on s'en fout, c'est toujours pour l'exemple).

    Question : Si Truc clique sur 132456, qu'est ce qui se passe ? Question encore plus importante, comment sais-tu que l'utilisateur est truc, vu qu'a priori le lien pourra se trouver n'importe où sur le net ?
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  9. #9
    Membre éclairé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2012
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2012
    Messages : 416
    Points : 747
    Points
    747
    Par défaut
    Pourquoi t'obstiner à vouloir encoder en base 64 ?

    Ton champ est alphanumérique (chiffres+ lettres [majuscules, minuscules] et quelques caractères tels que - ou _.

    Tu peux alors utiliser une fonction qui génère ce genre de chaine comme par exemple (ce n'est qu'un exemple trouvé en 2sec sur google) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    /**
     *
     * @param int $l       String length (default is 10)
     * @param int $spec    String complexity :
     *  0 = numbers only
     *  1 = 0 + lowercase letters.
     *  2 = 1 + uppercase letters. This is the default value
     *  3 = 2 + some special chars
     * @return string
     */
    function randomString($l = 10, $spec = 2) {
        $chars = '0123456789';
     
        if(0 < $spec)
            $chars .= 'abcdefghijklmnopqrstuvwxyz';
        if(1 < $spec)
            $chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        if(2 < $spec)
            $chars .= '!:-_+';
     
        $chars_len = strlen($chars) - 1;
     
        $rstring = '';
     
        for ($i = 0; $i < $l; $i++) { 
            $rstring .= $chars[rand(0, $chars_len)]; 
        }
     
        return $rstring;
    }

  10. #10
    Membre éclairé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2012
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2012
    Messages : 416
    Points : 747
    Points
    747
    Par défaut
    Citation Envoyé par pas30 Voir le message
    j'aurais plusieurs utilisateurs ils pourront donc vouloir raccourcir la même url et il faudra des identifiants différents
    ça c'est une erreur, une url est représenté par un identifiant unique sinon tu vas avoir de la redondance...

Discussions similaires

  1. Réponses: 17
    Dernier message: 29/04/2008, 21h53
  2. [PHP-JS] Double Cryptage avec PHP
    Par erreurx dans le forum Langage
    Réponses: 2
    Dernier message: 21/04/2008, 18h22
  3. Réponses: 6
    Dernier message: 08/01/2006, 12h49
  4. cryptage assymetrique de mot de passe(javascript/PHP)
    Par chess132 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 25/10/2005, 13h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo