Stuck - Don't Know How to Limit # of Queries

Hi, I’ve been modifying this PHP code for a while trying to figure out how to set a limit or a max amount of URLs that it can check in 1 go. This script is for a checking multiple pageranks for multiple sites. For example, I want to set it to 10, however, I cannot figure out how to do so. If the more experienced coders were to help me, that would be wonderful. So for I’ve got everything functional except for the limit part. You can view the current script so far here.

Here is the code.

<?php

// I am testing script on server http://www.indiamarketinggroup.com/client/pagerank.php
//PageRank Lookup v1.1 by HM2K (update: 31/01/07)

if ((!isset($_POST['urls'])) && (!isset($_GET['urls'])))
{ echo '<center><form action="" method="post"><textarea name="urls" cols="36" rows="9"></textarea><br><input type="submit" name="Submit" value="enter multiple url on new lines and click here"></form></center>'; }
if (isset($_POST['urls'])) 
{  
	$tempurls=$_POST['urls'];
	$pieces = explode("\
", $tempurls); // finding all submitted urls
	$size=sizeof($pieces);		// array size to use in the for loop at the end of program
	
//settings - host and user agent
$googlehost='toolbarqueries.google.com';
$googleua='Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5';

//convert a string to a 32-bit integer
function StrToNum($Str, $Check, $Magic) {
    $Int32Unit = 4294967296;  // 2^32

    $length = strlen($Str);
    for ($i = 0; $i < $length; $i++) {
        $Check *= $Magic; 	
        //If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31), 
        //  the result of converting to integer is undefined
        //  refer to http://www.php.net/manual/en/language.types.integer.php
        if ($Check >= $Int32Unit) {
            $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));
            //if the check less than -2^31
            $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
        }
        $Check += ord($Str{$i}); 
    }
    return $Check;
}

//genearate a hash for a url
function HashURL($String) {
    $Check1 = StrToNum($String, 0x1505, 0x21);
    $Check2 = StrToNum($String, 0, 0x1003F);

    $Check1 >>= 2; 	
    $Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F);
    $Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF);
    $Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF);	
	
    $T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2 ) | ($Check2 & 0xF0F );
    $T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 );
	
    return ($T1 | $T2);
}

//genearate a checksum for the hash string
function CheckHash($Hashnum) {
    $CheckByte = 0;
    $Flag = 0;

    $HashStr = sprintf('&#37;u', $Hashnum) ;
    $length = strlen($HashStr);
	
    for ($i = $length - 1;  $i >= 0;  $i --) {
        $Re = $HashStr{$i};
        if (1 === ($Flag % 2)) {              
            $Re += $Re;     
            $Re = (int)($Re / 10) + ($Re % 10);
        }
        $CheckByte += $Re;
        $Flag ++;	
    }

    $CheckByte %= 10;
    if (0 !== $CheckByte) {
        $CheckByte = 10 - $CheckByte;
        if (1 === ($Flag % 2) ) {
            if (1 === ($CheckByte % 2)) {
                $CheckByte += 9;
            }
            $CheckByte >>= 1;
        }
    }

    return '7'.$CheckByte.$HashStr;
}

//return the pagerank checksum hash
function getch($url) { return CheckHash(HashURL($url)); }

//return the pagerank figure
function getpr($url) {
	global $googlehost,$googleua;
	$ch = getch($url);
	$fp = fsockopen($googlehost, 80, $errno, $errstr, 30);
	if ($fp) {
	   $out = "GET /search?client=navclient-auto&ch=$ch&features=Rank&q=info:$url HTTP/1.1\\r\
";
	   //echo "<pre>$out</pre>\
"; //debug only
	   $out .= "User-Agent: $googleua\\r\
";
	   $out .= "Host: $googlehost\\r\
";
	   $out .= "Connection: Close\\r\
\\r\
";
	
	   fwrite($fp, $out);
	   
	   //$pagerank = substr(fgets($fp, 128), 4); //debug only
	   //echo $pagerank; //debug only
	   while (!feof($fp)) {
			$data = fgets($fp, 128);
			//echo $data;
			$pos = strpos($data, "Rank_");
			if($pos === false){} else{
				$pr=substr($data, $pos + 9);
				$pr=trim($pr);
				$pr=str_replace("\
",'',$pr);
				return $pr;
			}
	   }
	   //else { echo "$errstr ($errno)<br />\
"; } //debug only
	   fclose($fp);
	}
}

