最近发现我的PR查询程序不能正确获取到PR值了,起初怀疑是国外空间的问题,于是把程序搬到了国内,放在绍兴电信的服务器上还是不行,于是拉到本地环境,神奇的是居然一切正常。
一行行注释掉代码,发现不同平台下URL HASH出来的值是不一样的。
通过百度、google搜索,想找一个可用的hash方法,结果都不行,全部是一样的代码,如下所示:

function HashURL($url){
$SEED = "Mining PageRank is AGAINST GOOGLE'S TERMS OF SERVICE. Yes, I'm talking to you, scammer.";
$Result = 0x01020345;
for ($i=0; $i> 23) & 0x1FF) | $Result << 9;
}
return sprintf("8%x", $Result);
}

经过不断调试,原来是以为运算在64位和32位系统下面有差异,32位系统下位移之后应该被cut掉的bit在64那里就活得好好的.
于是代码再改下:

function app_hash_url($url) {
$seed = "Mining PageRank is AGAINST GOOGLE'S TERMS OF SERVICE. Yes, I'm talking to you, scammer.";
$result = 0x01020345;
for ($i=0; $i> 23) & 0x1FF) | $result << 9;
}
if (PHP_INT_MAX != 2147483647) {
$result = -(~($result & 0xFFFFFFFF) + 1);
}
//$ch=sprintf('8%x', $result);
return sprintf("8%x", $result);
}

OK,结果终于正常了~~、
欢迎访问我的PR查询页面:
http://pr.imox.me

哟?不错哎 订阅小米的RSS Feeds 回去慢慢看^_^