PHP Kod: Kodu kopyalamak için üzerine çift tıklayın!
cacher.class.php
<?php
class Cacher
{
var $cachedir = CACHE_DIR;
var $suffix;
/**
* Constructor. Requires CACHE_DIR directive to be set
* prior to use. CACHE_DIR will contain cache files
* which hold the contents of requested URLs.
*/
function Cacher($suffix='')
{
if(!(CACHE_DIR))
{
die('CACHE_DIR not configured.');
}
$this->suffix = $suffix;
}
/**
* Fetch a URL. If it has already
* been cached within the specified cacheTime,
* the cached copy is returned. Otherwise a
* fresh copy is retrieved and cached.
*
* If it can't write to the cache for some reason, the original URL
* is returned.
*
* [MENTION=81769]para[/MENTION]m $url The URL to retrieve
* [MENTION=81769]para[/MENTION]m $cacheTime The length of time to cache the requested URL.
*/
function fetch($url, $cacheTime=86600)
{
// Determine cache file name
$cacheFile = $this->cachedir . md5($url) . $this->suffix . '.cache' ;
$refresh = true;
if([MENTION=37436]file[/MENTION]_exists($cacheFile))
{
$refresh = (time() - $cacheTime > [MENTION=37436]file[/MENTION]mtime($cacheFile)) ;
}
[MENTION=15783]cLear[/MENTION]statcache();
// Cache file if needed
if($refresh)
{
try
{
$tries = 0;
$errors = 0;
$contents = false;
while($tries<3)
{
$tries++;
if(!$contents)
{
$contents = [MENTION=37436]file[/MENTION]_get_contents($url);
}
if(!$contents)
{
$error = $error .(' GET_FAIL ');
}
else
{
$result = [MENTION=37436]file[/MENTION]_put_contents($cacheFile, $contents);
if(!$result)
{
$error = $error .(' PUT_FAIL ');
}
else
{
return $cacheFile;
}
}
// TODO: Is this necessary? Is there a better way?
usleep(10000);
}
error_log("\n" . date('r') . " - Failed to cache: {$url}", 3, 'error_log');
error_log("\n" . date('r') . " - Failure reasons: {$error}", 3, 'error_log');
return false;
}
catch(Exception $e)
{
error_log("\n" . date('r') . " - {$e}", 3, 'error_log');
error_log("\n" . date('r') . " - Cacher error: {$error}", 3, 'error_log');
return false;
}
}
return $cacheFile;
}
/**
* Fetch a URL and return contents as a string. If it has already
* been cached within the specified cacheTime,
* the cached copy is returned. Otherwise a
* fresh copy is retrieved and cached.
*
* [MENTION=81769]para[/MENTION]m $url The URL to retrieve
* [MENTION=81769]para[/MENTION]m $cacheTime The length of time to cache the requested URL.
*/
function fetchContents($url, $cacheTime=86600)
{
$file = $this->fetch($url, $cacheTime);
if(!$file) return false;
return file_get_contents($file);
}
/**
* Clear cache files for a url.
*/
function clear($url)
{
// Determine cache file name
$cacheFile = $this->cachedir . md5($url) . $this->suffix . '.cache' ;
if([MENTION=37436]file[/MENTION]_exists($cacheFile))
{
[MENTION=55533]UnL[/MENTION]ink($cacheFile);
}
}
}
?>
cacher.class.php
<?php
require_once('cacher.class.php');
class GooglePageRank
{
var $site;
var $pagerank;
/**
* Constructor.
*
* [MENTION=81769]para[/MENTION]m url The site URL to check for PageRank
* [MENTION=81769]para[/MENTION]m cacheTime (Optional) Length of time in seconds to cache results.
*/
function GooglePageRank($site, $cacheTime=86400)
{
$this->site = $site;
if(count($site)==0) die('Google needs a site URL to check pagerank.');
// Calculated variables
$info = 'info:' . urldecode($site);
$checksum = $this->checksum($this->strord($info));
$url = "
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
style="color: #007700">{$checksum}&features=Rank&q={$info}";
// Pull pagerank through cache
$cacher = new Cacher('_google');
$result = $cacher->fetchContents($url, $cacheTime);
// Parse results
$this->raw = trim($result);
preg_match('/Rank_[0-9]:[0-9]:(.*)/', $result, $r);
if(!isset($r[1]))
{
trigger_error("Couldn't get Pagerank for {$site}. Got: [{$result}]", E_USER_NOTICE);
error_log("\n" . date('r') . "Couldn't get Pagerank for {$site}", 3, 'error_log');
$this->pagerank = 0;
}
else
{
$this->pagerank =(isset($r[1])) ? $r[1] : 'Error';
}
}
/**
* Converts number to int 32
* (Required for pagerank hash)
*/
function to_int_32 (&$x) {
$z = hexdec(80000000);
$y = (int) $x;
if($y ==- $z && $x <- $z){
$y = (int) ((-1) * $x);
$y = (-1) * $y;
}
$x = $y;
}
/**
* Fills in zeros on a number
* (Required for pagerank hash)
*/
function zero_fill ($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;
}
/**
* Pagerank hash prerequisites
*/
function mix($a, $b, $c) {
$a -= $b; $a -= $c; $this->to_int_32($a); $a = (int)($a ^ ($this->zero_fill($c,13)));
$b -= $c; $b -= $a; $this->to_int_32($b); $b = (int)($b ^ ($a<<8));
$c -= $a; $c -= $b; $this->to_int_32($c); $c = (int)($c ^ ($this->zero_fill($b,13)));
$a -= $b; $a -= $c; $this->to_int_32($a); $a = (int)($a ^ ($this->zero_fill($c,12)));
$b -= $c; $b -= $a; $this->to_int_32($b); $b = (int)($b ^ ($a<<16));
$c -= $a; $c -= $b; $this->to_int_32($c); $c = (int)($c ^ ($this->zero_fill($b,5)));
$a -= $b; $a -= $c; $this->to_int_32($a); $a = (int)($a ^ ($this->zero_fill($c,3)));
$b -= $c; $b -= $a; $this->to_int_32($b); $b = (int)($b ^ ($a<<10));
$c -= $a; $c -= $b; $this->to_int_32($c); $c = (int)($c ^ ($this->zero_fill($b,15)));
return array($a,$b,$c);
}
/**
* Pagerank checksum hash emulator
*/
function checksum ($url, $length = null, $init = 0xE6359A60) {
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 = $this->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 = $this->mix($a, $b, $c);
return $mix[2];
}
/**
* ASCII conversion of a string
*/
function strord($string) {
for($i = 0; $i < strlen($string); $i++) {
$result[$i] = ord($string{$i});
}
return $result;
}
/**
* Number formatting for use with pagerank hash
*/
function format_number ($number='', $divchar = ',', $divat = 3) {
$decimals = '';
$formatted = '';
if (strstr($number, '.')) {
$pieces = explode('.', $number);
$number = $pieces[0];
$decimals = '.' . $pieces[1];
} else {
$number = (string) $number;
}
if (strlen($number) <= $divat)
return $number;
$j = 0;
for ($i = strlen($number) - 1; $i >= 0; $i--) {
if ($j == $divat) {
$formatted = $divchar . $formatted;
$j = 0;
}
$formatted = $number[$i] . $formatted;
$j++;
}
return $formatted . $decimals;
}
}
?>
Uygulama
require_once("google_pagerank.class.php");
$rankObject = new GooglePageRank("
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
type="text/javascript" src="https://code.jquery.com/jquery-1.12.0.min.js">
__________________