BBSXP的 AspJpeg 水印函数

今天装了一个asp的bbs,很经典的BBSXP程序,最后一次玩还是高三的时候,如今大学都毕业了….

看了附件上传部分的代码,比我的WindsPhoto处理图片水印强很多,精华代码在这个函数,很有参考价值,贴出来学习一下。

Function JpegPersits
if SiteConfig("WatermarkType")=0 then
Jpeg.Canvas.Font.Color = Replace(SiteConfig("WatermarkFontColor"),"#","&h") '颜色
Jpeg.Canvas.Font.Family = SiteConfig("WatermarkFontFamily")         '字体
Jpeg.Canvas.Font.size = SiteConfig("WatermarkFontSize")         '大小
Jpeg.Canvas.Font.Bold = CBool(SiteConfig("WatermarkFontIsBold"))    '是否加粗
'Jpeg.Canvas.Font.ShadowXoffset = 10        '水印文字阴影向右偏移的像素值,输入负值则向左偏移
'Jpeg.Canvas.Font.ShadowYoffset = 10        '水印文字阴影向下偏移的像素值,输入负值则向右偏移
Title = SiteConfig("WatermarkText")
TitleWidth = Jpeg.Canvas.GetTextExtent(Title)
if Jpeg.Width<TitleWidth then exit function '图片比水印文字小,则不加水印
select case SiteConfig("WatermarkWidthPosition")
case "left"
PositionWidth=10
case "center"
PositionWidth=(Jpeg.Width - TitleWidth) / 2
case "right"
PositionWidth= Jpeg.Width - TitleWidth - 10
end select
Jpeg.Canvas.Print PositionWidth, 10, Title
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
elseif SiteConfig("WatermarkType")=1 then
Set Jpeg2 = Server.CreateObject("Persits.Jpeg")
Jpeg2.Open Server.MapPath(SiteConfig("WatermarkImage"))
Jpeg2Width=Jpeg2.OriginalWidth
Jpeg2Height=Jpeg2.OriginalHeight
if Jpeg.Width<Jpeg2Width or Jpeg.Height<Jpeg2Height*2 then exit function    '图片比水印图片小,则不加水印
select case SiteConfig("WatermarkWidthPosition")
case "left"
PositionWidth=10
case "center"
PositionWidth=(Jpeg.Width - Jpeg2Width) / 2
case "right"
PositionWidth= Jpeg.Width - Jpeg2Width - 10
end select
select case SiteConfig("WatermarkHeightPosition")
case "top"
PositionHeight=10
case "center"
PositionHeight=(Jpeg.Height - Jpeg2Height) / 2
case "bottom"
PositionHeight= Jpeg.Height - Jpeg2Height - 10
end select
Jpeg.Canvas.DrawImage PositionWidth, PositionHeight, Jpeg2, 1, &HFFFFFF '透明度, 透明颜色
end if
End Function
%>

Z-Blog 自带数据库插件升级解决方案

首先,这篇文章是写给Z-Blog插件开发人员作为参考的,仅仅提供一种思路。

新版Z-Blog中的PluginS插件已经支持检测插件版本了,给插件的安装和升级带来了很多方便。但是插件升级的同时可能造成插件数据库已经配置文件的覆盖,也就是说,升级后你可能只拥有一个初始化的插件。

这里提供一个方案,由插件自己解决这个问题,下面是相册插件windsphoto的include.asp部分代码,发出来说明一下,供参考。

include.asp部分代码

