PX : code

AdRotator by Walker Chen
Download this code


<? /* ------ ADROTATOR.HP ------ */
/* 
VER 1.00

NOTICE:
PHP(3.0.5) ADROTATOR developed by WALKER.CHEN
Bugs report can be sent to walker@chinavista.com

Quote/Refer/Use any part of code here for commercial purpose
without formal written permission from me is strictly prohibitted.

(C) WalkerSoft, 1997-1998

HELP:
1. The adrotator.ini file format:

// -------------- BEGIN_OF_ADROTATOR.INI -------------- 

// MEANING OF EACH FIELD:
//   [ID_STRING] : For specific request
//   ver: 0:English 1:S-Chinese 2:T-Chinese
//   url: Universal Resource Location
//   img: Image
//   alt: Alter text
//   bkg: Background
//   tit: Title
//   des: Brief description
//   pri: Time privilege

[walkersoft]
ver = 0
url = /simpleworld/events/urlguide.phtml?http://walker.chinavista.com/simpleworld/
img = /simpleworld/ads/walkersoft.gif
alt = Join in for better programming
bkg = #2020c0
tit = <font face="Arial" size="+2" style="color:white"><b><i>Better programming</i></b></font><br>
des = <font face="Courier" size="-1" style="color:white">Join for fun, join for better programming!</font>
pri = 100

[walkersoft_ch]
ver = 1
url = http://walker.chinavista.com/simpleworld/?Chinese
img = /simpleworld/ads/walkersoft.gif
alt = 进入我的主页
bkg = #2020c0
tit = <font size="+2" style="color:white"><b><i>编程、网络、Linux、站点管理</i></b></font><br>
des = <font size="+0" style="color:white">让所有的这些变得更简单!</font>
pri = 100
// -------------- END_OF_ADROTATOR.INI -------------- 

2. Usage examples:

<? AdRotator() ?>               // Default: Image_Adbar & Random_Display
<? AdRotator( 0, 0 ) ?>         // Text_Adbar AND Occur with previllege
<? AdRotator( 0, 1 ) ?>         // Text_Adbar AND Occur without previllege
<? AdRotator( 1, 0 ) ?>         // Image_Adbar AND Occur with previllege
<? AdRotator( 1, 1 ) ?>         // Image_Adbar AND Occur without previllege
<? AdRotator( "walkersoft" ) ?> // Only display walkersoft's ad

REVISION HISTORY:
0.99: 
  RELEASED: Oct. 22, 1998
  Start working on this ad rotator on Oct. 22, 1998.
  
1.00: 
  RELEASED: Nov. 2, 1998
  The version you are currently reading. 
  
CONTACT INFORMATION:
  E-NAME : Walker Chen (ChenChaoRen)
  C-NAME : 陈超仁
  MAIL   : walker@chinavista.com
         webmaster@walker.chinavista.com
  HTTP   : http://walker.chinavista.com
  PHONE  : +86-592-6021666-1225
  FAX    : +86-592-6023225
*/
?>

<?
// Server Environment
$PhpVer      =  phpversion();

$DocRoot     =  getenv( "DOCUMENT_ROOT");
$WWWRoot     = $DocRoot;

if( $DocRoot == "" )                      // NT version, set DocRoot manually
{
  $DocRoot = get_cfg_var( "doc_root" );
}
$DocRoot = $DocRoot . "/simpleworld";
?>

<?
/* --------------------------------------------------
            AdRotator : For Advertisement
   --------------------------------------------------

Parameters:   
  $ImgFlag  : 0 -> No Image
              1 -> Has Image
  $AdType   : 0 -> Random with privillege
              1 -> Random without previllege
  $ReqAdStr : Request ad_IDS (ID_STRING)

*/
function AdRotator( $ImgFlag = 1, $AdType = 0, $ReqAdStr = "" )
{
  ShowAdRotator( $ImgFlag, $AdType, $ReqAdStr );
}

