<?php
/**
* Project: PHPLinkDirectory: Link exchange directory
*
* License: GNU GPL (http://www.opensource.org/licenses/gpl-license.html)
*
* This program is free software;
*
* you can redistribute it and/or modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 of the License,
* or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program;
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* For questions, help, comments, discussion, etc., please join the
* PHP Link Directory Forum http://www.phplinkdirectory.com/forum/
*
* @link http://www.phplinkdirectory.com/
* @copyright 2004-2005 NetCreated, Inc. (http://www.netcreated.com/)
* @projectManager David DuVal <david@david-duval.com>
* @author Bogdan Dumitru <dcb@insomniacsoft.com>
* @package PHPLinkDirectory
* @version 2.0.0 RC3
**/
/*
Written and contributed by
Alex Stapleton,
Andy Doctorow,
Tarakan,
Bill Zeller,
Vijay "Cyberax" Bhatter
traB
This code is released into the public domain
*/
define('GOOGLE_MAGIC', 0xE6359A60);
define('URL_RESPONSE', 0);
define('URL_HEADERS', 1);
define('URL_CONTENT', 2);
function get_url($url, $what = 0, $referer = "", $cookies = array (), $useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)") {
static $redirect_count = 0;
$ret = array ();
$ret['status'] = false;
$timeout = 10;
$urlArray = parse_url($url);
if (!isset($urlArray['port'])) {
if ($urlArray['scheme'] == 'http') {
$urlArray['port'] = 80;
}
elseif ($urlArray['scheme'] == 'https') {
$urlArray['port'] = 443;
}
elseif ($urlArray['scheme'] == 'ftp') {
$urlArray['port'] = 21;
}
}
if (!$urlArray['path']) {
$urlArray['path'] = '/';
}
$errno = "";
$errstr = "";
$fp = @fsockopen($urlArray['host'].'.', $urlArray['port'], $errno, $errstr, $timeout);
if ($fp) {
$request = "GET {$urlArray['path']}";
if (!empty ($urlArray['path'])) {
$request .= "?".$urlArray['query'];
}
$request .= " HTTP/1.1\r\n".
"Host: {$urlArray['host']}\r\n".
"User-Agent: $useragent\r\n";
if (!empty ($referer)) {
$request .= "Referer: $referer\r\n";
}
$request .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n"."Accept-Language: en-us, en;q=0.50\r\n".
#"Accept-Encoding: gzip, deflate, compress;q=0.9\r\n".
//"Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66\r\n".
#"Keep-Alive: 300\r\n".
"Connection: close\r\n"."Cache-Control: max-age=0\r\n";
foreach ($cookies as $k => $v) {
$request .= "Cookie: $k=$v\r\n";
}
$request .= "\r\n";
fputs($fp, $request);
$ret['response'] = fgets($fp);
if (preg_match("`HTTP/1\.. (.*) (.*)`U", $ret['response'], $parts)) {
$ret['status'] = $parts[1][0] == '2' || $parts[1][0] == '3';
$ret['code'] = $parts[1];
if ($what == URL_RESPONSE || !$ret['status']) {
fclose($fp);
return $ret;
}
$ret['headers'] = array ();
$ret['cookies'] = array ();
while (!feof($fp)) {
$header = fgets($fp, 2048);
if ($header == "\r\n" || $header == "\n" || $header == "\n\l")
break;
list ($key, $value) = split(':', $header, 2);
if (trim($key) == 'Set-Cookie') {
$value = trim($value);
$p1 = strpos($value, '=');
$p2 = strpos($value, ';');
$key = substr($value, 0, $p1);
$val = substr($value, $p1 +1, $p2 - $p1 -1);
$ret['cookies'][$key] = $val;
} else {
$ret['headers'][trim($key)] = trim($value);
}
}
if (($ret['code'] == '301' || $ret['code'] == '302') && !empty ($ret['headers']['Location']) && $redirect_count < 20) {
$redirect_count ++;
fclose($fp);
if (strpos($ret['headers']['Location'], 'http://') === 0 || strpos($ret['headers']['Location'], 'http://')) {
$redir_url = $ret['headers']['Location'];
}
elseif (strpos($ret['headers']['Location'], '/') === 0) {
$redir_url = $urlArray['scheme']."://".$urlArray[host].$ret['headers']['Location'];
} else {
$redir_url = $urlArray['scheme']."://".$urlArray[host].$urlArray[path].$ret['headers']['Location'];
}
return get_url($redir_url, $what, $url, $ret['cookies']);
}
$redirect_count = 0;
if ($what == URL_HEADERS) {
fclose($fp);
return $ret;
}
$chunked = isset($ret['headers']['Transfer-Encoding']) && ('chunked' == $ret['headers']['Transfer-Encoding']);
$ret['content'] = '';
while (!feof($fp)) {
$data = '';
if($chunked){
$line = fgets($fp, 128);
if(preg_match('/^([0-9a-f]+)/i', $line, $matches)){
$len = hexdec($matches[1]);
if(0 == $len){
while(!feof($fp))
fread($fp, 4096);
}else{
$data = fread($fp, $len);
}
}
}else{
$data = fread($fp, 4096);
}
$ret['content'] .= $data;
}
} else {
$errstr = "Bad Communication";
}
fclose($fp);
} else { // Occurs when if ($fp) returns false
}
$ret['error'] = $errstr;
return $ret;
}
//unsigned shift right
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;
}
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) /* all the case statements fall through */
{
case 11: $c+=($url[$k+10]<<24);
case 10: $c+=($url[$k+9]<<16);
case 9 : $c+=($url[$k+8]<<8);
/* the first byte of c is reserved for the length */
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]);
/* case 0: nothing left to add */
}
$mix = mix($a,$b,$c);
/*-------------------------------------------- report the result */
return $mix[2];
}
//converts a string into an array of integers containing the numeric value of the char
function strord($string) {
for($i=0;$i<strlen($string);$i++) {
$result[$i] = ord($string{$i});
}
return $result;
}
// converts an array of 32 bit integers into an array with 8 bit values. Equivalent to (BYTE *)arr32
function c32to8bit($arr32) {
for($i=0;$i<count($arr32);$i++) {
for ($bitOrder=$i*4;$bitOrder<=$i*4+3;$bitOrder++) {
$arr8[$bitOrder]=$arr32[$i]&255;
$arr32[$i]=zeroFill($arr32[$i], 8);
}
}
return $arr8;
}
function GoogleCHNew($ch){
$ch=sprintf("%u", $ch);
$ch = ((($ch/7) << 2) | (((int)fmod($ch,13))&7));
$prbuf = array();
$prbuf[0] = $ch;
for($i = 1; $i < 20; $i++) {
$prbuf[$i] = $prbuf[$i-1]-9;
}
$ch = GoogleCH(c32to8bit($prbuf), 80);
return sprintf("%u", $ch);
}
function get_page_rank($url){
$url = preg_replace('/\?.*$/','?',$url);
$reqgr = "info:".$url;
$reqgre = "info:".urlencode($url);
$gch = GoogleCH(strord($reqgr));
$gch = "6".GoogleCHNew($gch);
$querystring = "http://toolbarqueries.google.com/search?client=navclient-auto&ch=".$gch."&ie=UTF-8&oe=UTF-8&features=Rank:FVN&q=".$reqgre;
$patern = '/^http:/';
$patern2 = '/^http:\/\/.*google\..*\/(search|images|groups|news).*/';
$patern3 = '/^http:\/\/localhost.*/';
$patern4 = '/^http:\/\/(127\.|10\.|172\.16|192\.168).*/'; //local ip
if(!preg_match($patern, $url) || preg_match($patern2, $url) ||
preg_match($patern3, $url) || preg_match($patern4, $url)){
return -1;
}else{
//$ch = curl_init($querystring);
//curl_setopt($ch, CURLOPT_URL, $querystring);
//curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)");
//curl_exec($ch);
$res = get_url($querystring, URL_CONTENT, "", array(), "Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)");
if(preg_match('/Rank_.*?:.*?:(\d+)/i', $res['content'], $m)){
return $m[1];
}else{
return -1;
}
}
}
?>