php广告加载类用法实例

作者:shichen2014 时间:2023-11-14 14:56:53 

本文实例讲述了php广告加载类的用法,非常实用。分享给大家供大家参考。具体方法如下:

该php广告加载类,支持异步与同步加载。需要使用Jquery实现。

ADLoader.class.php类文件如下:


<?php
/** 广告加载管理类
*  Date:  2013-08-04
*  Author: fdipzone
*  Ver:  1.0
*
*  Func:
*  public load     加载广告集合
*  public setConfig  广告配置
*  private getAds    根据channel创建广告集合
*  private genZoneId  zoneid base64_encode 处理
*  private genHtml   生成广告html
*  private checkBrowser 检查是否需要同步加载的浏览器
*/

class ADLoader{ // class start

 private static $_ads = array();   // 广告集合
 private static $_step = 300;    // 广告加载间隔
 private static $_async = true;   // 是否异步加载
 private static $_config = array(); // 广告设置文件
 private static $_jsclass = null;  // 广告JS class


 /** 加载广告集合
 * @param String $channel 栏目,对应config文件
 * @param int   $step  广告加载间隔
 * @param boolean $async  是否异步加载
 */
 public static function load($channel='', $step='', $async=''){
   if(isset($step) && is_numeric($step) && $step>0){
     self::$_step = $step;
   }

   if(isset($async) && is_bool($async)){
     self::$_async = $async;
   }

   // 判断浏览器,如IE强制使用同步加载
   if(!self::checkBrowser()){
     self::$_async = false;
   }

   self::getAds($channel);
   self::genZoneId();

   return self::genHtml();
 }

 /** 设置config
 * @param String $config 广告配置
 * @param String $jsclass js class文件路径
 */
 public static function setConfig($config=array(), $jsclass=''){
   self::$_config = $config;
   self::$_jsclass = $jsclass;
 }


 /** 根据channel创建广告集合
 * @param String $channel 栏目
 */
 private static function getAds($channel=''){
   $AD_Config = self::$_config;
   if($AD_Config!=null){
     self::$_ads = isset($AD_Config[$channel])? $AD_Config[$channel] : $AD_Config['default'];
   }
 }

 /** zoneid base64_encode 处理 */
 private static function genZoneId(){

   // 同步加载广告不需要处理zoneid
   if(!self::$_async){
     return ;
   }

   $ads = self::$_ads;
   for($i=0,$len=count($ads); $i<$len; $i++){
     if(isset($ads[$i]['zoneId'])){
       $ads[$i]['zoneId'] = base64_encode('var zoneid='.$ads[$i]['zoneId'].';');
     }
   }
   self::$_ads = $ads;
 }

 /** 生成广告html */
 private static function genHtml(){
   $ads = self::$_ads;
   $html = array();
   if(self::$_jsclass!=null && $ads){
     array_push($html, '<script type="text/javascript" src="'.self::$_jsclass.'"></script>');

     // 同步需要预先加载
     if(!self::$_async){
       foreach($ads as $ad){
         array_push($html, '<div id="'.$ad['domId'].'_container" style="display:none">');
         array_push($html, '<script type="text/javascript">');
         array_push($html, 'ADLoader.preload('.json_encode($ad).');');
         array_push($html, '</script>');
         array_push($html, '</div>');
       }
     }

     array_push($html, '<script type="text/javascript">');
     array_push($html, 'var ads='.json_encode($ads).';');
     array_push($html, '$(document).ready(function(){ ADLoader.load(ads, '.self::$_step.', '.intval(self::$_async).'); });');
     array_push($html, '</script>');
   }
   return implode("\r\n", $html);
 }

 /** 判断是否需要强制同步加载的浏览器 */
 private static function checkBrowser(){
   $user_agent = $_SERVER['HTTP_USER_AGENT'];
   if(strstr($user_agent,'MSIE')!=''){
     return false;
   }
   return true;
 }

} // class end
?>

