почему этот код PHP не работает должным образом на удаленном хосте, но хорошо работает на локальном хосте - PullRequest
0 голосов
/ 06 февраля 2012

Я использую этот код, чтобы получить рейтинг страницы Google. он отлично работает на моем локальном хосте, но возвращает нулевой ранг, когда я использую его на своем хосте (linux-php5). код:

<html>
<head>
<title>GPR</title>
<body>
<?php
function ZeroFill($a,$b){
  $z=hexdec(80000000);
  if($z&$a){
    $a=($a>>1);
    $a&=(~$z);
    $a|=0x40000000;
    $a=($a>>($b-1));
  }else{
    $a=($a>>$b);
  }
  return $a;
}
define('GOOGLE_MAGIC',0xE6359A60);
function Mix($a,$b,$c){
  $a-=$b;$a-=$c;$a^=(ZeroFill($c,13));
  $b-=$c;$b-=$a;$b^=($a<<8);
  $c-=$a;$c-=$b;$c^=(ZeroFill($b,13));
  $a-=$b;$a-=$c;$a^=(ZeroFill($c,12));
  $b-=$c;$b-=$a;$b^=($a<<16);
  $c-=$a;$c-=$b;$c^=(ZeroFill($b,5));
  $a-=$b;$a-=$c;$a^=(ZeroFill($c,3));
  $b-=$c;$b-=$a;$b^=($a<<10);
  $c-=$a;$c-=$b;$c^=(ZeroFill($b,15));
  return array($a,$b,$c);
}
function 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]+($url[$k+1]<<8)+($url[$k+2]<<16)+($url[$k+3]<<24));
    $b+=($url[$k+4]+($url[$k+5]<<8)+($url[$k+6]<<16)+($url[$k+7]<<24));
    $c+=($url[$k+8]+($url[$k+9]<<8)+($url[$k+10]<<16)+($url[$k+11]<<24));
    $mix=Mix($a,$b,$c);
    $a=$mix[0];$b=$mix[1];$c=$mix[2];
    $k+=12;
    $len-=12;
  }
  $c+=$length;
  switch($len){
    case 11:$c+=($url[$k+10]<<24);
    case 10:$c+=($url[$k+9]<<16);
    case 9:$c+=($url[$k+8]<<8);
    case 8:$b+=($url[$k+7]<<24);
    case 7:$b+=($url[$k+6]<<16);
    case 6:$b+=($url[$k+5]<<8);
    case 5:$b+=($url[$k+4]);
    case 4:$a+=($url[$k+3]<<24);
    case 3:$a+=($url[$k+2]<<16);
    case 2:$a+=($url[$k+1]<<8);
    case 1:$a+=($url[$k+0]);
  }
  $mix=Mix($a,$b,$c);
  return $mix[2];
}
function StringOrder($string){
  for($i=0;$i<strlen($string);$i++){$result[$i]=ord($string{$i});}
  return $result;
}
$url="Yahoo.com";
$server="toolbarqueries.google.com";

  $url="info:"."$url";
  $ch=trim(str_replace("-","",sprintf("6%u\n",GoogleCH(StringOrder($url)))));
  $res="http://$server/tbr?client=navclient-auto&ch=$ch&features=Rank&q=$url";
  $data=@fopen("$res",r);
  if($data){
    while($line = fgets($data,1024)) {
      if(substr($line,0,7)=="Rank_1:"){$rankline = $line;}
    }
    fclose($data);
    if (isset($rankline)==false){$rankline="";};
    $pagerank = trim(substr($rankline,9,2));
    if($pagerank==""){$pagerank="0";}
    echo <<<HEADER


<table border=0>
HEADER;
echo "<td nowrap colspan=2><a href=\"http://".$url."\">".$url."</a></td>\n";
echo "</tr>";
echo "<tr>";
echo "<td nowrap>Pagerank:&nbsp;&nbsp;</td>";
echo "<td nowrap><b>".$pagerank."</b>&nbsp;&nbsp;</td>\n";
$out = ''; 
echo $out;
echo <<<FOOTER
</table>
</td></tr></table>
</blockquote>
FOOTER;
}

?>
</body>
</html>

Почему это? и как я могу это исправить?

Ответы [ 2 ]

3 голосов
/ 06 февраля 2012

Позволяет ли ваш хост использовать fopen для внешних URL? Возможно, вам придется использовать CURL.

Первое, что нужно сделать, это убедиться, что на этом хосте включена allow_url_fopen.

0 голосов
/ 06 февраля 2012

какие версии php вы используете в своей среде разработки и производства?

проверьте следующие настройки с акцентом на безопасный режим и fopen () удаленные ресурсы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...