function ShowAdRotator( $ImgFlag = 1, $AdType = 0, $ReqAdStr = "" )
{
  global $DocRoot, $WWWRoot;
  
  // Local variables
  $SuccessFlag   = FALSE;

  $VerFlagStr    = "ver = ";
  $UrlFlagStr    = "url = ";
  $ImgFlagStr    = "img = ";
  $AltFlagStr    = "alt = ";
  $BkgFlagStr    = "bkg = ";
  $TitFlagStr    = "tit = ";
  $DesFlagStr    = "des = ";
  $PriFlagStr    = "pri = ";
    
  $Ver           = 0;      // 0:English 1:S-Chinese 2:T-Chinese ....
  $Url           = "";     // Universal Resource Location
  $Img           = "";     // Image
  $Alt           = "";     // Alter text
  $Bkg           = "";     // Background
  $Tit           = "";     // Title
  $Des           = "";     // Brief description
  
  $TotalPri      = 0;
  $EachPri       = array();
  $TotalAds      = 0;

  $AdsPass       = -1;
   
  $AdIniFilename = $DocRoot . "/incs/adrotator.ini";

  // Read all lines into buffer 
  $FileBuf = file( $AdIniFilename );
  
  // If using privilege
  if( $ReqAdStr=="" AND $AdType == 0 )
  {
    // echo "With privilege";
    // Fetch each pri number in a array
    for( $i = 0; $FileBuf[$i];  $i++ )
    {
       if( substr( $FileBuf[$i], 0, strlen( $PriFlagStr ) ) == $PriFlagStr )
       {
          $EachPri[ $TotalAds ] = (int)substr( $FileBuf[$i], strlen( $PriFlagStr ) );
         $TotalPri += $EachPri[ $TotalAds ];
         if( $TotalAds > 0 ) $EachPri[ $TotalAds ] += $EachPri[ $TotalAds -1 ];
         
         /*DEBUG
         echo $EachPri[ $TotalAds ];
         echo "_";
         DEBUG*/
         
         $TotalAds++;
       }
    }
    
    // Generated the random ID
    srand( (double)microtime()*1000000 );
    $Random = rand();
    $Random = $Random % $TotalPri;

    /*DEBUG
    echo $TotalPri;
    echo "_";
    echo $Random;
    echo ":";
    echo $TotalAds;
    DEBUG*/
    
    for( $i=0; $i<$TotalAds; $i++)
    {
      if( $i == ($TotalAds - 1) )   // Last one 
      {
        if( $Random >= $EachPri[$i-1] )
        {
          $SelectAd = $i;
          break;
        }
      }
      else if( $i == 0 )            // First one
            {
             if( $Random < $EachPri[$i] )
             {
                $SelectAd = $i;
                break;
             }
          }
          else
          {
             if( $Random >= $EachPri[$i-1] AND $Random < $EachPri[$i] )
             {
                $SelectAd = $i;
                break;
             }
          }
    }

    /*DEBUG
    echo "RID->";
    echo $Random;
    echo ":SEL->";
    echo $SelectAd;
    DEBUG*/
  }
  else         // Count total ads
  {
    // echo "Without privillege";
    for( $i = 0; $FileBuf[$i];  $i++ )
    {
       if( substr( $FileBuf[$i], 0, strlen( $PriFlagStr ) ) == $PriFlagStr )
       {
         $TotalAds++;
       }
    }
    srand( (double)microtime()*1000000 );
    $Random = rand();
    $SelectAd = $Random % (int)$TotalAds;
  }
  
  for( $i = 0; $FileBuf[$i];  $i++ )
  {
    // If using a specfic IDS
    if( $ReqAdStr != "" )
    {
      // If data beings
      if( substr( $FileBuf[$i], 1, strlen($ReqAdStr) ) == $ReqAdStr )
       {
        // Echo "<br>SPECIFIED";
          // Get version ID
        $i++;
        $Ver = (int)substr( $FileBuf[$i], strlen( $VerFlagStr ) );

        // Get URL
        $i++;
        $Url = substr( $FileBuf[$i], strlen( $UrlFlagStr ) );

        // Get IMG
        $i++;
        $Img = substr( $FileBuf[$i], strlen( $ImgFlagStr ) );

        // Get ALT
        $i++;
        $Alt = substr( $FileBuf[$i], strlen( $AltFlagStr ) );

        // Get background
        $i++;
        $Bkg = substr( $FileBuf[$i], strlen( $BkgFlagStr ) );

        // Get title
        $i++;
        $Tit = substr( $FileBuf[$i], strlen( $TitFlagStr ) );

        // Get description
        $i++;
        $Des = substr( $FileBuf[$i], strlen( $DesFlagStr ) );

        $SuccessFlag = TRUE;
        break;
      }
    }
    else          // If using random request IDS
    {
      // If selction not reached, to bypass unwanted ADS
      if( substr( $FileBuf[$i], 0, strlen($VerFlagStr) ) == $VerFlagStr )
      {    
         $AdsPass++;
      }

      // If Random selection is matched
      if( $SelectAd == $AdsPass )
      {
        // Get version ID
        $Ver = (int)substr( $FileBuf[$i], strlen( $VerFlagStr ) );

        // Get URL
        $i++;
        $Url = substr( $FileBuf[$i], strlen( $UrlFlagStr ) );

         // Get IMG
        $i++;
        $Img = substr( $FileBuf[$i], strlen( $ImgFlagStr ) );

        // Get ALT
        $i++;
        $Alt = substr( $FileBuf[$i], strlen( $AltFlagStr ) );

        // Get background
        $i++;
        $Bkg = substr( $FileBuf[$i], strlen( $BkgFlagStr ) );

        // title
        $i++;
        $Tit = substr( $FileBuf[$i], strlen( $TitFlagStr ) );

        // Get description
        $i++;
        $Des = substr( $FileBuf[$i], strlen( $DesFlagStr ) );

        $SuccessFlag = TRUE;
        break;
      } // End of data begin/not begin marching
    }   // End of random / specfic marching
  }     // End of for(...) loop
  
  // Output the ad string
  if( !$SuccessFlag )
  {
    $Ver = 0;
    $Url = "mailto:walker@chinavista.com";
    $Img = "/simpleworld/ads/walkersoft.gif";
    $Alt = "Click to mail me for bug report!";
    $Bkg = "#404080";
    $Tit = "<font face='arial' size='+2' color='red'><i>OPPS, missing adbar data!</i></font><br>";
    $Des = "<font face='arial' size='-1' color='white'>Please send me a report if you found a bug.</font>";
  }
  else
  {
    $Url = Chop( $Url );
    $Img = Chop( $Img );
    $Bkg = Chop( $Bkg );
    $Tit = Chop( $Tit );
    $Des = Chop( $Des );
  }
  
  if( $Img != "" AND $ImgFlag == 1 )          // Has image
  {
    echo '<table border="0" cellspacing="0" cellpadding="0">';
    echo "\n";
    echo '<tr>';
    echo "\n";
    
    echo '    <td ';
    echo 'align="center">';
    echo "\n";
    echo "<a href='";
    echo $Url;
    echo "' style='text-decoration:none'>";
    
    echo '<IMG SRC="';
    echo $Img;
    echo '" ALT="';
    echo $Alt;
    echo '" border=0>';

    echo '</a>';
    echo "\n";
    echo '    </td>';

    echo "\n";
    echo '</tr>';
    echo "\n";
    print '</table>';
    echo "\n";
 }
  else
  {
    echo '<table width="468" border="0" cellspacing="0" cellpadding="0" bordercolor="Gray" bordercolorlight="Gray" bordercolordark="Gray">';
    echo "\n";
    echo '<tr>';
    echo "\n";
    
    echo '    <td height="60" ';
    echo 'bgcolor="';
    echo $Bkg;
    echo '" align="center">';
    echo "\n";

    print "<a href='";
    echo $Url;
    echo "' style='text-decoration:none'>";
    echo $Tit;
    echo "\n";
    echo $Des;

    echo '</a>';
    echo "\n";
    echo '    </td>';

    echo "\n";
    echo '</tr>';
    echo "\n";
    print '</table>';
    echo "\n";
  }
}

function AllTrim( $String )
{
  $String = Chop( $String );
  $String = strrev( $String );
  $String = Chop( $String );
  $String = strrev( $String );
  return $String;
}
?>

Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.