ADConfig.php文件如下:


<?php
/** 广告配置文件 **/

return array(

 'case_openx' => array(
   array(
     'type' => 'openx',
     'domId' => 'ad_728x90',
     'zoneId' => 452
   ),
   array(
     'type' => 'openx',
     'domId' => 'ad_300x250',
     'zoneId' => 449
   ),
   array(
     'type' => 'openx',
     'domId' => 'ad_l2_300x250',
     'zoneId' => 394
   ),
 ),

 'case_url' => array(
   array(
     'type' => 'url',
     'domId' => 'ad_728x90',
     'url' => 'adurl.php?zoneid=452'
   ),
   array(
     'type' => 'url',
     'domId' => 'ad_300x250',
     'url' => 'adurl.php?zoneid=449'
   ),
   array(
     'type' => 'url',
     'domId' => 'ad_l2_300x250',
     'url' => 'adurl.php?zoneid=394'
   )
 ),

 'case_sync_openx' => array(
   array(
     'type' => 'openx',
     'domId' => 'ad_728x90',
     'zoneId' => 452
   ),
   array(
     'type' => 'openx',
     'domId' => 'ad_300x250',
     'zoneId' => 449
   ),
   array(
     'type' => 'openx',
     'domId' => 'ad_l2_300x250',
     'zoneId' => 394
   ),
 ),

 'default' => array(
   array(
     'type' => 'openx',
     'domId' => 'ad_728x90',
     'zoneId' => 452
   ),
   array(
     'type' => 'openx',
     'domId' => 'ad_300x250',
     'zoneId' => 449
   ),
   array(
     'type' => 'openx',
     'domId' => 'ad_l2_300x250',
     'zoneId' => 394
   ),
 ),

);

?>

ADLoader.js文件如下:


/** 异步加载广告
*  Date:  2013-08-04
*  Author: fdipzone
*  Ver:  1.0
*/
var ADLoader = (function(){

 var _ads = [],   // 广告集合
   _step = 300,  // 广告加载间隔
   _async = true, // 是否异步加载
   _loaded = 0;  // 已经加载的广告数
 
 /** loadAd 循环加载广告
 * @param int c 第几个广告
 */
 function loadAD(c){
   if(_loaded>=_ads.length){
     return ;
   }

   if($('#'+_ads[c].domId).length>0){ // 判断dom是否存在

     if(_async){ // 异步执行

       crapLoader.loadScript(getScript(_ads[c]), _ads[c].domId, {
         success: function(){
           completeAd();
         }
       });
     
     }else{ // 将同步加载的广告显示

       var ad_container = $('#'+_ads[c].domId+'_container');
       ad_container.find('embed').attr('wmode','transparent').end().find('object').each(function(k, v){
         v.wmode = 'transparent'; // 将flash变透明
       });
       $('#'+_ads[c].domId)[0].appendChild(ad_container[0]);
       ad_container.show();
       
       completeAd();
     }
   }else{ // dom不存在
     completeAd();
   }
 }

 /** 加载完广告后处理 */
 function completeAd(){
   _loaded ++;
   setTimeout(function(){
     loadAD(_loaded);
   }, _step);    
 }

 /** 获取广告
 * @param Array ad 广告参数
 */
 function getScript(ad){
   var ret = null;

   switch(ad.type){
     case 'openx': // openx code ad
       ret = 'data:text/javascript;base64,' + ad.zoneId + 'dmFyIG0zX3UgPSAobG9jYXRpb24ucHJvdG9jb2w9PSdodHRwczonPydodHRwczovL2Fkcy5ubWcuY29tLmhrL3d3dy9kZWxpdmVyeS9hanMucGhwJzonaHR0cDovL2Fkcy5ubWcuY29tLmhrL3d3dy9kZWxpdmVyeS9hanMucGhwJyk7CnZhciBtM19yID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjk5OTk5OTk5OTk5KTsKaWYgKCFkb2N1bWVudC5NQVhfdXNlZCkgZG9jdW1lbnQuTUFYX3VzZWQgPSAnLCc7CmRvY3VtZW50LndyaXRlICgiPHNjciIrImlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0nIittM191KTsKZG9jdW1lbnQud3JpdGUgKCI/em9uZWlkPSIgKyB6b25laWQpOwpkb2N1bWVudC53cml0ZSAoJyZhbXA7Y2I9JyArIG0zX3IpOwppZiAoZG9jdW1lbnQuTUFYX3VzZWQgIT0gJywnKSBkb2N1bWVudC53cml0ZSAoIiZhbXA7ZXhjbHVkZT0iICsgZG9jdW1lbnQuTUFYX3VzZWQpOwpkb2N1bWVudC53cml0ZSAoZG9jdW1lbnQuY2hhcnNldCA/ICcmYW1wO2NoYXJzZXQ9Jytkb2N1bWVudC5jaGFyc2V0IDogKGRvY3VtZW50LmNoYXJhY3RlclNldCA/ICcmYW1wO2NoYXJzZXQ9Jytkb2N1bWVudC5jaGFyYWN0ZXJTZXQgOiAnJykpOwpkb2N1bWVudC53cml0ZSAoIiZhbXA7bG9jPSIgKyBlc2NhcGUod2luZG93LmxvY2F0aW9uKSk7CmlmIChkb2N1bWVudC5yZWZlcnJlcikgZG9jdW1lbnQud3JpdGUgKCImYW1wO3JlZmVyZXI9IiArIGVzY2FwZShkb2N1bWVudC5yZWZlcnJlcikpOwppZiAoZG9jdW1lbnQuY29udGV4dCkgZG9jdW1lbnQud3JpdGUgKCImY29udGV4dD0iICsgZXNjYXBlKGRvY3VtZW50LmNvbnRleHQpKTsKaWYgKGRvY3VtZW50Lm1tbV9mbykgZG9jdW1lbnQud3JpdGUgKCImYW1wO21tbV9mbz0xIik7CmRvY3VtZW50LndyaXRlICgiJz48XC9zY3IiKyJpcHQ+Iik7';
       break;
     
     case 'url': // url ad
       ret = ad.url;
       break;
   }
   return ret;
 }

 /** 同步加载广告
 * @param Array ad 广告参数
 */
 function writeAd(ad){
   switch(ad.type){
     case 'openx':
       var m3_u = (location.protocol=='https:'?'https://ads.nmg.com.hk/www/delivery/ajs.php':'http://ads.nmg.com.hk/www/delivery/ajs.php');
       var m3_r = Math.floor(Math.random()*99999999999);
       if (!document.MAX_used) document.MAX_used = ',';
       document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
       document.write ("?zoneid=" + ad.zoneId);
       document.write ('&cb=' + m3_r);
       if (document.MAX_used != ',') document.write ("&exclude=" + document.MAX_used);
       document.write (document.charset ? '&charset='+document.charset : (document.characterSet ? '&charset='+document.characterSet : ''));
       document.write ("&loc=" + escape(window.location));
       if (document.referrer) document.write ("&referer=" + escape(document.referrer));
       if (document.context) document.write ("&context=" + escape(document.context));
       if (document.mmm_fo) document.write ("&mmm_fo=1");
       document.write ("'><\/scr"+"ipt>");
       break;
      case 'url':
       document.write ('<script type="text/javascript" src="' + ad.url + '"></script>');
       break;
   }
 }

 obj = {

   /** 加载广告
   * @param Array  ads  广告集合
   * @param int   step 广告加载间隔
   * @param boolean async true:异步加载 false:同步加载
   */
   load: function(ads, step, async){
     _ads = ads;

     if(typeof(step)!='undefined'){
       _step = step;
     }

     if(typeof(async)!='undefined'){
       _async = async;
     }

     loadAD(_loaded);
   },

   /** 预加载广告 */
   preload: function(ad){
     if($('#'+ad.domId).length>0){  // 判断dom是否存在
       writeAd(ad);
     }
   }
 }
 return obj;

}());

