图片链接广告大概是最为常用的网络广告模式, 但是多条广告的动态随机显示可不是那么简单的事情 PHP 的文件上传函数提供了在这块 468x60 像素的区域 (网页广告的标准尺寸) 实现能够根据权值大小而随机显示广告的解决方案, 从而避免了开发 FTP 程序或是 ASP 和 Perl CAI 中需要外挂扩展才能实现此项功能的弊端
本例在 PHP4+MySQL+Apache for Win9x/2000 下调试通过, 共包括两部分: 用来增加新广告的程序 AddNewAd.php3 以及显示广告的程序 ShowAd.php3, 都存放在服务器 PHP 文件目录下的 test/guanggao / 目录中在 guanggao 目录中建立一个存放广告链接图片的子目录 adbanner / 下面我们按步骤进行分析
1. 首先, 建立 MySQL 数据库: guanggao
在 Windows 环境下, 建立一个 MySQL 空数据库很简单, 因为每个数据库都是存在于 mysql/data / 目录下的一个子目录, 所以只要在该目录下新建子目录 guanggao 就可以了, 这时数据库内还没有任何表和数据
2. 建立新增广告程序: AddNewAd.php3
设计思路: 其中先用表单得到用户的新广告信息; 然后用 PHP 函数 copy()将链接图片 (banner) 文件上传到服务器 adbanner 目录下; 最后将图片文件名广告网址说明加权信息等写入建立的 MySQL 数据表 ad 中该程序代码如下:
# AddNewAd.php3 增添新的广告 #
增添新广告
- // 表单用来输入新增广告信息, 并交给下面的 PHP 程序处理;
- // 其中, 加权值 priority 数字愈大, 载入页面图片出现的机率就愈高, 默认为 1
广告 Banner:
广告网址 URL:
图片链接说明 ALT:
显示加权:
- // 处理表单数据的 PHP 程序;
- // 图片 banner 名和链接地址不能为空;
- if ((banner != "") & (url != "")) {
- // 若广告链接和图片名已被使用, 必须另选;
- if (file_exists("adbanner/".banner_name)) {
- echo "广告图片. banner_name. 已被使用, 请另选!";
- exit;
- };
- // 上传链接图片文件名到 adbanner 目录;
- copy(banner, "adbanner/".banner_name);
- // 连接 MySQL 数据库;
- connection = mysql_connect();
- // 选择数据源 guanggao, 执行查询;;
- mysql_select_db("guanggao", );
- query = "SELECT * FROM ad";
- result = mysql_query(query);
- // 如果数据表 ad 不存在, 则按以下结构创建新数据表 ad;
- if (!result) {
- mysql_query("
- create table ad(
- url varchar(100) not null,
- banner varchar(150) not null,
- alt varchar(100) null,
- priority tinyint(4) default '1' not null
- )") or die(mysql_error());
- }
- // 向数据表 ad 中插入来自于表单的新数据;
- query = "insert into ad(url, banner, alt, priority) values(' url',' banner_name','
- alt',' priority')";
- // 插入成功则显示以下信息;
- try = mysql_query(query);
- if (
- try) {
- echo "一条广告新增完成, 详细信息:";
- echo " ";
echo " 广告网址: url
广告链接说明: alt
显示加权: priority ";
}
}
?>
3. 建立显示广告程序: ShowAd.php3
设计思路: 得到数据库表中所有各列信息分别存到相应的一维数组中, 将所有广告的权值相加得到一个最大随机数, 每次载入页面用 srand() 产生一个随机树种子, 再用 rand()函数产生一个从 1 到最大随机数之间的一个随机数, 然后按照一定的规则随机显示不同广告条, 权值越大被显示的机会越大
- # ShowAd.php3 随机显示广告 #
- // 连接选择数据库;
- connection = mysql_connect();
- mysql_select_db("guanggao", connection);
- // 执行查询得到广告条数;
- query="SELECT url, banner, alt, priority FROM ad where priority> 0";
- result=mysql_db_query("guanggao", query);
- numrows=mysql_num_rows( result);
- // 使用 mysql_fetch_object()函数获取有用的列信息并存到相应数组中;
- while( row = mysql_fetch_object( result)) {
- adurl[]= row->url;
- adbanner[]= row->banner;
- adalt[]= row->alt;
- adpriority[]= row->priority;
- }
- // 初始化中间变量;
- numcheck= numrows;
- i= pricount=0;
- // 得到最大随机数;
- while( numcheck) {
- pricount+= adpriority[ i];
- i++; numcheck--;
- }
- // 程序执行时的百万分之一秒产生随机数种子;
- srand((double)microtime()*1000000);
- // 得到 1 到最大随机数之间的一个随机数;
- pri = rand(1, pricount);
- // 中间变量清零;
- pricount=0;
- // 按加权值不同, 产生用来显示广告的元素为字串的数组;
- for( i=0; i<numrows-1; i++) {
- pricount += adpriority[ i];
- if ( pri <= pricount) {
- ad[]="";
- }
- }
- // 显示广告, 权值越大, 显示机会越大;
- echo ad[0];
- ?>
来源: https://www.php1.cn/detail/php-780b5225ea.html