2010-08-06 4 views
1

IGNORE LA QUESTION:algorithme de PHP pour la distribution CDN

Le fichier CSS j'incluais tiré dans les autres fichiers d'où la corrélation * facepalm *


Nous avons le code suivant: pour choisir une référence CDN CNAME par nom de fichier. Il doit renvoyer la même URL à chaque fois en fonction d'un nom de fichier donné. Nous pensions que ce serait assez aléatoire:

<?php 

    function cdn_prefix($fileName) { 
    $number_of_servers = 4; 

    $md5 = md5($fileName); 

    $md5 = substr($md5, 0, 4); 

    $hash_number = base_convert($md5, 16, 10); 

    $server_number = ($hash_number % $number_of_servers) + 1; 

    $server_prefix = '//static' . $server_number . '.' . $_SERVER['SERVER_NAME']; 

    return $server_prefix . $fileName; 
    } 

?> 

Cependant, il semble favoriser le chiffre 3: MD5 http://i35.tinypic.com/jsk3z5.jpg

Peu importe ce que je fais (sel, des bases différentes, multiplication aléatoire, etc.) les résultats headerBG jusqu'à mainNavPipe (sur la capture d'écran) ont tous le même numéro.

Existe-t-il un meilleur algorithme?

EDIT:

Voici les résultats en utilisant même algorithme en utilisant un SHA1 SHA1 http://i34.tinypic.com/4jnfr6.png

appelle partout la même fonction - car elle renvoie l'URL entière et ne montrerait pas statique [1- 4] domaine sauf si par le biais de cette fonction.

Le tableau (pour les tests) est:

FILES = [ 
    '/a/files/image/250.jpg', 
    '/a/files/image/244.jpg', 
    '/a/files/image/247.jpg', 
    '/a/css/global/core.css', 
    '/a/css/global/print.css', 
    '/a/img/global/new_logo.gif', 
    '/a/img/global/book-a-free-survey.gif', 
    '/a/img/global/make_an_enquiry.gif', 
    '/a/img/global/purchase-locks-blue.jpg', 
    '/a/files/image/251.jpg', 
    '/a/img/global/bg.gif', 
    '/a/img/global/headerBg.jpg', 
    '/a/img/global/basketBg.gif', 
    '/a/img/global/arrow.png', 
    '/a/img/global/trolley.gif', 
    '/a/img/global/mainNavBg.gif', 
    '/a/img/global/mainNavCurrentBg.gif', 
    '/a/img/global/mainNavPipe.gif', 
    '/a/img/common/sectionNavBg.jpg', 
    '/a/img/global/nav_arrow.gif', 
    '/a/img/global/footerBg.jpg', 
    '/a/img/global/footerCopyrightBg.jpg', 
    '/a/img/global/footerLogo.jpg' 
] 
+0

wow qui est étrange. Es-tu sûr que ce n'était pas une chose unique? Vous pouvez essayer un meilleur hachage à la place, comme sha256. – Artefacto

Répondre

1

Ce fut probablement une chose unique ou un bug ailleurs.

function cdn_prefix($fileName) { 
    $number_of_servers = 4; 
    $md5 = md5($fileName); 
    $md5 = substr($md5, 0, 4); 
    $hash_number = base_convert($md5, 16, 10); 
    $server_number = ($hash_number % $number_of_servers) + 1; 
    return $server_number; 
} 
$arr = array(1=>0, 2=>0, 3=>0, 4=>0,); 
for ($i = 1; $i < 200000; $i++) { 
    $arr[cdn_prefix("anrg".$i)]++; 
} 
print_r($arr); 

donne:

 
Array 
(
    [1] => 49770 
    [2] => 50090 
    [3] => 50026 
    [4] => 50113 
) 
Questions connexes