/* crapLoader */
var crapLoader = (function() {
 
 var isHijacked = false,
   queue = [],
   inputBuffer = [],
   writeBuffer = {},
   loading = 0,
   elementCache = {},
   returnedElements = [],
   splitScriptsRegex = /(<script[\s\S]*?<\/script>)/gim,
   globalOptions = {
     autoRelease: true,
     parallel: true,
     debug: false
   },
   defaultOptions = {
     charset: undefined,
     success: undefined,
     func: undefined,
     src: undefined,
     timeout: 3000
   },publ,
   head = document.getElementsByTagName("head")[0] || document.documentElement,
   support = {
     scriptOnloadTriggeredAccurately: false,
     splitWithCapturingParentheses: ("abc".split(/(b)/)[1]==="b")
   };
 
 function checkQueue () {
   if(queue.length) {
     loadScript( queue.shift() );
   } else if(loading === 0 && globalOptions.autoRelease) {
     debug("Queue is empty. Auto-releasing.");
     publ.release();
   }
 }

 function checkWriteBuffer (obj) {
   var buffer = writeBuffer[obj.domId],
     returnedEl;

   if(buffer && buffer.length) {
     writeHtml( buffer.shift(), obj );

   } else {
     while (returnedElements.length > 0) {
       returnedEl = returnedElements.pop();
       var id = returnedEl.id;
       var elInDoc = getElementById(id);
       if (!elInDoc) { continue; }
       var parent = elInDoc.parentNode;
       elInDoc.id = id + "__tmp";
       parent.insertBefore(returnedEl, elInDoc);
       parent.removeChild(elInDoc);
     }
     finished(obj);
   }
 }

 function debug (message, obj) {
   if(!globalOptions.debug || !window.console) { return; }
   var objExtra = "";
   if(obj) {
     objExtra = "#"+obj.domId+" ";
     var depth = obj.depth;
     while(depth--) { objExtra += "  "; }
   }
   console.log("crapLoader " + objExtra + message);
 }

 function extend (t, s) {
   var k;
   if(!s) { return t; }
   for(k in s) {
     t[k] = s[k];
   }
   return t;
 }

 function finished (obj) {
   if(obj.success && typeof obj.success === "function") {
     obj.success.call( document.getElementById(obj.domId) );
   }
   checkQueue();
 }

 function flush (obj) {
   var domId = obj.domId,
     outputFromScript,
     htmlPartArray;

   outputFromScript = stripNoScript( inputBuffer.join("") );
   inputBuffer = [];

   htmlPartArray = separateScriptsFromHtml( outputFromScript );

   if(!writeBuffer[domId]) {
     writeBuffer[domId] = htmlPartArray;
   } else {
     Array.prototype.unshift.apply(writeBuffer[domId], htmlPartArray);
   }
   checkWriteBuffer(obj);
 }

 function getCachedElById (domId) {
   return elementCache[domId] || (elementCache[domId] = document.getElementById(domId));
 }

 function getElementById (domId) {
   return ( publ.orgGetElementById.call ?
     publ.orgGetElementById.call(document, domId) :
     publ.orgGetElementById(domId) );
 }

 function getElementByIdReplacement (domId) {
   var el = getElementById(domId),
     html, frag, div, found;

   function traverseForElById(domId, el) {
     var children = el.children, i, l, child;
     if(children && children.length) {
       for(i=0,l=children.length; i<l; i++) {
         child = children[i];
         if(child.id && child.id === domId) { return child; }
         if(child.children && child.children.length) {
           var tmp = traverseForElById(domId, child);
           if (tmp) return tmp;
         }
       }
     }
   }

   function searchForAlreadyReturnedEl(domId) {
     var i, l, returnedEl;
     for(i=0,l=returnedElements.length; i<l; i++) {
       returnedEl = returnedElements[i];
       if(returnedEl.id === domId) { return returnedEl; }
     }
   }

   if(el) { return el; }

   if (returnedElements.length) {
     found = searchForAlreadyReturnedEl(domId);
     if (found) {
       return found;
     }
   }

   if(inputBuffer.length) {
     html = inputBuffer.join("");
     frag = document.createDocumentFragment();
     div = document.createElement("div");
     div.innerHTML = html;
     frag.appendChild(div);
     found = traverseForElById(domId, div);
     if (found) {
       returnedElements.push(found);
     }
     return found;
   }
 }

 var globalEval = (function () {
   return (window.execScript ? function(code, language) {
     window.execScript(code, language || "JavaScript");
   } : function(code, language) {
     if(language && !/^javascript/i.test(language)) { return; }
     window.eval.call(window, code);
   });
 }());

 function isScript (html) {
   return html.toLowerCase().indexOf("<script") === 0;
 }

 function runFunc (obj) {
   obj.func();
   obj.depth++;
   flush(obj);
 }

 function loadScript (obj) {
   loading++;
   // async loading code from jQuery
   var script = document.createElement("script");
   if(obj.type) { script.type = obj.type; }
   if(obj.charset) { script.charset = obj.charset; }
   if(obj.language) { script.language = obj.language; }

   logScript(obj);

   var done = false;
   // Attach handlers for all browsers
   script.onload = script.onreadystatechange = function() {
     loading--;
     script.loaded = true;
     if ( !done && (!this.readyState ||
         this.readyState === "loaded" || this.readyState === "complete") ) {
       done = true;
       script.onload = script.onreadystatechange = null;
       debug("onload " + obj.src, obj);
       flush(obj);
     }
   };

   script.loaded = false;
   script.src = obj.src;
   obj.depth++;

   // Use insertBefore instead of appendChild to circumvent an IE6 bug.
   // This arises when a base node is used (#2709 and #4378).
   head.insertBefore( script, head.firstChild );
   setTimeout(function() {
     if(!script.loaded) { throw new Error("SCRIPT NOT LOADED: " + script.src); }
   }, obj.timeout);
 }

 function logScript (obj, code, lang) {
   debug((code ?
     "Inline " + lang + ": " + code.replace("\n", " ").substr(0, 30) + "..." :
     "Inject " + obj.src), obj);
 }

 function separateScriptsFromHtml (htmlStr) {
   return split(htmlStr, splitScriptsRegex);
 }

 function split (str, regexp) {
   var match, prevIndex=0, tmp, result = [], i, l;

   if(support.splitWithCapturingParentheses) {
     tmp = str.split(regexp);
   } else {
     // Cross browser split technique from Steven Levithan
     // http://blog.stevenlevithan.com/archives/cross-browser-split
     tmp = [];
     while(match = regexp.exec(str)) {
       if(match.index > prevIndex) {
         result.push(str.slice(prevIndex, match.index));
       }

       if(match.length > 1 && match.index < str.length) {
         Array.prototype.push.apply(tmp, match.slice(1));
       }

       prevIndex = regexp.lastIndex;
     }

     if(prevIndex < str.length) {
       tmp.push(str.slice(prevIndex));
     }

   }

   for(i=0, l=tmp.length; i<l; i=i+1) {
     if(tmp[i]!=="") { result.push(tmp[i]); }
   }
   return result;
 }

 function stripNoScript (html) {
   return html.replace(/<noscript>[\s\S]*?<\/noscript>/ig, "");
 }

 function trim (str) {
   if(!str) { return str; }
   return str.replace(/^\s*|\s*$/gi, "");
 }

 function writeHtml (html, obj) {
   if( isScript(html) ) {
     var dummy = document.createElement("div");
     dummy.innerHTML = "dummy<div>" + html + "</div>"; // trick for IE
     var script = dummy.children[0].children[0];
     var lang = script.getAttribute("language") || "javascript";
     if(script.src) {
       obj.src = script.src;
       obj.charset = script.charset;
       obj.language = lang;
       obj.type = script.type;
       loadScript(obj);
     } else {
       var code = trim( script.text );
       if(code) {
         logScript( obj, code, lang);
         globalEval( code, lang);
       }
       flush(obj);
     }
   } else {
     var container = getCachedElById(obj.domId);
     if(!container) {
       throw new Error("crapLoader: Unable to inject html. Element with id '" + obj.domId + "' does not exist");
     }
     
     html = trim(html); // newline before <object> cause weird effects in IE
     if(html) {
       container.innerHTML += html;
     }
     checkWriteBuffer(obj);
   }
 }

 function writeReplacement (str) {
   inputBuffer.push(str);
   debug("write: " + str);
 }

 function openReplacement () {
   // document.open() just returns the document when called from a blocking script:
   // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-open
   return document;
 }

 function closeReplacement () {
   // document.close() does nothing when called from a blocking script:
   // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-close
 }

 publ = {
   hijack: function(options) {
     if(isHijacked) { return; }
     isHijacked = true;
     extend(globalOptions, options);
     if(globalOptions.parallel && !support.scriptOnloadTriggeredAccurately) {
       globalOptions.parallel = false;
       debug("Browsers onload is not reliable. Disabling parallel loading.");
     }

     document.write = document.writeln = writeReplacement;
     document.open = openReplacement;
     document.close = closeReplacement;
     document.getElementById = getElementByIdReplacement;
   },

   release: function() {
     if(!isHijacked) { return; }
     isHijacked = false;
     document.write = this.orgWrite;
     document.writeln = this.orgWriteLn;
     document.open = this.orgOpen;
     document.close = this.orgClose;
     document.getElementById = this.orgGetElementById;
     elementCache = {};
   },

   handle: function(options) {
     if(!isHijacked) {
       debug("Not in hijacked mode. Auto-hijacking.");
       this.hijack();
     }
     var defaultOptsCopy = extend({}, defaultOptions);
     var obj = extend(defaultOptsCopy, options);
     obj.depth = 0;

     if (!obj.domId) {
       obj.domId = "craploader_" + new Date().getTime();
       var span = document.createElement("span");
       span.id = obj.domId;
       document.body.appendChild(span);
     }

     if (options.func) {
       runFunc(obj);
       return;
     }

     if(globalOptions.parallel) {
       setTimeout(function() {
         loadScript(obj);
       }, 1);
     } else {
       queue.push(obj);
       setTimeout(function() {
         if(loading === 0) {
           checkQueue();
         }
       }, 1);
     }
   },

   loadScript: function(src, domId, options) {
     if (typeof domId !== "string") {
       options = domId;
       domId = undefined;
     }
     this.handle(extend({
       src:  src,
       domId: domId
     }, options));
   },

   runFunc: function(func, domId, options) {
     if (typeof domId !== "string") {
       options = domId;
       domId = undefined;
     }
     this.handle( extend({
       domId: domId,
       func:   func
     }, options) );
   },

   orgGetElementById  : document.getElementById,
   orgWrite      : document.write,
   orgWriteLn     : document.writeln,
   orgOpen       : document.open,
   orgClose      : document.close,
   _olt        : 1,
   _oltCallback    : function() {
     support.scriptOnloadTriggeredAccurately = (publ._olt===2);
   }
 };

 return publ;
}());

demo.php示例程序如下:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title> AD Loader </title>
<style type="text/css">
.banner1{margin:10px; border:1px solid #CCCCCC; width:728px; height:90px;}
.banner2{margin:10px; border:1px solid #CCCCCC; width:300px; height:250px;}
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
</head>

<body>
<div class="banner1" id="ad_728x90"></div>
<div class="banner2" id="ad_300x250"></div>
<div class="banner2" id="ad_l2_300x250"></div>
 
<?php
 function showAD($channel='', $step='', $async=''){
  include('ADLoader.class.php');
  $ad_config = include('ADConfig.php');
  ADLoader::setConfig($ad_config, 'ADLoader.js');
  return ADLoader::load($channel, $step, $async);
 }

 echo showAD('case_openx'); // 异步加载
 //echo showAD('case_url');  // url方式异步加载
 //echo showAD('case_sync_openx', 300, false); // 同步加载
?>

</body>
</html>

adurl.php文件如下:


<?php
$zoneid = isset($_GET['zoneid'])? intval($_GET['zoneid']) : 0;
if($zoneid){
?>
var zoneid = <?=$zoneid ?>;
var m3_u = (location.protocol=='https:'?'https://ads.nmg.com.hk/www/delivery/ajs.php':'http://ads.nmg.com.hk/www/delivery/ajs.php');
var m3_r = Math.floor(Math.random()*99999999999);
if (!document.MAX_used) document.MAX_used = ',';
document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
document.write ("?zoneid=" + zoneid);
document.write ('&cb=' + m3_r);
if (document.MAX_used != ',') document.write ("&exclude=" + document.MAX_used);
document.write (document.charset ? '&charset='+document.charset : (document.characterSet ? '&charset='+document.characterSet : ''));
document.write ("&loc=" + escape(window.location));
if (document.referrer) document.write ("&referer=" + escape(document.referrer));
if (document.context) document.write ("&context=" + escape(document.context));
if (document.mmm_fo) document.write ("&mmm_fo=1");
document.write ("'><\/scr"+"ipt>");
<? } ?>

本文所述完整实例源码点击此处本站下载。

希望本文所述对大家的php程序设计有所帮助。

标签:php,广告,加载,类
0
投稿

猜你喜欢

  • 软件测试面试如何测试网页的登录页面

    2023-12-10 20:45:30
  • javascript实现Table排序的方法

    2024-04-19 10:16:19
  • MYSQL慢查询和日志实例讲解

    2024-01-26 12:20:35
  • jdbc操作mysql数据库实例

    2024-01-26 01:59:50
  • 将ACCESS数据库迁移到SQLSERVER数据库两种方法(图文详解)

    2024-01-27 23:20:13
  • 使用 XMLSPY 设计项目的 Schema 原型

    2010-08-24 18:25:00
  • 解决vue动态下拉菜单 有数据未反应的问题

    2024-05-28 16:10:19
  • QT连接Oracle数据库并实现登录验证的操作步骤

    2024-01-27 13:06:44
  • Python利用pdfplumber实现读取PDF写入Excel

    2023-02-21 01:08:57
  • python使用matplotlib绘图时图例显示问题的解决

    2022-11-13 16:59:47
  • 如何调试 XMLHttpRequest

    2008-08-15 13:59:00
  • Opera下的max-width BUG

    2010-06-26 12:51:00
  • python正向最大匹配分词和逆向最大匹配分词的实例

    2021-11-24 22:39:58
  • 详解PHP合并多个PDF文件的方法

    2023-06-15 07:05:22
  • 一文了解Python并发编程的工程实现方法

    2023-12-26 13:54:36
  • python爬虫基础之urllib的使用

    2022-02-10 19:01:18
  • python爬虫要用到的库总结

    2021-04-16 23:55:40
  • 对Python 文件夹遍历和文件查找的实例讲解

    2021-11-05 22:29:25
  • 通过Pandas读取大文件的实例

    2023-12-25 21:18:31
  • Python爬虫包BeautifulSoup简介与安装(一)

    2021-07-25 05:06:10
  • asp之家 网络编程 m.aspxhome.com