begin process at 2012 02 15 23:18:10
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caratère

 > RACCOURCISSEUR D'URL

RACCOURCISSEUR D'URL


 Information sur la source

Note :
4,5 / 10 - par 2 personnes
4,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Chaîne de caratère Classé sous :url, raccourci, raccourcisseur, tinyurl Niveau :Débutant Date de création :05/03/2010 Date de mise à jour :08/03/2010 22:42:43 Vu / téléchargé :3 558 / 172

Auteur : hairai

Ecrire un message privé
Site perso
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Voici une petite source permettant de créer des liens courts à partir de liens complexes.
C'est bien entendu juste une base, vous pouvez l'améliorer si vous le souhaitez.

Tous vos conseils sont les bienvenus

La source est dans le zip,
vous pouvez tester la démo sur http://redir.be

Pour installer cette source il faut une base de donnée MySQL.
Elle peut également nécessiter le cache APC selon la configuration.



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

05 mars 2010 17:58:17 :
hop hop, sans le mot de passe
08 mars 2010 20:31:12 :
- Création des classes pour gerer les URL - Ajout d'une fonction Sanitize - Creation du fichier de configuration - Mise en place d'un choix pour le type de redirection ( simple, 301, html ) - Mise en place d'un choix pour le compteur ( desactivé, simple, cache ) - Modification de le fonction de verification des URL - Modification de l'affichage URL et ainsi que d'autres marques en dur renvoyant directement vers redir.be pour s'adapter à l'environnement où le script a été installé. - Modification de la structure de la base de donnée
08 mars 2010 22:42:44 :
suppression d'un echo de debug

 Sources de la même categorie

ADRESSE ABSOLUE DE LA PAGE EN COURS, AVEC VARIABLES $_GET par Dariumis
Source avec Zip CLASSE D'OBJET DE RECHERCHE DE MOTS DANS DES TABLEAUX ET/OU ... par 8Tnerolf8
RÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBE par tefa24600
Source avec Zip Source avec une capture CONVERTISSEUR DE NOMBRES EN TEXTE par macruz
Source avec Zip Source avec une capture CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGE par Salva9473

 Sources en rapport avec celle ci

Source avec Zip CREATED SOME TINY URL par ledamss
VÉRIFICATION DES URL VALIDE AVEC PHP par dilar
REDIRECTION D'URL par bonhommecrea
CACHER SES LIENS DE L'URL par cod57
LISTER DES LIENS / URLS DEPUIS UN TEXTE par gmni

Commentaires et avis

Commentaire de X_Cli le 07/03/2010 10:21:09 3/10

Je n'ai pas lu les sources en entier, mais rien que le concept est à mon avis pas très bon : pourquoi utiliser une base de données pour qqch d'aussi simple... il est à mon sens bcp plus performant et fiable d'utiliser une arborescence filesystem. Ensuite, la table est très mal concu/optimisée : les champs text flinguent les performances, il n'y a pas d'index etc. Stocker une IP en text, notamment, est ridicule : tu peux la stocker en char(15) si tu veux, ou mieux en unsigned integer et convertir REMOTE_ADDR avec des fonctions comme ip2long.
Je vois également des utilisations de fonction ereg* qui sont considérées comme deprecated.

Je trouve bien en revanche d'avoir pensé à la déduplication des URLs.

Commentaire de X_Cli le 07/03/2010 10:27:30

Si j'ai bien lu ce que j'ai lu, peut être l'ai je raté, mais il n'y a pas de sanitization de l'entrée, ce qui peut être assez rigolo car on peut faire de l'SQL Injection, très facilement.
Par ailleurs, faire deux requêtes SQL à chaque requête de redir est un performance killer très important. Ce genre de compte se fait plutôt, par exemple avec un envoi de trame UDP à un petit script serveur qui compte en RAM et met à jour périodiquement la base de données.

Commentaire de LeFauve42 le 08/03/2010 11:46:26 6/10

Bonjour,

C'est sympa comme point de depart, mais j'ai quelques petites remarques :
- Tes requetes SQL utilisent beaucoup de conversion de collation. Pourquoi ne pas creer directement tes tables en UTF8 plutot que de te trainer le latin1_swedish_ci ?
- Tu n'as pas besoin de stoquer le code dans ta base, puisque tu peux l'obtenir simplement a partir de l'id, et inversement. Comme ca tu n'utilises plus que le champs id pour retrouver tes donnees, qui est deja indexe (les indexes sont importants comme le faisait remarquer X_Cli).
- Le type "LongText" me parait un peu "overkill" pour stoquer une URL. Un VARCHAR(100) devrait suffire, non ?
- Tu n'as aucune protection contre les SQL injection. Regarde un peu les fonctions mysql_escape_string() et mysql_real_escape_string() pour corriger ca.
- Ta fonction CheckURL est plutot maladroite. Tu devrais pouvoir la remplacer par une seule expression reguliere, et comme le disait aussi X_Cli, utiliser les expressions regulieres PERL au lieux des POSIX qui sont obsoletes depuis PHP 5.3. Ca devrait donner quelque chose comme ca :
function CheckURL($url)
{
  return preg_match('@^https?://.+$@i',urldecode(trim($url)),$matches)?$matches[0]:'error';
}
(a tester, mais ca devrait etre bon).
- Ta fonction CheckURL() appelait deux fois urldecode(). Ca peut poser des problemes avec les url contenant des '+' ou des '%' par exemple.
- Faire deux requetes par redirection est quand meme couteux. Si tu veux vraiment garder un compteur, tu peux peut-etre faire renvoyer la redirection avant de faire la seconde requete. La charge sera sensiblement la meme sur tou serveur, mais le client attendra un peu moins longtemps.

