Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Нужна помощь в скрипте каталога CNCAT 4.4.2

76K
07 февраля 2012 года
fatresh
12 / / 07.02.2012
Нужна помощь в скрипте каталога CNCAT 4.4.2
Не отображается PR сайтов, помогите поправить файл
check.php
[FONT="Comic Sans MS"]В данной функции я поменял ссылки тулбара гугла но всё равно не работает[/FONT]
отрывок кода
Код:
<?php
function get_pr($url, $timeout = 30)
{
    global $CNCAT;
    $result=array("",-1);
   
    if (($url.""!="")&&($url.""!="http://"))
    {
        // check for protocol
        if (cn_substr(cn_strtolower($url),0,7)!="http://")
        {
            $url="http://".$url;
        }

        $url=rtrim($url, "/");
        //$url="info:".$url;
         
          $checksum=checkHash(hashUrl($url));//cn_GoogleCH(cn_strord($url));

        $checksum = ($checksum >= 0? $checksum: 4294967296 + $checksum);
         
        $contents="";

        // let's get ranking
        // this way could cause problems because the Browser Useragent is not set...
        if ($CNCAT["config"]["check_method"] == 0 && function_exists("fsockopen"))
        {
$google_url="/tbr?features=Rank&sourceid=navclient-ff&client=navclient-auto-ff&amp;ch={$checksum}&q=info:".$url; // url to get from google
//$google_url="/search?client=navclient-auto&ch={$checksum}&features=Rank&q=info:"  . $url; // url to get from google
            // Creating socket  
            $address = "toolbarqueries.google.com";
            if ($timeout>0)
                $socket = @fsockopen($address, 80, $errno, $errstr, $timeout);
            else
                $socket = @fsockopen($address, 80, $errno, $errstr);
            if (!$socket)
            {
               $contents="Connection unavailable";
               break;
            }
            $request = "GET ".$google_url." HTTP/1.0\r\n";
            fputs($socket, $request);
            fputs($socket,"Accept: */*\r\n");
            fputs($socket,"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n");
            fputs($socket,"Host: ".$address."\r\n\r\n");
            fputs($socket,"Connection: Close\r\n");
           
            // Response
            while (!feof($socket))
                $contents .= fgets($socket, 2048);
            fclose ($socket);
           
            $contents = strstr( $contents,"Rank" );
           
        }
        else
        {
    //        $google_url="http://www.google.com/search?client=navclient-auto&ch={$checksum}&features=Rank&q=info:"  . $url;
$google_url="http://toolbarqueries.google.com/tbr?features=Rank&sourceid=navclient-ff&client=navclient-auto-ff&amp;ch={$checksum}&q=info:".$url; // url to get from google

            if ($handle=@fopen($google_url,"rb"))
            {
                    while(true):
                            $data=fread($handle,8192);
                            if (cn_strlen($data)==0):
                                    break;
                            endif;
                            $contents.=$data;
                    endwhile;
                    fclose($handle);
            }
            else
                $contents="Connection unavailable";
        }
        $result[0]=$contents;
        // Rank_1:1:0 = 0
        // Rank_1:1:5 = 5
        // Rank_1:1:9 = 9
        // Rank_1:2:10 = 10 etc
        $p=explode(":",$contents);
        if (isset($p[2]))
        {
            $result[1]=$p[2];
        }
    }
   
    return $result;
}
?>
76K
07 февраля 2012 года
fatresh
12 / / 07.02.2012
Тут ещё функция определения чексуммы и другой хрени в которой я не шарю =)
check.php
отрывок кода
Код:
<?php
function cn_calcRankPR($url, &$comment)
{
 
    define('GOOGLE_MAGIC', 0xE6359A60);


    $pr=get_pr($url);
    return($pr[1]);
};    


function cn_nooverflow($a)
{
    while ($a<-2147483648)
        $a+=2147483648+2147483648;
    while ($a>2147483647)
        $a-=2147483648+2147483648;
    return $a;
}

function cn_zeroFill($x, $bits)
{
   if ($bits==0) return $x;
   if ($bits==32) return 0;
   
   $y = shr(ands($x,0x7FFFFFFF) , $bits);
   if (ands(0x80000000 , $x)) {
       $y |= (shl(1,(31-$bits)));
   }
   return $y;
}
 
function cn_mix($a,$b,$c)
{
    $a=(int)$a; $b=(int)$b; $c=(int)$c;
    $a -= $b; $a -= $c; $a=cn_nooverflow($a); $a = xors($a,(cn_zeroFill($c,13)));
    $b -= $c; $b -= $a; $b=cn_nooverflow($b); $b = xors($b,(shl($a,8)));
    $c -= $a; $c -= $b; $c=cn_nooverflow($c); $c = xors($c,(cn_zeroFill($b,13)));
       
    $a -= $b; $a -= $c; $a=cn_nooverflow($a); $a = xors($a,(cn_zeroFill($c,12)));
    $b -= $c; $b -= $a; $b=cn_nooverflow($b); $b = xors($b,(shl($a,16)));
    $c -= $a; $c -= $b; $c=cn_nooverflow($c); $c = xors($c,(cn_zeroFill($b,5)));
       
    $a -= $b; $a -= $c; $a=cn_nooverflow($a); $a = xors($a,(cn_zeroFill($c,3)));
    $b -= $c; $b -= $a; $b=cn_nooverflow($b); $b = xors($b,(shl($a,10)));
    $c -= $a; $c -= $b; $c=cn_nooverflow($c); $c = xors($c,(cn_zeroFill($b,15)));
       
    return array($a,$b,$c);
}
function dec2bin($dec)
{
    $result    = '';
    $shift    = 0;

    if ($dec<0)
    {
        $minus=true;                        // отрицательное
        $dec=-1*($dec+1);                   // делаем NOT, чтоб делить положительное число, но ставим флаг что отрицательное
    } else {
        $minus=false;
    }

    while ( pow(2, $shift) < $dec )         // стандартные наработки
    {  
        ++$shift;
    }
    while ( 0 <= $shift )
    {
        $pow = pow(2, $shift);
        if ( $pow <= $dec )
        {
            $dec-= $pow;
            $result = $result . ($minus?'0':'1');   // если отрицательное число у нас, то NOT
    } else {
        $result = $result . ($minus?'1':'0');
        }
        --$shift;
    }
    $result=str_pad($result, 64, ($minus?"1":"0"), STR_PAD_LEFT);
// заполняем результат слева, чтобы было 64 символа (дальше поймете почему)
    return $result;
}
function xors ($a, $b)   // переменные передаются в десятичной форме
{
    $c='0000000000000000000000000000000000000000000000000000000000000000';

    $a=dec2bin($a);
    $b=dec2bin($b);

    for ($i=63;$i>=0;$i--)
    {
       $c[$i]=((int)$a[$i]^(int)$b[$i]);
    }

    $c=bin2dec($c);    
    return $c;
}

function ands ($a, $b)   // переменные передаются в десятичной форме
{
    $c='0000000000000000000000000000000000000000000000000000000000000000';

    $a=dec2bin($a);
    $b=dec2bin($b);

    for ($i=63;$i>=0;$i--)
    {
       $c[$i]=((int)$a[$i]&(int)$b[$i]);
    }

    $c=bin2dec($c);    
    return $c;
}


