Главная :: Форум :: Web ClipArt :: Поиск :: Статистика :: Топ 10 :: Публикация :: Рекомендовать
netadmin.ws
Панель управления Регистрция свободна! Календарь Список пользователей Часто задаваемые вопросы Поиск по форуму Архив скриптов Главная   
Форум сетевых администраторов
Форум сетевых администраторов Форум сетевых администраторов » Программирование » PHP » Google CheckSum
Предыдущая тема     Следующая тема
Автор
Тема    Новая тема     Ответить на эту тему
jmt
Участник

Зарегистрирован: Jun 2004
Место проживания:
Публикаций: 3
Статус: jmt в оф-лайне
Google CheckSum [сообщение #82297]

Здравствуйте.
У меня сложилась проблема.

Есть два сервера.
На одном правильно вычисляется чек сумма для проверки PR. На другом - нет.


PHP:


function GooglePageRank($url,$dc){
    
$arr = parse_url($url);
    
$url = $arr['host'];
    
$url = "info:".$url;
    
$ch = GoogleCSum($url,0xE6359A60);
    
$rank = "(n/a)";
    if(empty(
$dc)){
        
$host = "66.249.93.104";
    } else {
        
$host = $dc;
    }
    
$hostip = gethostbyname($host);
    
$query = "GET /search?client=navclient-auto&ch=6".$ch."&ie=UTF-8&oe=UTF-8&features=Rank&q=".rawurlencode($url)." HTTP/1.0rn";
    
$query.= "Host: $hostrn"; //$rank=-1;
    
$query.= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)rn";
    
$query.= "Connection: Closernrn";
    
$fp = fsockopen($host,80,$errno,$errstr,30);
    if(
$fp){
        
fputs($fp,$query);
        
$data="";
        while(!
feof($fp)) $data.=fgets($fp,4096); fclose($fp);
        
$data=explode("n",$data);
        foreach(
$data as $line)
        if(!
is_bool(strpos($line,"Rank_1"))){
            
$rank = explode(":",trim($line));
            
$rank=$rank[2];
        }
    }
    return 
$rank;
}

function 
GoogleCSum($s,$key){
    
$v4=$len=strlen($s); $esi=$key; $ebx=$edi=0x9E3779B9; $p=0;
    if (
$len>=12)
    for(
$i=0;$i<floor($len/12);$i++)
    { 
$edi=unsign($edi+ord($s[$p+4])+(ord($s[$p+5]) << 8)+(ord($s[$p+6]) << 16)+(ord($s[$p+7]) << 24));
    
$esi=unsign($esi+ord($s[$p+8])+(ord($s[$p+9]) << 8)+(ord($s[$p+10]) << 16)+(ord($s[$p+11]) << 24));
    
$edx=unsign(($ebx+ord($s[$p+0])+(ord($s[$p+1]) << 8)+(ord($s[$p+2]) << 16)+(ord($s[$p+3]) << 24)-$edi-$esi)^shr($esi,13));
    
$edi=unsign(($edi-$esi-$edx)^($edx << 8));
    
$esi=unsign(($esi-$edx-$edi)^shr($edi,13));
    
$edx=unsign(($edx-$edi-$esi)^shr($esi,12));
    
$edi=unsign(($edi-$esi-$edx)^($edx << 16));
    
$esi=unsign(($esi-$edx-$edi)^shr($edi,5));
    
$edx=unsign(($edx-$edi-$esi)^shr($esi,3)); $ebx=$edx;
    
$edi=unsign(($edi-$esi-$ebx)^($ebx << 10));
    
$esi=unsign(($esi-$ebx-$edi)^shr($edi,15));
    
$v4-=12; $p+=12; }
    
$esi=unsign($esi+$len);
    if (
$v4>=11) $esi=unsign($esi+(ord($s[$p+10]) << 24));
    if (
$v4>=10) $esi=unsign($esi+(ord($s[$p+9]) << 16));
    if (
$v4>=9) $esi=unsign($esi+(ord($s[$p+8]) << 8));
    if (
$v4>=8) $edi=unsign($edi+ord($s[$p+4])+(ord($s[$p+5]) << 8)+(ord($s[$p+6]) << 16)+(ord($s[$p+7]) << 24));
    else
    { if (
$v4>=7) $edi=unsign($edi+(ord($s[$p+6]) << 16));
    if (
$v4>=6) $edi=unsign($edi+(ord($s[$p+5]) << 8));
    if (
$v4>=5) $edi=unsign($edi+ord($s[$p+4])); }
    if (
$v4>=4) $ebx=unsign($ebx+ord($s[$p+0])+(ord($s[$p+1]) << 8)+(ord($s[$p+2]) << 16)+(ord($s[$p+3]) << 24));
    else
    { if (
$v4>=3) $ebx=unsign($ebx+(ord($s[$p+2]) << 16));
    if (
$v4>=2) $ebx=unsign($ebx+(ord($s[$p+1]) << 8));
    if (
$v4>=1) $ebx=unsign($ebx+ord($s[$p+0])); }
    
$ebx=unsign(($ebx-$edi-$esi)^shr($esi,13));
    
$edi=unsign(($edi-$esi-$ebx)^($ebx << 8));
    
$esi=unsign(($esi-$ebx-$edi)^shr($edi,13));
    
$ebx=unsign(($ebx-$edi-$esi)^shr($esi,12));
    
$edi=unsign(($edi-$esi-$ebx)^($ebx << 16));
    
$esi=unsign(($esi-$ebx-$edi)^shr($edi,5));
    
$ebx=unsign(($ebx-$edi-$esi)^shr($esi,3));
    
$edi=unsign(($edi-$esi-$ebx)^($ebx << 10));
    
$esi=unsign(($esi-$ebx-$edi)^shr($edi,15)); return $esi; 
}

function 
shr($x,$y) { 
    
$x=unsign($x); 
    for(
$i=0;$i<$y;$i++) $x=floor($x/2); return $x; 
}

function 
unsign($l) { 
    
$l=intval($l);
    if (
$l>=0){
        return 
$l;
    }else{
        return 
4294967296+$l;
    }
}



Прошу помощи, может кто сталкивался.

jmt добавил 03-07-2006 в 11:30:45:
Вообще, где-то нашёл, говорят, что это связано с битами. Какими битами неизвестно.

jmt добавил 03-07-2006 в 11:33:06:
Форум код немного поковеркал.
$query.= "Host: $hostrn";
вместо rn - \r\n

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 03-07-2006 11:26
Нажмите сюда для просмотра профайла jmt Отправить Персональное сообщение jmt Посетить домашнию страничку jmt! Найти сообщения от jmt Добавить jmt в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя



Формат времени GMT. Текущее время 00:03.
Новая тема   Ответить на эту тему [ Версия для печати Печать | Отправить эту страницу другу/знакомому! Отправить | Получать уведомления об обновлении этой темы Подписка ] Предыдущая тема     Следующая тема
Навигация по форуму:
Оценка темы:

Правила форума:
Вы не можете создавать новые темы.
Вы не можете отвечать на существующие темы.
Вы не можете прикреплять файлы.
Вы не можете редактировать свои сообщения.
HTML теги выкл.
Спец. код вкл.
Смайлики вкл.
[IMG] тег выкл.
 

Page generated in 2.23633194 seconds (99.61% PHP - 0.39% MySQL) with 23 queries.


  Главная :: Форум :: Web ClipArt :: Поиск :: Статистика :: Топ 10 :: Публикация :: Рекомендовать
©NetAdmin.ws, 2001-2026.
Powered by: vBulletin
Copyright ©2000, 2001, Jelsoft Enterprises Limited.