Calculate Google Pagerank with PHP 計算のGoogle PageRankをPHPで

This is modified code that I found from the Internet the orginal code that may not work on some server that php has 32bit operation problem and I already tested on my server.これは私は、いくつかのサーバーは、 phpの32ビット操作問題を抱えていると私はすでにテストサーバー上では動作しない可能性がありますが、元のコードでは、インターネットから見つけたコードを変更されます。

PHP: PHPは:
  1. <?php < ? phpの
  2. define ( 'GOOGLE_MAGIC' , 0xE6359A60 ) ; 定義 ' GOOGLE_MAGIC ' 、 0xE6359A60 ;
  3. //unsigned shift right / /符号なし右シフト
  4. function zeroFill ( $a , $b ) 関数はZEROFILL $ 1$ b )の
  5. {
  6. $z = hexdec ( 80000000 ) ; $ Z偉大なる = hexdec 80000000 ;
  7. if ( $z & $a ) ( $ Z偉大なる $場合
  8. {
  9. $a = ( $a >> 1 ) ; $ 1 = $ 1 > > 1 ;
  10. $a &= ( ~ $z ) ; $ 1 & = $ z )に ;
  11. $a |= 0x40000000; $ 1 | = 0x40000000 ;
  12. $a = ( $a >> ( $b - 1 ) ) ; $ 1 = $ 1 > > $ bの -1 ) ;
  13. }
  14. else その他の
  15. {
  16. $a = ( $a >> $b ) ; $ 1 = $ 1 > > $ b )の ;
  17. }
  18. return $a ; $ 返します
  19. }
  20. function toInt32 ( & $x ) { 関数 toInt32 $のX ) (
  21. $z = hexdec ( 80000000 ) ; $ Z偉大なる = hexdec 80000000 ;
  22. $y = ( int ) $x ; $イ = 内科 $のX ;
  23. if ( $y ==- $z && $x <- $z ) { もし $イ ==- $ Z偉大なる & & $ × < -$ z ) を(
  24. $y = ( int ) ( ( - 1 ) * $x ) ; $イ = 内科) ( ( -1 * $ のX ) ;
  25. $y = ( - 1 ) * $y ; $イ = -1 * $ イ;
  26. }
  27. $x = $y ; $ × = $イ ;
  28. }
  29. function mix ( $a , $b , $c ) { 関数ミックス $ 1$ bの$ 3 ) (
  30. $a -= $b ; $a -= $c ; toInt32 ( $a ) ; $a = ( int ) ( $a ^ ( zeroFill ( $c , 13 ) ) ) ; $ 1 -= $ bの ; $ 1 -= $ウ ; toInt32 $ 1 ; $ 1 = 内科) ( $ 1 ^ ゼロ $ウ13 ) ) ) ;
  31. $b -= $c ; $b -= $a ; toInt32 ( $b ) ; $b = ( int ) ( $b ^ ( $a << 8 ) ) ; $ bの -= $ウ ; $ bの -= $ 1 ; toInt32 $ b )の ; $ bの = 内科) ( $ bの ^ $ 1 < < 8 ) ) ;
  32. $c -= $a ; $c -= $b ; toInt32 ( $c ) ; $c = ( int ) ( $c ^ ( zeroFill ( $b , 13 ) ) ) ; $ウ -= $ 1 ; $ウ -= $ bの ; toInt32 $ 3 ; $ウ = 内科) ( $ウ ^ ゼロ化 10億ドル13 ) ) ) ;
  33. $a -= $b ; $a -= $c ; toInt32 ( $a ) ; $a = ( int ) ( $a ^ ( zeroFill ( $c , 12 ) ) ) ; $ 1 -= $ bの ; $ 1 -= $ウ ; toInt32 $ 1 ; $ 1 = 内科) ( $ 1 ^ ゼロ $ウ12 ) ) ) ;
  34. $b -= $c ; $b -= $a ; toInt32 ( $b ) ; $b = ( int ) ( $b ^ ( $a << 16 ) ) ; $ bの -= $ウ ; $ bの -= $ 1 ; toInt32 $ b )の ; $ bの = 内科) ( $ bの ^ $ 1 < < 16 ) ) ;
  35. $c -= $a ; $c -= $b ; toInt32 ( $c ) ; $c = ( int ) ( $c ^ ( zeroFill ( $b , 5 ) ) ) ; $ウ -= $ 1 ; $ウ -= $ bの ; toInt32 $ 3 ; $ウ = 内科) ( $ウ ^ ゼロ $ bの5 ) ) ) ;
  36. $a -= $b ; $a -= $c ; toInt32 ( $a ) ; $a = ( int ) ( $a ^ ( zeroFill ( $c , 3 ) ) ) ; $ 1 -= $ bの ; $ 1 -= $ウ ; toInt32 $ 1 ; $ 1 = 内科) ( $ 1 ^ ゼロ $ウ3 ) ) ) ;
  37. $b -= $c ; $b -= $a ; toInt32 ( $b ) ; $b = ( int ) ( $b ^ ( $a << 10 ) ) ; $ bの -= $ウ ; $ bの -= $ 1 ; toInt32 $ b )の ; $ bの = 内科) ( $ bの ^ $ 1 < < 10 ) ) ;
  38. $c -= $a ; $c -= $b ; toInt32 ( $c ) ; $c = ( int ) ( $c ^ ( zeroFill ( $b , 15 ) ) ) ; $ウ -= $ 1 ; $ウ -= $ bの ; toInt32 $ 3 ; $ウ = 内科) ( $ウ ^ ゼロ化 10億ドル15 ) ) ) ;
  39. return array ( $a , $b , $c ) ; 返す 配列 $ 1$ bの$ 3 ;
  40. }
  41. function GoogleCH ( $url , $length = null , $init =GOOGLE_MAGIC ) { 関数 GoogleCH $ URLを$長 = nullを$のinit = GOOGLE_MAGIC ) (
  42. if ( is_null ( $length ) ) { is_null ( $ 長さ ) (
  43. $length = sizeof ( $url ) ; $長 = にsizeof $のURL ;
  44. }
  45. $a = $b = 0x9E3779B9; $ 1 = $ bの = 0x9E3779B9 ;
  46. $c = $init ; $ウ = $ initプロセス ;
  47. $k = 0 ; $のK = 0 ;
  48. $len = $length ; $レン = $長さ ;
  49. while ( $len >= 12 ) { ( $ ながら レン> = 12 ) (
  50. $a += ( $url [ $k + 0 ] + ( $url [ $k + 1 ] << 8 ) + ( $url [ $k + 2 ] << 16 ) + ( $url [ $k + 3 ] << 24 ) ) ; $ 1 + = $ URLを [ $のK + 0 ] + $ URLを [ $のK + 1 ] < < 8 + $ URLを [ $のK + 2 ] < < 16 + $ URLを [ $のK + 3 ] < < 24 ) ) ;
  51. $b += ( $url [ $k + 4 ] + ( $url [ $k + 5 ] << 8 ) + ( $url [ $k + 6 ] << 16 ) + ( $url [ $k + 7 ] << 24 ) ) ; $ bの + = $ URLを [ $のK + 4 ] + $ URLを [ $のK + 5 ] < < 8 + $ URLを [ $のK + 6 ] < < 16 + $ URLを [ $のK + 7 ] < < 24 ) ) ;
  52. $c += ( $url [ $k + 8 ] + ( $url [ $k + 9 ] << 8 ) + ( $url [ $k + 10 ] << 16 ) + ( $url [ $k + 11 ] << 24 ) ) ; $のC + = $ URLを [ $のK + 8 ] + $ URLを [ $のK + 9 ] < < 8 + $ URLを [ $のK + 10 ] < < 16 + $ URLを [ $のK + 11 ] < < 24 ) ) ;
  53. $mix = mix ( $a , $b , $c ) ; $ミックス =ミックス $ 1$ bの$ 3 ;
  54. $a = $mix [ 0 ] ; $b = $mix [ 1 ] ; $c = $mix [ 2 ] ; $ 1 = $ミックス [ 0 ] ; $ bの = $ミックス [ 1 ] ; $ウ = $ミックス [ 2 ] ;
  55. $k += 12 ; $のK + = 12 ;
  56. $len -= 12 ; $レン -= 12 ;
  57. }
  58. $c += $length ; $のC + = $長さ ;
  59. switch ( $len ) /* all the case statements fall through */ スイッチ $レン / *すべてのcase文*を通じて/
  60. {
  61. case 11 : $c += ( $url [ $k + 10 ] << 24 ) ; ケース 11$のC + = $ URLを [ $のK + 10 ] < < 24 ;
  62. case 10 : $c += ( $url [ $k + 9 ] << 16 ) ; ケース 10$のC + = $ URLを [ $のK + 9 ] < < 16 ;
  63. case 9 : $c += ( $url [ $k + 8 ] << 8 ) ; ケース 9$のC + = $ URLを [ $のK + 8 ] < < 8 ;
  64. /* the first byte of c is reserved for the length */ / * Cの最初のバイトの長さを確保されています* /
  65. case 8 : $b += ( $url [ $k + 7 ] << 24 ) ; ケース 8$ bの + = $ URLを [ $のK + 7 ] < < 24 ;
  66. case 7 : $b += ( $url [ $k + 6 ] << 16 ) ; ケース 7$ bの + = $ URLを [ $のK + 6 ] < < 16 ;
  67. case 6 : $b += ( $url [ $k + 5 ] << 8 ) ; ケース 6$ bの + = $ URLを [ $のK + 5 ] < < 8 ;
  68. case 5 : $b += ( $url [ $k + 4 ] ) ; ケース 5$ bの + = $ URLを [ $のK + 4 ] ) ;
  69. case 4 : $a += ( $url [ $k + 3 ] << 24 ) ; ケース 4$ 1 + = $ URLを [ $のK + 3 ] < < 24 ;
  70. case 3 : $a += ( $url [ $k + 2 ] << 16 ) ; ケース 3$ 1 + = $ URLを [ $のK + 2 ] < < 16 ;
  71. case 2 : $a += ( $url [ $k + 1 ] << 8 ) ; ケース 2$ 1 + = $ URLを [ $のK + 1 ] < < 8 ;
  72. case 1 : $a += ( $url [ $k + 0 ] ) ; ケース 1$ 1 + = $ URLを [ $のK + 0 ] ) ;
  73. /* case 0: nothing left to add */ / *ケース0 :何も追加する * 左/
  74. }
  75. $mix = mix ( $a , $b , $c ) ; $ミックス =ミックス $ 1$ bの$ 3 ;
  76. /*-------------------------------------------- report the result */ /*-------------------------------------------- *結果報告書/
  77. return $mix [ 2 ] ; ミックス$ リターン [ 2 ] ;
  78. }
  79. //converts a string into an array of integers containing the numeric value of the char / /整数値の数値文字を含む文字列の配列に変換する
  80. function strord ( $string ) { 関数 strord $文字列 ) (
  81. for ( $i = 0 ; $i <strlen ( $string ) ; $i ++ ) {= 0 $ ; $私 < strlen $文字列 ; $私 + + ) (
  82. $result [ $i ] = ord ( $string { $i } ) ; $結果 [ $私 ] = はord $文字列 $私 ) ) ;
  83. }
  84. return $result ; $ 結果 を返す ;
  85. }
  86. // converts an array of 32 bit integers into an array with 8 bit values. / / 8ビットの値を持つ配列に32ビット整数の配列に変換します。 Equivalent to (BYTE *)arr32 当量(バイト* ) arr32
  87. function c32to8bit ( $arr32 ) { 関数 c32to8bit $ arr32 ) (
  88. for ( $i = 0 ; $i <count ( $arr32 ) ; $i ++ ) {= 0 $ ; $私 < $ arr32 ; $私 + + ) (
  89. for ( $bitOrder = $i * 4 ; $bitOrder <= $i * 4 + 3 ; $bitOrder ++ ) {私* 4 $ $ bitOrder = ; $ bitOrder < = $私 * 4 + 3 ; $ bitOrder + + ) (
  90. $arr8 [ $bitOrder ] = $arr32 [ $i ] & 255 ; $ arr8 [ $ bitOrder ] = $ arr32 [ $私 ]255 ;
  91. $arr32 [ $i ] =zeroFill ( $arr32 [ $i ] , 8 ) ; $ arr32 [ $私 ] =ゼロ $ arr32 [ $私 ]8 ;
  92. }
  93. }
  94. return $arr8 ; $ arr8 を返す ;
  95. }
  96. function get_page_rank ( $url ) { 関数 get_page_rank $のURL ) (
  97. $url = preg_replace ( '/ \? .*$/' , '?' , $url ) ; $のURL = preg_replace ' / \ ? .*$/''か'$のURL ;
  98. $reqgr = "info:" . $url ; $ reqgr = "インフォメーション: "です。 $ホームページURL ;
  99. $reqgre = "info:" . urlencode ( $url ) ; $ reqgre = "インフォメーション: "urlencode $のURL ;
  100. $gch = "6" .GoogleCH ( strord ( $reqgr ) ) ; $ gch = " 6 " 。 GoogleCH strord $ reqgr ) ) ;
  101. $fsock = fsockopen ( 'toolbarqueries.google.com' , 80 , $errno , $errstr ) ; $ fsock = fsockopen ' toolbarqueries.google.com '80$ errno$ errstr ;
  102. if ( ! $fsock ) { $ fsock ) (場合
  103. echo 'Can not connect to server' ; エコー 'サーバーへの接続できません ;
  104. return - 1 ; 復帰 -1 ;
  105. }
  106. $base_get = "/search?client=navclient-auto&ch=" . $gch . "&ie=UTF-8&oe=UTF-8&features=Rank:FVN&q=" . $reqgre ; $ base_get = " /検索?クライアント= navclient -自動車& chに= "$ gch" &つまり=のUTF - 8 &大江=はUTF - 8 &特長=ランク: FVN & q =を"$ reqgre ;
  107. fputs ( $fsock , "GET $base_get HTTP/1.1 \r \n " ) ; fputs $ fsock" $ base_get HTTP/1.1のGET \研究\ Ñ " ;
  108. fputs ( $fsock , "HOST: toolbarqueries.google.com \r \n " ) ; fputs $ fsock"ホスト: toolbarqueries.google.com \研究\ Ñ " ;
  109. fputs ( $fsock , "User-Agent: Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1) \r \n " ) ; fputs $ fsock"ユーザーエージェント: Mozilla/4.0 (互換性; GoogleToolbar 2.0.114 -大きな; Windows XPの5.1 ) \研究\ Ñ " ;
  110. fputs ( $fsock , "Connection: close \r \n \r \n " ) ; fputs $ fsock"接続:閉じる\研究\ Ñ \研究\ Ñ " ;