Voila, il doit y avoir d'autres ameliorations, mais c'est deja un bon depart :o)

Bon courrage,
Eric

Commentaire de X_Cli le 08/03/2010 13:03:16

En fait, j'aurai plutôt dit que c'est le champ id qui ne sert à rien, puisqu'un code, a fonctionnellement la nécessité d'être unique (au passage une contrainte de type UNIQUE sur code si on la met pas en clé primaire est nécessaire).
Ensuite, j'ajouterai même que l'utilisation de regexp tout court pour tester si ca commence par http:// ou https:// est aussi excessif : substr ou substr_compare est suffisant.
VARCHAR(100) est trop court pour une URL. Les RFC disent qu'un nom de domaine fait maximum 255 caractères. Il faut ajouter ensuite la requête plus la query string. Je dirais qu'un VARCHAR(1000) est adéquat (depuis mysql 5.x (x>=1 il me semble), les varchar peuvent faire plus de 255).
Faire les requêtes après l'envoi des headers ne changera rien : le navigateur (ou même le serveur web (apache + mod_deflate par exemple)) va attendre la fin de chargement de la page pour interpréter (réciproquement envoyer).

Commentaire de hairai le 08/03/2010 20:37:51

Bonjour,

tout d'abord merci pour vos commentaires constructifs.

L'intérêt de la BDD est de prévoir de futures améliorations, comme un panel d'administration, etc
Effectivement la table était assez crade, j'ai modifié la structure pour cette version.
Pour ce qui est de la sanitization, je l'ai également ajoutée.
Pour le compteur étant donné que le site de base n'était pas trés visitée ce n'était pas dérangeant,
maintenant, il est configurable, et il y a la possibilité de le desactiver, de l'utiliser en mode simple ou de l'utiliser avec APC,
le principe est simple, les informations sont stockées dans un tableau en cache jusqu'à atteindre une limite configurable,
puis tout est ajouté dans la base. Cela permet de gagner en performances.
La table est également maintenant en UTF-8.
Merci LEFAUVE42 pour ta fonction de verification des URL, je l'ai ajoutée quasiment telle quelle, elle marche bien :)

Voila voila, encore une fois merci et n'hésitez pas à me donner vos impressions sur ce nouveau code :)

Commentaire de gillardg le 15/04/2010 14:28:38

salut , ça marche :)
mettre tous les string dans un fichier séparé pour une traduction facilitée

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Générer un nombre aléatoire [ par Mikonyx ] slt,pour générer un nombre aléatoire, j'utilise la commande:srand(time());$url=rand(1,$x);echo $url; $x ayant été déjà défini avant...Ca fonctionne, m nouveau site [ par vinceoli ] Voilà j'ai fait un site sur php et javascript qui est presque finit j'espère que vous y ferez un tour Mercihttp://www.vinceoli.fr.st Forum ? [ par Michael ] Quelqu'un sait comment marche le forum de arnotic ? Je comprends rienQuand je lance index.php3, j'ai une page blanche ! (j'ai essayé avec easyphp et s Aide pour un débutant.. [ par KOU ] Bonjour les gars !! j'ai besoin de vous.. J'arrive pas à comprendre les url genre :http://site.com/?rub=imagepour avoir une url de ce genre la il fait IP variable et url fixe [ par omnikod ] Vous avez une connexion ADSL ?Vous avez un serveur Web ?Vous avez une IP dynamique et vous voulez pouvoir acceder à votre site par une adresse du styl Nouvel hebergeur gratuit [ par pitap0 ] Hebergement gratuit de site en PHP et en ASP avec upload, sendmail, bdd et GD.Composant a ajouter selon votre souhait.C'est ici stopper le chargement de la page [ par fabiin ] Salutje voudrai connaitre l'equvalent de response.enden phpen grospour arrêter l'execution du code@+Fabs12W MySQL : LongText [ par fabiin ] Salut,g un compte sur freedans phpmyadmin, je voudrai un champ texte qui puisse contenir un long messageje met donc LONGTEXT mais ca ne change rien a PROG-Zone, la programmation sous tous les langages [ par sebrs1 ] Salut à tous les développeurs, je viens de mettre en ligne mon tout nouveaux site qui servira à tout le monde quelque soit le langage dans lequel vous Pb de passage de variables aux pages php [ par PsychoPat ] Bonjour, je viens d'installer sur ma passerelle Linux un serveur Apache/PHP/MySQL. Après 2 jours de galère le voilà enfin qui marche. Mais il y a un p


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales