之前通过destoon添加新的广告类型的方式,添加了很多个性化的广告模块,比较好的满足了运营需要。可是后来发现一个问题,就是广告图片偶尔会丢失。这个可真是麻烦,也不太清楚是destoon造成的还是系统有问题,而且有时候内容页的图片也偶尔丢失,所以就没太在意,只能少了图片就人工添加上了。
在测试一个新的广告类型时,使用了两个图片上传,发现总是会有一张图片显示404。想到以前图片丢失的情况,看样子是自己开发的时候,没有注意到广告系统添加广告内容时使用的函数,可能某个函数会把之前上传的图片删除掉。有了方向就好办了,开始查找相关代码,最后在/module/extend/ad.class.php的set_ad函数中发现了相关代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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函数的作用就是保留当前上传中包含在参数里面的内容,可以看到只保留了官方用到的变量,而我们自己发明的变量是肯定不在里面的,这样就导致了广告的丢失。修改方法也很简单,里面添加上咱们自己的变量就好了,只是这个问题点,比较难发现。