'定义数据库路径
Const WP_DATA_PATH="data/12345.mdb"
'注册插件
Call RegisterPlugin("WindsPhoto","ActivePlugin_WindsPhoto")
'安装插件
Function InstallPlugin_WindsPhoto()
On Error Resume Next
Call SetBlogHint_Custom("? 提示:[WindsPhoto]已启用,现在进入初始化系统设置.")
Call WindsPhoto_Rebackup_Include()
Call WindsPhoto_Database_Rename()
Err.Clear
End Function
'首次安装数据库改名....
Function WindsPhoto_Database_Rename()
Dim fso, f, s, pathnew, ranNum
randomize
ranNum=int((99-10+1)*rnd+99)
pathnew=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum& ".mdb"
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.fileexists(BlogPath & "/plugin/windsphoto/data/winds.mdb") Then
Set f = fso.GetFile(BlogPath & "plugin/windsphoto/"& WP_DATA_PATH)
f.name=pathnew
Set f = Nothing
Dim strContent,strWP_DATA_PATH
strContent=LoadFromFile(BlogPath & "/PLUGIN/WindsPhoto/include.asp","utf-8")
strWP_DATA_PATH="data/" & pathnew
Call SaveValueForSetting(strContent,True,"String","WP_DATA_PATH",strWP_DATA_PATH)
Call SaveToFile(BlogPath & "/PLUGIN/WindsPhoto/include.asp",strContent,"utf-8",False)
End If
Set fso=nothing
End Function
'还原备份设置
Function WindsPhoto_Rebackup_Include()
Dim strContent,fso
Set fso=server.createobject("Scripting.Filesystemobject")
If fso.fileexists(BlogPath & "/plugin/windsphoto/include.asp.bak") Then
strContent=LoadFromFile(BlogPath & "/plugin/windsphoto/include.asp.bak","utf-8")
Call SaveToFile(BlogPath & "/plugin/windsphoto/include.asp",strContent,"utf-8",True)
'删除初始数据库
Call DelSiteFile("/plugin/windsphoto/data/winds.mdb")
'跳转到插件设置
Response.Redirect "../plugin/windsphoto/admin_setting.asp"
End If
Set fso=nothing
End Function

继续阅读

AspJpeg 组件权限的检测

AspJpeg作为图片处理的服务器组件应用非常广泛,在WindsPhoto相册中关于aspjpeg的应用有很多,缩略图、文字水印、图片水印都有用到。

为了兼容空间不支持aspjpeg的用户,加入了aspjpeg的检测,包括是否存在以及权限的检测。

Set Jpeg = Server.CreateObject("Persits.Jpeg")
'Response.Write Jpeg.Expires
if -2147221005=Err or Jpeg.Expires<now() then
..............
end if
Set Jpeg = nothing

-2147221005=Err 这句是检测组件是否存在,这样是不够的,即使存在的aspjpeg主机也可能没有注册组件,也就是没有权限。

Response.Write Jpeg.Expires 可以查看出主机到期的时间,用Jpeg.Expires和当前时间对比,如果小于当前时间就说明没有权限。也就是 or 后面那句 Jpeg.Expires<now() 。

FlaMP3 播放器 1.0 for Z-Blog 1.8

这是一款Flash+xml的播放器,使用了 jwMp3player,使用xml作为数据库。

感谢 redscorpion 在插件测试时,提出的建议。

需要手动添加以下代码到模板,建议加了侧栏。

<#CACHE_INCLUDE_FLASHMP3#>

插件下载

http://download.rainbowsoft.org/plugins/FlaMP3/

http://bbs.zblogcn.com/thread-24986-1-1.html

年久失修,没有图片了,相关帮助也没有了,上面的插件下载页面评论区有很多留言,或许能帮到你。

Access 数据库的安全问题

我们都知道asp程序使用的数据库多为access,access数据库简单小巧,直接上传到服务器来就可以用了。

把access数据库文件后缀改为asp真的安全吗?

mdb后缀的很容易被别人下载到,不安全。一般的说法,数据库改为asp后缀可以防数据库被下载,提高一定的安全性,可这个方法却增加了另一方面的危险。一旦网站被黑,对方很可能会在你网站网页文件上批量加iframe代码,挂马!

这时候如果你的数据库是以asp为后缀的,那么你的数据库也会同其它asp文件一样,被加入代码。这时候,你的数据库大概就完了,被破坏了,数据库不是像其它asp文件一样,把代码删了就可以了的,数据库已经被破坏了,如果没有备份,可能全站毁灭!解决办法,我也不大清楚。

还有一种asa后缀的,道理是一样的,不知道那些批量挂马的脚本会不会对asa格式下手。