//generate the graphical pagerank
function pagerank($url,$width=40,$method='style') {
	if (!preg_match('/^(http:\\/\\/)?([^\\/]+)/i', $url)) { $url='http://'.$url; }
	$pr=getpr($url);
	$pagerank="PageRank: $pr/10";

	//The (old) image method
	if ($method == 'image') {
	$prpos=$width*$pr/10;
	$prneg=$width-$prpos;
	$html='<img src="http://www.google.com/images/pos.gif" width='.$prpos.' height=4 border=0 alt="'.$pagerank.'"><img src="http://www.google.com/images/neg.gif" width='.$prneg.' height=4 border=0 alt="'.$pagerank.'">';
	}
	//The pre-styled method
	if ($method == 'style') {
	$prpercent=100*$pr/10;
	$html='<div style="position: relative; width: '.$width.'px; padding: 0; background: #D9D9D9;"><strong style="width: '.$prpercent.'%; display: block; position: relative; background: #5EAA5E; text-align: center; color: #333; height: 4px; line-height: 4px;"><span></span></strong></div>';
	}
	
	$out=''.$html.'';
	return $out." PageRank = ".$pr." /10<br>";
}

// for loop for finding pagerank of multple urls
        foreach ($pieces as $url)
        {
            $url = trim($url);
            echo $url, pagerank($url);
        }

}

 if (!$referer == '') {
      echo '<p><a href="' . $referer . '" title="Return to the previous page">&laquo; Go back</a></p>';
   } else {
      echo '<p><a href="javascript:history.go(-1)" title="Return to the previous page">&laquo; Go back</a></p>';
   }
?>

Any help would be appreciated. Thanks!

You’ve posted a whole bunch of functions there, perhaps you can narrow down the code to where you might set this limit (n perhaps use highlighting :slight_smile: )

I think around here is what I want to fix.

if ((!isset($_POST[‘urls’])) && (!isset($_GET[‘urls’])))
{ echo ‘<center><form action=“” method=“post”><textarea name=“urls” cols=“36” rows=“9”></textarea><br><input type=“submit” name=“Submit” value=“enter multiple url on new lines and click here”></form></center>’; }
if (isset($_POST[‘urls’]))
{
$tempurls=$_POST[‘urls’];
$pieces = explode("
", $tempurls); // finding all submitted urls
$size=sizeof($pieces); // array size to use in the for loop at the end of program

The original idea was to have a one text area box where anyone could copy and paste into, like in this case what I have now and to try to make it grab the urls every link break. This works, however, I want to limit the number of URLs it grabs. Is it possible to only grab 10 without distorting the coding?

The current coding grabs URLs from the textbox named “URLs,” which controls every line. Is it possible to limit it to only check 10 without having to use assigned individual variables?

And basically this code outputs the URLs and the PageRank, however, I cannot figure how to limit this without disrupting it.

        foreach ($pieces as $url)
        {
            $url = trim($url);
            echo $url, pagerank($url);
        }

}

Thanks for your help!

make a variable and initialize it to zero.
inside the loop, increment the value by 1.

use an if statement to test whether the value is greater than 9.

another way- use array_slice() to extract 10 peices, and then just loop over that array instead.

I’m limited to what PHP knowledge I know but I’ll try my best. Any samples of incorporating these techniques within the code would greatly be appreciated.

Also a question. Wouldn’t array_slice() just show the first 10 links? Do you think it is possible to also limit the amount of look ups per request? Like for example, I add 25 URLs to check and lets pretend I got array_slice working and it displays only 10 URLs. Wouldn’t it still look up the additional 15 as well but just doesn’t display it?

Thanks for your help.

Edit**

I found this code, I think it may help me to understanding the post +1 increment, however, how do you limit it to stop at 10?

<?php
$i=1;
do
  {
  $i++;
  echo "The number is " . $i . "<br />";
  }
while ($i<=5);
?>

        foreach ($pieces as $index=>$url)
        {
            if($index == 10) break;
            $url = trim($url);
            echo $url, pagerank($url);
        }


Thanks for the help. I’ve tried the code and at first it had the results I wanted, but after a second try of inputting URLs more than the 10 limit, it still continues to make new line breaks for those and not stop.

I am very grateful for your guys help.