function shl($a, $bit)    
{
    $a=dec2bin($a);
    $a=str_pad($a, 64+$bit, "0", STR_PAD_RIGHT); // добавляем справа "0" количество $bit
    $c=substr($a,$bit);     // а теперь отрезаем, тоесть сдвинули влево на $bit
    $c=bin2dec($c);      

    return $c;
}
function shr($a, $bit)    
{
    $a=dec2bin($a);
    $a=str_pad($a, 64+$bit, "0", STR_PAD_LEFT);
    $c=substr($a,0, -$bit);
    $c=bin2dec($c);        
    return $c;
}
function bin2dec($c)
{
 if ($c>'0000000000000000000000000000000001111111111111111111111111111111')
 {
 
  for ($i=63;$i>=0;$i--)
  {
   $c[$i]=((int)$c[$i]^1); //^1;
  }

  $c=base_convert(substr($c,32), 2, 10);
  $c=-1*($c+1);
 } else {
  $c=bindec($c);
 }
   
    return $c;
}
function cn_GoogleCH($url, $length=null, $init=GOOGLE_MAGIC)
{
    if(is_null($length))
    {
        $length = sizeof($url);
    }
   
    $a = $b = 0x9E3779B9;
    $c = $init;
    $k = 0;
    $len = $length;
    while($len >= 12)
    {
        $a += ($url[$k+0] +(shl($url[$k+1],8)) +(shl($url[$k+2],16)) +(shl($url[$k+3],24)));
        $b += ($url[$k+4] +(shl($url[$k+5],8)) +(shl($url[$k+6],16)) +(shl($url[$k+7],24)));
        $c += ($url[$k+8] +(shl($url[$k+9],8)) +(shl($url[$k+10],16))+(shl($url[$k+11],24)));
        $cn_mix = cn_mix($a,$b,$c);
        $a = $cn_mix[0]; $b = $cn_mix[1]; $c = $cn_mix[2];
        $k += 12;
        $len -= 12;
    }
    $c += $length;
    switch($len)
    {
        case 11: $c+=(shl($url[$k+10],24));
        case 10: $c+=(shl($url[$k+9],16));
        case 9 : $c+=(shl($url[$k+8],8));
        case 8 : $b+=(shl($url[$k+7],24));
        case 7 : $b+=(shl($url[$k+6],16));
        case 6 : $b+=(shl($url[$k+5],8));
        case 5 : $b+=($url[$k+4]);
        case 4 : $a+=(shl($url[$k+3],24));
        case 3 : $a+=(shl($url[$k+2],16));
        case 2 : $a+=(shl($url[$k+1],8));
        case 1 : $a+=($url[$k+0]);
    }
    $cn_mix = cn_mix($a,$b,$c);
    return $cn_mix[2];
}

   
//converts a string into an array of integers containing the numeric value of the char
function cn_strord($string)
{
    for($i=0;$i<strlen($string);$i++)
    {
        $result[$i] = ord($string{$i});
    }    
    return $result;
}



function strToNum($str, $check, $magic) {
    $int32Unit = 4294967296;  // 2^32
 
    $length = strlen($str);
    for ($i = 0; $i < $length; $i++) {
      $check *= $magic;
      if ($check >= $int32Unit) {
            $check = ($check - $int32Unit * (int) ($check / $int32Unit));
            //if the check less than -2^31
            $check = ($check < -2147483648) ? ($check + $int32Unit) : $check;
      }
      $check += ord($str{$i});
  }
  return $check;
}
/**
  * Получаем хеш URL-а
  * @param  string  $string
  * @return integer
*/

function hashUrl($string) {
  $check1 = strToNum($string, 0x1505, 0x21);
  $check2 = strToNum($string, 0, 0x1003F);
 
  $check1 >>= 2;
  $check1 = (($check1 >> 4) & 0x3FFFFC0 ) | ($check1 & 0x3F);
  $check1 = (($check1 >> 4)
13
08 февраля 2012 года
RussianSpy
3.0K / / 04.07.2006
Вы думаете кто-то будет сидеть разбираться в этой простыне кода из малоизвестной системы?
76K
08 февраля 2012 года
fatresh
12 / / 07.02.2012
Цитата: RussianSpy
Вы думаете кто-то будет сидеть разбираться в этой простыне кода из малоизвестной системы?


Система довольно попупярная даже на этом сайте установлен каталог http://cat.codenet.ru/

13
08 февраля 2012 года
RussianSpy
3.0K / / 04.07.2006
Может быть лучше задать этот вопрос на оф. сайте системы? Там гораздо выше шанс что вам ответят.
76K
08 февраля 2012 года
fatresh
12 / / 07.02.2012
Цитата: RussianSpy
Может быть лучше задать этот вопрос на оф. сайте системы? Там гораздо выше шанс что вам ответят.


Форума нет уже на оф сайте он закрылся и поддержка молчит.

76K
08 февраля 2012 года
fatresh
12 / / 07.02.2012
Цитата: RussianSpy
Может быть лучше задать этот вопрос на оф. сайте системы? Там гораздо выше шанс что вам ответят.


Форума нет уже на оф сайте он закрылся и поддержка молчит.

1
08 февраля 2012 года
kot_
7.3K / / 20.01.2000
шпион прав - разбираться что конкретно не работает у вас, за вас никто не будет. Локализуйте ошибку. Как минимум - у вас ошибка в гугловском адресе. Например.
1
08 февраля 2012 года
kot_
7.3K / / 20.01.2000
Тем более что, насколько известно мне, гугль не только изменил сервер для запросов но и алгоритм расчета checksum для урла. Может быть причина в этом?
76K
08 февраля 2012 года
fatresh
12 / / 07.02.2012
Ога скорей всего из-за алгоритма подсчёта, пытаюсь простой внедрить алгоритм готовый. Пока не выходит.........
1
08 февраля 2012 года
kot_
7.3K / / 20.01.2000
покажите что именно не выходит. Сам алгоритм есть?
76K
08 февраля 2012 года
fatresh
12 / / 07.02.2012
Ага есть готовый класс определения PR немогу прикрутить запутался =(
Код:
<?php
// показывает PR 7 в браузере значит верно вычисляет
$url="http://mail.ru";
class PR
{

private function StrToNum($Str, $Check, $Magic)
    {
    $Int32Unit = 4294967296;
    $length = strlen($Str);
    for ($i = 0; $i < $length; $i++)
        {
        $Check *= $Magic;
        if ($Check >= $Int32Unit)
            {
            $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));
            $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
            }
        $Check += ord($Str{$i});
        }
    return $Check;
    }
 

private function HashURL($String)
    {
    $Check1 = PR::StrToNum($String, 0x1505, 0x21);
    $Check2 = PR::StrToNum($String, 0, 0x1003F);
    $Check1 >>= 2;
    $Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F);
    $Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF);
    $Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF);
    $T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) << 2 ) | ($Check2 & 0xF0F );
    $T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 );
 
    return ($T1 | $T2);
    }
 
