Avatar of jhmplondon
jhmplondon

asked on 

PHP script overloads server

Hi guys,

I have customised version of OpenX ad server, I asked someone to add a code that will read content of meta keywords and depending on that will show accurate ads, it works great however after few days my servers needs restarting because the file takes 99% of server power (to be precise it's pretty good dedicated server).

So... below is a part responsible for extracting meta keywords and serving appropriate ads. Do you guys see something in code that could make it overload the server? Just to clarify again, its purpose is to extract only keywords, not the whole page content. I'm not php geek and i don't understand anything in this code.
$url = $GLOBALS['loc'];

	$fp = fopen( $url, 'r' );
	$content = "";

	while( !feof( $fp ) )
	{
		$buffer = trim(fgets($fp, 4096));
		$content .= $buffer;
	}

	$start = '<title>';
	$end = '<\/title>';

	preg_match( "/$start(.*)$end/s", $content, $match );
	$title = $match[ 1 ];
	

	$metatagarray = get_meta_tags( $url );
		
	$keywords = $metatagarray[ "keywords" ];
	
if(!empty($keywords)) {


		$temp = explode(",",$keywords);

	
		for($i=0;$i<count($temp);$i++)
		{

		$add=explode(' ',trim($temp[$i]));

			if(sizeof($add)> 1)
			{

				$temp=array_merge($temp,$add);
	
			}
	
		}
	
		if(sizeof($temp)< 2)
		{
			$temp = explode(" ",$keywords);
		} 


		 $count = count($temp);

} else {

	$count = 0;

}







$con1 = mysql_connect($GLOBALS['_MAX']['CONF']['database']['host'],$GLOBALS['_MAX']['CONF']['database']['username'],$GLOBALS['_MAX']['CONF']['database']['password']);
mysql_select_db($GLOBALS['_MAX']['CONF']['database']['name'], $con1)or die("culnot select:".mysql_error());
$table_prefix = $GLOBALS['_MAX']['CONF']['table']['prefix'];

$keywordAds = array(); $nokeywordAds = array(); $k = 0; $nk = 0; 
$l = 0; $lastToSendAd = array();



	  $query = mysql_query("SELECT * FROM ".$table_prefix."ad_zone_assoc WHERE zone_id =".$_GET['zoneid']." ") or die("Error1".mysql_error());



	 if(mysql_num_rows($query)>0)
		{   
			while ($rowValues = mysql_fetch_assoc($query)) {	

				 $bannerQuery = mysql_query("SELECT * FROM oxm_keyword WHERE banner_id =".$rowValues['ad_id']." ") or die("Error2".mysql_error());

				if(mysql_num_rows($bannerQuery) > 0) {   

					$rowKeywords = mysql_fetch_assoc($bannerQuery);

						if(($count >= 1)) {

					    		for ($j = 0; $j < $count; $j++)
							{
									if ( strcmp (strtolower(trim($rowKeywords['keyword'])),strtolower(trim($temp[$j]))) == 0 )
									{
										 $lastToSendAd[$l] = $rowKeywords['banner_id'];
										 $l++;

									} 
							}

						} 

					
				 } else {

						$nokeywordAds[$nk] = $rowValues['ad_id'];
						$nk++;

				} 


			}

		}

	$keywordAdsCount =  sizeof($lastToSendAd);


	$nokeywordAdsCount =  sizeof($nokeywordAds);


	
	if($count >= 1) {

			if(!empty($lastToSendAd)) {


				if($keywordAdsCount > 1) {

					$banid=$lastToSendAd[rand(0,($keywordAdsCount-1))];

				} else {

					$banid=$lastToSendAd[0];
				}
					
					$ad = MAX_cacheGetAd($banid);

			} else {

				if($nokeywordAdsCount > 1) {

					$banid=$nokeywordAds[rand(0,($nokeywordAdsCount-1))];

				} else {

					$banid=$nokeywordAds[0];
				}
	
				$ad = MAX_cacheGetAd($banid);


			}


	} else {


				if($nokeywordAdsCount > 1) {

					$banid=$nokeywordAds[rand(0,($nokeywordAdsCount-1))];

				} else {

					$banid=$nokeywordAds[0];
				}
	
				$ad = MAX_cacheGetAd($banid);


	}

Open in new window



Thanks for help
PHP

Avatar of undefined
Last Comment
Erdinç Güngör Çorbacı
ASKER CERTIFIED SOLUTION
Avatar of Ray Paseur
Ray Paseur
Flag of United States of America image

Blurred text
THIS SOLUTION IS ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
Great questions

The ones from Ray Paseur  ... nothing less nothing more ...

But i want to take my shoot :)... i guess... Replacing line 80 with

$bannerQuery = NULL;

will speed up (Surely will not achieve what it has to and also -maybe- return many errors )

Query in a loop without a limit is a serious risk...
PHP
PHP

PHP is a widely-used server-side scripting language especially suited for web development, powering tens of millions of sites from Facebook to personal WordPress blogs. PHP is often paired with the MySQL relational database, but includes support for most other mainstream databases. By utilizing different Server APIs, PHP can work on many different web servers as a server-side scripting language.

125K
Questions
--
Followers
--
Top Experts
Get a personalized solution from industry experts
Ask the experts
Read over 600 more reviews

TRUSTED BY

IBM logoIntel logoMicrosoft logoUbisoft logoSAP logo
Qualcomm logoCitrix Systems logoWorkday logoErnst & Young logo
High performer badgeUsers love us badge
LinkedIn logoFacebook logoX logoInstagram logoTikTok logoYouTube logo