我就受过一次损失,服务器被挂马,自己的Z-blog的投票插件vota就是把数据库后缀改为了asp的,检查一下,出来一段iframe代码,整个数据库毁了。

建议是数据库后缀别改,把数据库文件名改成尽量高级一点的,如z-blog的数据就是随机生成的字符命名的,别人不知道文件名就可以了。

如何批量清除木马呢?

推荐使用dreamweaver的查找替换功能,因为涉及到文件编码的问题。

另外,字符批量替换器,这方面的软件也有不少,分享一个:

文本替换专家的软件,比较专业。还具有搜索和备份还原的功能,区分大小写。

下载:纳米盘

Rndarticle 随机乱弹 1.0 for Z-Blog

这个随机文章当然和84飞扬的随机列表不一样,概念上的差异!

是一个链接的转向,随机转到blog的任意一篇文章上来,在其他网站有“漫游”、“乱弹”等等说法。

正确安装,并且激活插件后,在导航栏添加如下代码:

<li><a href="<%=ZC_BLOG_HOST%>plugin/rndarticle/Redirect.asp">乱弹</a></li>

题外话,这个插件用到了一个网上找来的asp随机函数

<%
Function RndNumber(MaxNum,MinNum)
Randomize
RndNumber=int((MaxNum-MinNum+1)*rnd+MinNum) RndNumber=RndNumber
End Function
%>

插件下载:Z-Blog 1.8 Z-Blog 2.x

PHP date 函数参数详解

time() 函数在PHP中是得到一个数字,这个数字表示从1980-03-05到现在一共是多少秒,很奇怪,不过这样方便计算。

要找出前一天的时间就是 time()-60*60*24;
要找出前一年的时间就是 time()*60*60*24*365

那么如何把这个数字换成日期格式呢 ,就要用到date()函数了

$t=time();
echo date(“Y-m-d H:i:s” ,$t);

每一个参数的格式分别表示:
a – “am” 或是 “pm”
A – “AM” 或是 “PM”
d – 几日,二位数字,若不足二位则前面补零; 如: “01” 至 “31”
D – 星期几,三个英文字母; 如: “Fri”
F – 月份,英文全名; 如: “January”
h – 12 小时制的小时; 如: “01” 至 “12”
H – 24 小时制的小时; 如: “00” 至 “23”
g – 12 小时制的小时,不足二位不补零; 如: “1” 至 12″
G – 24 小时制的小时,不足二位不补零; 如: “0” 至 “23” 继续阅读

一个倒计时JS脚本

<script type="text/javascript">
var timedate= new Date("August 8,2008");
var times= "2008北京奥运会";
var now = new Date();
var date = timedate.getTime() - now.getTime();
var time = Math.floor(date / (1000 * 60 * 60 * 24)+1);
if (time >= 0) document.write( "距离"+times+"还有"+time +"天")
else if (time <=3)
document.write( "<font color=red>距离"+times+"还有"+time +"天</font>")
</script>

写了一个Z-Blog的倒计时插件,用的就是这个js,http://bbs.zblogcn.com/thread-23137-1-1.html

普遍见到的有个错误,已经修正了,(1000 * 60 * 60 * 24)+1

RSS2.0 规范文档

前些天,修改Windsphoto相册时,突发奇想,增加RSS订阅的功能。以前从来没有真正接触过XML,难度相当大。最后弄了半天,还是不符合规范,在Foxmail等离线阅读器上没办法订阅到,不过总算可以在一些在线阅读上订阅了。

RSS的规范的确很严格,对于web开发人员来说,比较有难度的应该是时间格式的转换。

什么是 RSS?

RSS 是一种站点内容聚合的格式。

它的名字是Really Simple Syndication 的的简写。

RSS是XML的一种。所有的RSS文档都遵循 XML 1.0规范, 该规范发布在W3C网站上。

在一个RSS文档中,最外层是一个<rss>元素,这个元素必须规定version属性,该属性明确了本文档遵从何种RSS版本规范。如果一个RSS文档以这个规范来表示,那么它的version属性就必须是2.0。

<rss>元素只有一个子元素<channel>,包含了关于这个频道(元数据)和它的内容的一些信息。 继续阅读