private function CheckHash($Hashnum)
    {
    $CheckByte = 0;
    $Flag = 0;
    $HashStr = sprintf('%u', $Hashnum) ;
    $length = strlen($HashStr);
    for ($i = $length - 1;  $i >= 0;  $i --)
        {
        $Re = $HashStr{$i};
        if (1 === ($Flag % 2))
            {
            $Re += $Re;
            $Re = (int)($Re / 10) + ($Re % 10);
            }
        $CheckByte += $Re;
        $Flag ++;
        }
    $CheckByte %= 10;
    if (0 !== $CheckByte)
        {
        $CheckByte = 10 - $CheckByte;
        if (1 === ($Flag % 2) )
            {
            if (1 === ($CheckByte % 2))
                {
                $CheckByte += 9;
                }
            $CheckByte >>= 1;
            }
        }
    return '7'.$CheckByte.$HashStr;
    }
 
public function check_pr($url)
    {
    $ch = curl_init("http://toolbarqueries.google.com/tbr?features=Rank&sourceid=navclient-ff&client=navclient-auto-ff&ch="
    ."&ch=".$this->CheckHash($this->HashURL($url))."&q=info:$url");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    $result = curl_exec($ch);
    if(curl_errno($ch) != 0)
    die("curl_errno(".curl_errno($ch)."), curl_error(".curl_error($ch).")");
    curl_close($ch);
    return substr($result, 9);
    }
}



$pr = new PR();
$pr = $pr->check_pr($url);
if ($pr == "") {$pr="0";}
echo "$pr";

?>
76K
08 февраля 2012 года
fatresh
12 / / 07.02.2012
//$url="http://mail.ru";
эту строку можно закомментировать и вызывать так любой сайт
http://site.org/CHECK_PR.php?url=mail.org
1
08 февраля 2012 года
kot_
7.3K / / 20.01.2000
У вас же все написано
 
Код:
<?php
function cn_calcRankPR($url, &$comment)
{
 
$pr = new PR();
$pr = $pr->check_pr($url);
if ($pr == "") {$pr="0";}
 return($pr);
}
?>
76K
08 февраля 2012 года
fatresh
12 / / 07.02.2012
Цитата: kot_
У вас же все написано
 
Код:
<?php
function cn_calcRankPR($url, &$comment)
{
 
$pr = new PR();
$pr = $pr->check_pr($url);
if ($pr == "") {$pr="0";}
 return($pr);
}
?>


-------------------
Спасибо за наводку поменял в функции код + подключил class PR в самом начале файла check.php и всё получилось =)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог