之前通过destoon添加新的广告类型的方式,添加了很多个性化的广告模块,比较好的满足了运营需要。可是后来发现一个问题,就是广告图片偶尔会丢失。这个可真是麻烦,也不太清楚是destoon造成的还是系统有问题,而且有时候内容页的图片也偶尔丢失,所以就没太在意,只能少了图片就人工添加上了。
在测试一个新的广告类型时,使用了两个图片上传,发现总是会有一张图片显示404。想到以前图片丢失的情况,看样子是自己开发的时候,没有注意到广告系统添加广告内容时使用的函数,可能某个函数会把之前上传的图片删除掉。有了方向就好办了,开始查找相关代码,最后在/module/extend/ad.class.php的set_ad函数中发现了相关代码:
function set_ad($ad) {
global $DT_TIME, $_username;
if(!$this->aid) $ad['addtime'] = $DT_TIME;
$ad['edittime'] = $DT_TIME;
$ad['editor'] = $_username;
$ad['fromtime'] = strtotime($ad['fromtime'].' 0:0:0');
$ad['totime'] = strtotime($ad['totime'].' 23:59:59');
$ad['username'] or $ad['username'] = $_username;
$ad['url'] = '';
if($ad['typeid'] == 2) {
$ad['url'] = $ad['text_url'];
} else if($ad['typeid'] == 3 || $ad['typeid'] == 5) {
$ad['url'] = $ad['image_url'];
} else if($ad['typeid'] == 4) {
$ad['url'] = $ad['flash_url'];
}
//下面就是清理上传内容的
clear_upload($ad['image_src'].$ad['flash_src'].$ad['code']);
return $ad;
}
clear_upload函数的作用就是保留当前上传中包含在参数里面的内容,可以看到只保留了官方用到的变量,而我们自己发明的变量是肯定不在里面的,这样就导致了广告的丢失。修改方法也很简单,里面添加上咱们自己的变量就好了,只是这个问题点,比较难发现。