为什么这个PHP代码在远程主机上不能正常工作,但在localhost上运行良好

时间:2012-02-06 18:49:24

标签: php localhost web-hosting

我使用此代码获取谷歌网页排名。它在我的本地主机上工作得很好但是当我在我的主机上使用它时它返回零排名(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 个答案:

答案 0 :(得分:3)

您的主机是否允许您将fopen用于外部网址?您可能需要使用CURL。

要做的第一件事是验证该主机上是否启用了allow_url_fopen

答案 1 :(得分:0)

您在开发和生产环境中使用的是哪些php版本?

检查以下设置,重点关注安全模式和fopen()远程资源: