AdRotator 類模仿 ASP 經典 AdRotator 組件,支援從文本配置文件讀取廣告列表,隨機輪播,可設定寬高、邊框、跳轉頁、目標窗口等屬性。
<?php
class AdRotator {
var $Target = "_blank"; // 鏈接目標窗口
var $Width = "460"; // 廣告寬度
var $Height = "60"; // 廣告高度
var $Border = 0; // 邊框
var $Redirect = ""; // 跳轉中轉頁
var $BannerData = array(); // 廣告數據緩存
var $RandTemp = 1; // 上次隨機ID,防連續重複
function AdRotator() {} // 構造函數
// 公開方法:獲取廣告HTML
function GetAdvertisement($adfile) {
if (count($this->BannerData) == 0) {
$this->BannerData = $this->ReadAdFile($adfile);
}
$AdData = $this->BannerData;
$uplimited = count($AdData);
// 隨機選取,避免連續重複
srand((double)microtime() * 1000000000000000000);
$id = @rand(1, $uplimited);
while ($this->RandTemp == $id) {
srand((double)microtime() * 1000000000000000000);
$id = @rand(1, $uplimited);
}
$this->RandTemp = $id;
// 組裝輸出HTML
$LinkString = " <a href=\"" . $this->Redirect . "?url=" . $AdData[$id]["url"] .
"\" Target=\"" . $this->Target . "\" Title=\"" . $AdData[$id]["title"] . "\">";
$LinkString .= " <img border=\"" . $this->Border . "\" src=\"" . $AdData[$id]["image"] .
"\" width=\"" . $this->Width . "\" height=\"" . $this->Height . "\">";
$LinkString .= "</a>";
return $LinkString;
}
// 私有方法:解析配置文件
function ReadAdFile($adfile) {
$FP = fopen($adfile, "r");
$switchto = "";
$i = 0;
while ($buffer = @fgets($FP, 1024)) {
if (!eregi("#", $buffer)) { // 跳過註釋行
if (eregi("^\*", $buffer)) { $switchto = "off"; } // * 後進入廣告數據區
$SetTemp = split("=", $buffer);
if ($switchto == "") { // 解析全局設置
switch ($SetTemp[0]) {
case "REDIRECT": $this->Redirect = $SetTemp[1]; break;
case "WIDTH": $this->Width = $SetTemp[1]; break;
case "HEIGHT": $this->Height = $SetTemp[1]; break;
case "BORDER": $this->Border = $SetTemp[1]; break;
case "TARGET": $this->Target = $SetTemp[1]; break;
}
} else { // 解析單條廣告
switch ($SetTemp[0]) {
case "image": $i++; $BannerData[$i]["image"] = $SetTemp[1]; break;
case "url": $BannerData[$i]["url"] = $SetTemp[1]; break;
case "title": $BannerData[$i]["title"] = $SetTemp[1]; break;
case "rate": $BannerData[$i]["rate"] = $SetTemp[1]; break; // 預留權重
}
}
}
}
return $BannerData;
}
}
?>
REDIRECT=./adredir.asp WIDTH=468 HEIGHT=60 BORDER=0 * # 註釋行以 # 開頭 # 某公司廣告1 image=../banner/1.gif url=https://www.example.com1 title=One rate=30 # 廣告2... image=../banner/2.gif url=https://www.example.com2 title=Two rate=70 ----結束----
* 分隔全局設置與廣告數據區# 開頭為註釋image、url、title、rate(權重,當前版本未啟用)<?php
$banner = new AdRotator();
echo $banner->GetAdvertisement("./banner.txt");
echo $banner->GetAdvertisement("./banner.txt"); // 同頁多處調用不會連續重複
?>
rate 加權隨機、支援圖片預緩存、增加點擊統計、改用 preg_* 替代棄用的 eregi/split