浏览模式: 标准 | 列表分类:网站|ASP备忘

ASP快速建成生成静态文件的网站发布系统

一、先进行技术原理分析

  1、模板技术参看

  2、如何使得ASP页面转变为HTML?一般都会想到FSO组件,因为该组件能新建任何文件格式。

  那么其整个运行过程是怎么样的呢?

  a、提供信息输入页面进行信息收集;

  b、接受信息值先保存数据库,再FSO生成文件;

  c、技术性完成任务,显示刚被创建的HTML文件的路径地址。 该技术的实现过程中有如下几个难点:

  i、FSO生成的文件是直接放在一个大文件夹下,还是单独放在某个每日更新的子文件夹中?可能表述不准确,这样理解吧:相信通过FSO生成的文件随着时间的推移,文件会越来越多,管理也会越来越乱……通常你可能看到一些地址诸如 www.xxx.com/a/2004-5-20/20... 可以分析得出应该是建立了当前日期的文件夹。这样,一天就是一个文件夹的页面内容,查看管理也就显得比较合理。

  ii、我在试图通过以上方法建立文件夹的时候,又发现了第二个问题。第一次通过FSO建立以当前日期命名的文件夹,没有问题。当我有新的文件需要生成时,因为是同一个程序,所以,其又将会执行建立同样的文件夹。此时,FSO组件会发现该路径已存在……卡壳-_-! 继续处理,在首行添加代码:

  引用:

On Error Resume Next
  达到自欺欺人、掩耳盗铃的效果。

  当然规矩的用法是判断文件夹的有无

代码:
<%
Set fso = Server.Cr&#101;ateObject("Scripting.FileSystemObject")
if (fso.FolderExists(Server.MapPath(folder))) then
"判断如果存在就不做处理
else
"判断如果不存在则建立新文件夹
fso.Cr&#101;ateFolder(Server.MapPath(folder))
end if
%>


  iii、文件夹是建立了,文件该如何建立呢?主要也就是文件名的生成。当然这个就需要自己来写个函数,功能就是如何生成文件名:


代码:
<%
function makefilename(fname)
fname = fname "前fname为变量,后fname为函数参数引用
fname = replace(fname,"-","")
fname = replace(fname," ","")
fname = replace(fname,":","")
fname = replace(fname,"PM","")
fname = replace(fname,"AM","")
fname = replace(fname,"上午","")
fname = replace(fname,"下午","")
makefilename = fname &amp; ".html"
end function
%>


  引用函数则:

代码:
<%fname = makefilename(now())%>


  其实嘛,就是以年月日时分秒命名的文件。

  iv、最后,生成的文件该如何查看到?当然需要把生成文件的路径保存的数据库中,并且添加到相对应的记录集中了。当然,这在下面的数据库设计时会提及到。

  3、模板技术和2HTML技术的结合:将模板中特殊代码的值替换为从表单接受过来的值,完成模板功能;将最终替换过的所有模板代码生成HTML文件。需要注意的是:替换应能将输入数据的格式或者支持UBB的代码彻底改变。

二、再进行数据库设计

  目前数据库的设计需要两个表:一个是存放模板数据的;一个是存放信息内容的。 1,建立新数据库asp2html.mdb

  2、设计新数据库表c_moban

  字段m_id(自动编号,主关键字);字段m_html(备注类型)。

  并将下列完整的代码拷贝至m_html字段

代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=hz">
<title>Cnbruce.Com | ASP2HTML TEST</title>
</head>
<body leftmargin="0" topmargin="0">
<table width="100%" height="100%" border="0" cellpadding="5" cellspacing="2">
<tr align="right" bgcolor="#CCCCCC">
<td height="20" colspan="2">$cntop{LogContent}lt;/td>
</tr>
<tr valign="top">
<td width="25%" bgcolor="#e5e5e5">$cnleft{LogContent}lt;/td>
<td width="74%" bgcolor="#f3f3f3">$cnright{LogContent}lt;/td>
</tr>
</table>
</body>
</html>

  3、设计新数据库表c_news

  字段c_id:自动编号,主关键字
  字段c_title:文本类型,保存文章标题
  字段c_content:备注类型,保存文章内容
  字段c_filepath:文本类型,保持生成文件的路径地址
  字段c_time:日期/时间类型,默认值:Now()

  三、页面需求设计

  1、首先建立一个存放HTML页的文件夹

  在文件同一目录下,建立文件夹newsfile,夹子内部主要存放生成的HTML页面,当然内部还会采用程序方式建立以日期命名的子文件夹,以方便浏览以及管理。

  2、功能函数页面lib.asp

代码:
<%
"生成文件名的函数
function makefilename(fname)
fname = fname
fname = replace(fname,"-","")
fname = replace(fname," ","")
fname = replace(fname,":","")
fname = replace(fname,"PM","")
fname = replace(fname,"AM","")
fname = replace(fname,"上午","")
fname = replace(fname,"下午","")
makefilename=fname &amp; ".shtml"
end function

"保持数据格式不变的函数
function HTMLEncode(fString)
fString = replace(fString, ">", ">")
fString = replace(fString, "<", "<")
fString = Replace(fString, CHR(32), " ")
fString = Replace(fString, CHR(13), "")
fString = Replace(fString, CHR(10) &amp; CHR(10), "<br>")
fString = Replace(fString, CHR(10), "<br>")
HTMLEncode = fString
end function
%>

  3、数据库连接页面conn.asp

  完成数据库的字符串连接方法

代码:
<%
set conn = Server.Cr&#101;ateObject("ADODB.Connection")
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&amp;Server.MapPath("asp2html.mdb")
conn.Open connstr
%>

  4、信息输入页面add.html

  其实很简单,就是表单嘛。注意action是跳转到addit.asp

代码:
<form action="addit.asp" method="post">
Title:<input type="text" name="c_title"><br>
Content:<br>
<textarea name="c_content" rows="8" cols="30"></textarea><br>
<input type="submit" value="Add">
<input type="reset" value="Reset">
</form>

  5、处理数据功能显示页面addit.asp

  首先是处理接受过来的数据,并将值写入数据库;接着将模板代码进行引用,并将其中特殊代码转换为接受值,最终通过FSO生成HTML页面。其中需要注意的还有,生成文件的路径地址保存至数据库表。

代码:
<%"容错处理
On Error Resume Next
%>

<!--#include file="conn.asp" -->
<!--#include file="lib.asp" -->

<%"接受传递值
c_title=request.form("c_title")
c_content=request.form("c_content")
%>

<%"生成HTML文件名,建立文件夹,指定文件路径
fname = makefilename(now()) "makefilename为自定义函数
folder = "newsfile/"&amp;date()&amp;"/"
filepath = folder&amp;fname
%>

<%"将接受值及路径保持至数据库表
sql = "Sel&#101;ct * from c_news"
Set rs = Server.Cr&#101;ateObject ("ADODB.Recordset")
rs.Open sql,conn,3,2
rs.addnew
rs("c_title")=c_title
rs("c_content")=c_content
rs("c_filepath")=filepath
rs.up&#100;ate
rs.close
Set rs = Nothing
%>

<%"打开模板代码,并将其中特殊代码转变为接受值
sql1="sel&#101;ct m_id,m_html from c_moban wh&#101;re m_id=1"
set rs1=Server.Cr&#101;ateObject("adodb.recordset")
rs1.open sql1,conn,1,1
mb_code=rs1("m_html")
rs1.close
set rs1=nothing
conn.close
set conn=nothing
c_title=htmlencode(c_title)
c_content=htmlencode(c_content)
mb_code=replace(mb_code,"$cntop{LogContent}quot;,now())
mb_code=replace(mb_code,"$cnleft{LogContent}quot;,c_title)
mb_code=replace(mb_code,"$cnright{LogContent}quot;,c_content)
%>

<%"生成HTML页面
Set fso = Server.Cr&#101;ateObject("Scripting.FileSystemObject")
fso.Cr&#101;ateFolder(Server.MapPath(folder))
Set fout = fso.Cr&#101;ateTextFile(Server.MapPath(filepath))
fout.WriteLine mb_code
fout.close
%>
文章添加成功,<a href="showit.asp">浏览</a>


6、显示数据库表记录,并做指向HTML页的链接:showit.asp

代码:
<!--#include file="conn.asp" -->
<!--#include file="lib.asp" -->
<%
Set rs = Server.Cr&#101;ateObject ("ADODB.Recordset")
sql = "Sel&#101;ct * from c_news o&#114;der by c_id desc"
rs.Open sql,conn,1,1
%>

<%
if rs.EOF and rs.BOF then
response.write ("暂时还没有文章,<a href=add.html>添加</a>")
else
Do Until rs.EOF
%>
<table width="758" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#000000">
<tr>
<td width="159" align="right" bordercolor="#CCCCCC" bgcolor="#CCCCCC"><%=rs("c_time")%></td>
<td width="591" bordercolor="#f3f3f3" bgcolor="#f3f3f3"><a href=<%=rs("c_filepath")%> target="a_blank"><%=rs("c_title")%></a></td>
</tr>
<tr>
<td valign="top" align="right" bordercolor="#ececec" bgcolor="#ececec">[<a href=del.asp?c_id=<%=rs("c_id")%>>Dell</a>][<a href=change.asp?c_id=<%=rs("c_id")%>>Edit</a>][<a href="add.html">Add</a>]</td>
<td valign="top" bordercolor="#FFFFFF" bgcolor="#FFFFFF"><%=htmlencode(rs("c_content"))%></td>
</tr>
</table><br>
<%
rs.MoveNext
Loop
end if
%>

<%
rs.close
Set rs = Nothing
conn.close
set conn=Nothing
%>

  7、修改数据内容页change.asp

  修改数据内容,同时也需要修改更新对应的HTML页面。修改其实就是重新生成文件,且文件名和之前一样,类似文件的覆盖。

代码:
<!--#include file="conn.asp" -->
<!--#include file="lib.asp" -->

<%id=request.querystring("c_id")%>

<%
if request.form("submit")="change" then
c_title=request.form("c_title")
c_content=request.form("c_content")
c_id=request.form("c_id")
c_filepath=request.form("c_filepath")

Set rs = Server.Cr&#101;ateObject ("ADODB.Recordset")
sql = "Sel&#101;ct * from c_news wh&#101;re c_id="&amp;c_id
rs.Open sql,conn,3,2
rs("c_title")=c_title
rs("c_content")=c_content
rs("c_time")=now()
rs.up&#100;ate
rs.close
Set rs = Nothing
%>

<%"打开模板代码,并将其中特殊代码转变为接受值
sql1="sel&#101;ct m_id,m_html from c_moban wh&#101;re m_id=1"
set rs1=Server.Cr&#101;ateObject("adodb.recordset")
rs1.open sql1,conn,1,1
mb_code=rs1("m_html")
rs1.close
set rs1=nothing
conn.close
set conn=nothing
c_title=htmlencode(c_title)
c_content=htmlencode(c_content)
mb_code=replace(mb_code,"$cntop{LogContent}quot;,now())
mb_code=replace(mb_code,"$cnleft{LogContent}quot;,c_title)
mb_code=replace(mb_code,"$cnright{LogContent}quot;,c_content)
%>

<%"生成HTML页面
Set fso = Server.Cr&#101;ateObject("Scripting.FileSystemObject")
Set fout = fso.Cr&#101;ateTextFile(Server.MapPath(c_filepath))
fout.WriteLine mb_code
fout.close
%>
<%response.redirect("showit.asp")%>
<%end if%>

<%
if id<>"" then
Set rs = Server.Cr&#101;ateObject ("ADODB.Recordset")
sql="sel&#101;ct * from c_news wh&#101;re c_id="&amp;id
rs.Open sql,conn,1,1
c_id=rs("c_id")
c_filepath=rs("c_filepath")
c_title=rs("c_title")
c_content=rs("c_content")
end if
%>

<form action="change.asp" method="post">
Title:<input type="text" name="c_title" value=<%=c_title%>><br>
Content:<br>
<textarea name="c_content" rows="8" cols="30"><%=c_content%></textarea><br>
<input type="submit" value="change" name="submit">
<input type="reset" value="Reset">
<input name="c_id" type="hidden" value="<%=id%>">
<input name="c_filepath" type="hidden" value="<%=c_filepath%>">
</form>

  8、删除记录页del.asp

  同样!删除,除了删除数据库表中的记录,与其对应的HTML页面也需删除。代码如下:

代码:
<!--#include file="conn.asp" -->

<%
c_id = request.querystring("c_id")
sql = "Sel&#101;ct * from c_news wh&#101;re c_id="&amp;c_id
Set rs = Server.Cr&#101;ateObject ("ADODB.Recordset")
rs.Open sql,conn,2,3

filepath=rs("c_filepath")
Set fso = Cr&#101;ateObject("Scripting.FileSystemObject")
fso.Del&#101;teFile(Server.mappath(filepath))
Set fso = nothing

rs.del&#101;te
rs.close
Set rs = Nothing
conn.close
set conn=nothing
%>

<%response.redirect("showit.asp")%>


  四、其它功能

  模板管理页面:

  不会每次都是打开数据库表进行增加或者修改模板代码吧,所以,管理代码的页面程序不能少了,自己捣鼓下应该很简单的。当然,之前管理员的登录认证程序就不在书中交代了:)还有,如果设计了多个模板,那么在发表信息的时候应添加模板选择单选框,同样在执行转换HTML时,SQL选择的不同m_id了。

  不管怎么说,先把这些技术自己调试感受下。多多操作,相信“读书千遍,其意自见”。

Tags: tohtml

10秒后自动关闭

ie6适用。ie7没有测试过。

» 阅读全文

Tags: js

整理了一个editplus的剪辑文件(ASP方面的内容)

把下列代码保存成任意名称的.ctl文件(*.ctl),放到EditPlus的安装目录即可
效果见:
点击在新窗口中浏览此图片
代码:
#TITLE=ASP常用语法及函数
#INFO
ASP常用的一些语法及自定义函数
#SORT=n

#T= ===ASP常用语法===
#T=============================
#T=数据库相关
#T= 连接ACCESS数据库
<%
Dim DBName,Conn
DBName"^!"    "定义数据库路径及名称
SET Conn = Server.Cr&#101;ateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &amp; Server.MapPath(DBName)
%>

#T= 连接MS SQL数据库
<%
Dim Conn
SET Conn=Server.Cr&#101;ateObject("ADODB.connection")
Conn.Open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名称或IP地址;UID=数据库登录帐号;PWD=数据库密码;DATABASE=数据库名称"
%>

#T= 建立记录集
SET ^!=Server.Cr&#101;ateObject("ADODB.recordset")

#T= 执行SQL命令
RS.Open SQL,conn,1,1

#T= 执行SQL命令
Conn.Execute("^!")

#T= RS直接执行SQL命令
SET RS = Conn.Execute("^!")

#T= 关闭记录集
RS.CLOSE
SET RS=NOTHING

#T= 关闭数据库
Conn.Close
SET Conn=Nothing

#T=============================
#T=ServerVariables相关
#T= 取上一页地址
Request.ServerVariables("HTTP_REFERER")

#T= 取服务器的名称1
Request.ServerVariables("SERVER_NAME")

#T= 取服务器的名称2
Request.ServerVariables("HTTP_HOST")

#T= 取服务器IP
Request.ServerVariables("LOCAL_ADDR")

#T= 取用户IP
Request.ServerVariables("Remote_Host")

#T= 取用户真实IP1
Request.serverVariables("REMOTE_ADDR")

#T= 取用户真实IP函数
Function GetRealIP()
    GetRealIP = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
    IF(GetRealIP = "")THEN GetRealIP = Request.ServerVariables("REMOTE_ADDR")
End Function

#T= 取服务器端口
Request.ServerVariables("SERVER_PORT")

#T= 取服务器操作系统
Request.ServerVariables("OS")

#T= 取服务器的绝对路径
Request.ServerVariables("APPL_PHYSICAL_PATH")

#T= 取本文件的绝对路径1
Requet.ServerVariables("PATH_TRANSLATED")

#T= 取本文件的绝对路径2
Server.mappath(Request.ServerVariables("SCRIPT_NAME"))

#T= 取本文件的相对路径1
Request.ServerVariables("URL")

#T= 取本文件的相对路径2
Request.ServerVariables("SCRIPT_NAME")

#T= 取本文件的相对路径3
Request.ServerVariables("PATH_INFO")

#T= 取地址栏后的参数
Request.ServerVariables("QUERY_STRING")

#T= 取服务器系统信息
Request.ServerVariables("HTTP_USER_AGENT")

#T= 服务器组件检测
<%
Function IsObjInstalled(strClassString)
    On Error Resume Next
    IsObjInstalled = False
    Err = 0
    Dim xTestObj
    SET xTestObj = Server.Cr&#101;ateObject(strClassString)
    IF(0 = Err)THEN IsObjInstalled = True
    SET xTestObj = Nothing
    Err = 0
End Function
"IF(IsObjInstalled("Persits.Upload")=True)THEN
"    Response.Write "支持AspUpload组件"
"ELSE
"    Response.Write "不支持AspUpload组件"
"END IF
%>

#T= 取客户端语言环境
^!Request.ServerVariables("HTTP_ACCEPT_LANGUAGE")

#T= 取客户端信息:HTTP_USER_AGENT
^!Request.ServerVariables("HTTP_USER_AGENT")

#T= 取表单(Form)值元素值
Request.Form("^!")

#T= 取URL传递的值
Request.QueryString("^!")

#T= 取完整URL地址
Function GetUrl()
    GetUrl="http://"&amp;R... ... .ServerVariables("URL")
    IF(Request.ServerVariables("QUERY_STRING")<>"")THEN GetURL=GetUrl&amp;"?"&amp; Request.ServerVariables("QUERY_STRING")
End Function

#T=============================
#T=自定义函数
#T= 过滤HTML字符
<%
"过滤HTML字符函数
Function HTMLEncode(str)
    IF(str <> "")THEN
        str = Replace(str, "&amp;", "&amp;amp;")
        str = Replace(str, ">", "&amp;gt;")
        str = Replace(str, "<", "&amp;lt;")
        str = Replace(str, Chr(32), "&amp;nbsp;")
        str = Replace(str, Chr(9), "&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;")
        str = Replace(str, Chr(34), "&amp;quot;")
        str = Replace(str, Chr(39), "&amp;#39;")
        str = Replace(str, Chr(13), "")
        str = Replace(str, Chr(10) &amp; Chr(10), "</P><P>")
        str = Replace(str, Chr(10), "<BR>")
        str = Replace(str, Chr(255), "&amp;nbsp;")
    END IF
    HTMLEncode = str
End Function
%>

#T= 检测上页是否从本站提交
<%
"检测上页是否从本站提交
"返回:True,False
"===============================================================
Function IsSelfRefer()
    Dim sHttp_Referer, sServer_Name
    sHttp_Referer = CStr(Request.ServerVariables("HTTP_REFERER"))
    sServer_Name = CStr(Request.ServerVariables("SERVER_NAME"))
    IF(Mid(sHttp_Referer, 8, Len(sServer_Name)) = sServer_Name)THEN
        IsSelfRefer = True
    ELSE
        IsSelfRefer = False
    END IF
End Function
%>

#T= 清除所有HTML标记
<%
"清除HTML标记
Function stripHTML(htmlStr)
    Dim regEx
    SET regEx = New Regexp
    regEx.IgnoreCase = True
    regEx.Global = True
    regEx.Pattern = "<.+?>"
    htmlStr = regEx.Replace(htmlStr,"")
    htmlStr = Replace(htmlStr, "<","&amp;lt;")
    htmlStr = Replace(htmlStr, ">","&amp;gt;")
    htmlStr = Replace(htmlStr,chr(10),"")
    htmlStr = Replace(htmlStr,chr(13),"")
    stripHTML = htmlStr
    SET regEx = Nothing
End Function

%>

#T= 取字符串长度
<%
"求字符串长度函数
Function GetLength(str)
    Dim Length
    For i=1 to Len(str)
        IF(Asc(Mid(str,i,1))<0 o&#114; Asc(Mid(str,i,1))>256)THEN
            Length=Length+2
        ELSE
            Length=Length+1
        END IF
    Next
    GetLength=Length
End Function
%>

#T= 截取指定长度字符串
<%
"截取指定长度的字符串,多余的用...代替
Function StrLeft(str,strlen)
    IF(str = "")THEN
        StrLeft = ""
        Exit Function
    END IF
    Dim l,t,c,i
    str = Replace(Replace(Replace(Replace(str,"&amp;nbsp;"," "),"&amp;quot;",chr(34)),"&amp;gt;",">"),"&amp;lt;","<")
    l=len(str)
    t=0
    For i=1 to l
        c=Abs(Asc(Mid(str,i,1)))
        IF(c>255)THEN
            t=t+2
        ELSE
            t=t+1
        END IF
        IF(t>strlen)THEN
            StrLeft = left(str,i) &amp; "..."
            Exit For
        ELSE
            StrLeft = str
        END IF
    Next
    StrLeft = Replace(Replace(Replace(Replace(StrLeft," ","&amp;nbsp;"),chr(34),"&amp;quot;"),">","&amp;gt;"),"<","&amp;lt;")
End Function
%>

#T= 获取安全的提交参数
<%
"===============================================================
"SQL Injection Check
"函数功能:过滤字符参数中的单引号,对于数字参数进行判断,如果不是数值类型,则赋值0
"参数意义:str ---- 要过滤的参数
"strType ---- 参数类型,分为字符型和数字型,字符型为"s",数字型为"i"
"===============================================================
Function CheckStr(str,strType)
    Dim strTmp  
    strTmp = ""  
    IF(strType ="s")THEN  
        strTmp = Replace(Trim(str),""","""")  
    ELSEIF(strType="i")THEN  
        IF(IsNumeric(str)=False)THEN str=False  
        strTmp = str  
    ELSE  
        strTmp = str  
    End IF
    CheckStr= strTmp  
End Function
%>

#T= 过滤不良字符(BadWord)
<%
"过滤不良字符(BadWords)
Function ChkBadWords(fString)
    Dim BadWords,bwords,i
    BadWords = "我操|操你|操他|你妈的|他妈的|狗|杂种|屄|屌|王八|强奸|做爱|处女|泽民|法轮|法伦|洪志|法輪"
    IF(Not(IsNull(BadWords) o&#114; IsNull(fString)))THEN
    bwords = Split(BadWords, "|")
    For i = 0 to UBound(bwords)
        fString = Replace(fString, bwords(i), string(Len(bwords(i)),"*"))
    Next
    ChkBadWords = fString
    END IF
End Function
%>

#T= 生成随机自定义长度密码
<%
"生成随机自定义长度密码
Function makePassword(maxLen)
    Dim strNewPass
    Dim whatsNext, upper, lower, intCounter
    Randomize
    For intCounter = 1 To maxLen
        whatsNext = Int((1 - 0 + 1) * Rnd + 0)
        IF(whatsNext = 0)THEN
        "character
            upper = 90
            lower = 65
        ELSE
            upper = 57
            lower = 48
        END IF
        strNewPass = strNewPass &amp; Chr(Int((upper - lower + 1) * Rnd + lower))
    Next
    makePassword = strNewPass
End Function
"Response.Write makepassword(8)
%>

#T= 填入Textarea时保持格式inHTML
<%
"===============================================================
"去除Html格式,用于从数据库中取出值填入输入框时
"注意:value="?"这边一定要用双引号
"===============================================================
Function inHTML(str)
     Dim sTemp
     sTemp = str
     inHTML = ""
     If IsNull(sTemp) = True Then
        Exit Function
     End If
     sTemp = Replace(sTemp, "&amp;amp;", "&amp;")
     sTemp = Replace(sTemp, "<br>",chr(13))
     sTemp = Replace(sTemp, "&amp;lt;", "<")
     sTemp = Replace(sTemp, "&amp;gt;", ">")
     sTemp = Replace(sTemp, "&amp;quot;", Chr(34))
     inHTML = sTemp
End Function
%>

#T= 正则表表达式验证函数
<%
"正则表表达式验证函数 patrn-正则表达式 strng-需要验证的字符串
"===============================================================
Function RegExpTest(patrn, strng)
    Dim regEx, retVal " 建立变量。
    SET regEx = New RegExp " 建立正则表达式。
    regEx.Pattern = patrn " 设置模式。
    regEx.IgnoreCase = False " 设置是否区分大小写。
    retVal = regEx.Test(strng) " 执行搜索测试。
    RegExpTest = retVal "返回值,不符合就返回false,符合为true
    SET regEx = NOTHING
End Function
%>


#T= 生成随机字符串
<%
"生成随机字符串
Function RndCode()
    Dim CodeSet,AmountSet
    CodeSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
    AmountSet = 62 " 文字数量
    Randomize

    Dim vCode(10), vCodes,i
    For i = 0 To 9
      vCode(i) = Int(Rnd * AmountSet)
      vCodes = vCodes &amp; Mid(CodeSet, vCode(i) + 1, 1)
    Next
    RndCode=vCodes
End Function
%>


#T=============================
#T=FSO相关操作
#T= 判断目录是否存在
<%
Function IsFloderExist(strFolderName)
    SET FSO=Server.Cr&#101;ateObject("Scripting.FileSystemObject")
    IF(FSO.FolderExists(strFolderName))THEN
        IsFloderExist = True
    ELSE
        IsFloderExist = False
    END IF
    SET FSO=NOTHING
End Function
%>

#T= 创建目录
<%
Function Cr&#101;ateFolder(strFolderName)
    SET FSO=Server.Cr&#101;ateObject("Scripting.FileSystemObject")
    IF(FSO.FolderExists(strFolderName) = False)THEN
        FSO.Cr&#101;ateFolder(strFolderName)
    END IF
    SET FSO=NOTHING
END Function
%>

#T= 删除目录
<%
Function Del&#101;teFolder(strFolderName)
    SET FSO=Server.Cr&#101;ateObject("Scripting.FileSystemObject")
    IF(FSO.FolderExists(strFolderName))THEN
        FSO.Del&#101;teFolder(strFolderName)
    END IF
    SET FSO=NOTHING
END Function
%>

#T= 判断文件是否存在
<%
Function IsFileExist(strFileName)
    SET FSO=Server.Cr&#101;ateObject("Scripting.FileSystemObject")
    IF(FSO.FileExists(strFileName))THEN
        IsFileExist = True
    ELSE
        IsFileExist = False
    END IF
    SET FSO=NOTHING
End Function
%>

#T= 删除文件
<%
Function Del&#101;teFile(strFileName)
    SET FSO=Server.Cr&#101;ateObject("Scripting.FileSystemObject")
    IF(FSO.FileExists(strFileName))THEN
        FSO.Del&#101;teFile(strFileName)
    END IF
    SET FSO=NOTHING
END Function
%>

#T=============================
#T= ASP小偷常用的几个函数
<%
Function ByteToStr(vIn)
    Dim strReturn,i,ThisCharCode,innerCode,Hight8,Low8,NextCharCode
    strReturn = ""
    For i = 1 To LenB(vIn)
        ThisCharCode = AscB(MidB(vIn,i,1))
        IF(ThisCharCode < &amp;H80)THEN
            strReturn = strReturn &amp; Chr(ThisCharCode)
        ELSE
            NextCharCode = AscB(MidB(vIn,i+1,1))
            strReturn = strReturn &amp; Chr(CLng(ThisCharCode) * &amp;H100 + CInt(NextCharCode))
            i = i + 1
        END IF
    Next
    ByteToStr = strReturn
End Function

Function GetHttpPageContent(url,Method,SendStr)
    Dim Retrieval
    SET Retrieval = Server.Cr&#101;ateObject("Microsoft.XMLHTTP")
    With Retrieval
        .Open Method, url, False ,"" ,""
        .setRequestHeader "Content-Type","application/x-www-form-urlencoded"
        .Send(SendStr)
        GetHttpPageContent = .ResponseBody
    End With
    SET Retrieval = Nothing
    GetHttpPageContent=ByteToStr(GetHttpPageContent)
End Function

Function RegExpText(strng,regStr)
    Dim regEx,Match,Matches,RetStr
    SET regEx = New RegExp
    regEx.Pattern = regStr
    regEx.IgnoreCase = True
    regEx.Global = True
    SET Matches = regEx.Execute(strng)
    For Each Match in Matches
        RetStr = RetStr &amp; regEx.Replace(Match.Value,"$1") &amp; ","
    Next
    RegExpText = RetStr
    set regEx=nothing
End Function

Function StreamBytesToBstr(strBody, CodeBase)
Dim objStream
SET objStream = Server.Cr&#101;ateObject("Adodb.Stream")
With objStream
    .Type = 1
    .Mode = 3
    .Open
    .Write strBody
    .Position = 0
    .Type = 2
    .Charset = CodeBase
    StreamBytesToBstr = .ReadText
    .Close
End With
SET objStream = Nothing
End Function
%>

支持多风格变换的ASP分页类

这个分页使用的是0游标,也就是Rs.Open Sql,Conn,0,1。但是感觉也快不了多少,10
万条数据的分页时间300多豪秒之间
代码:
<%
"******************************
"名称:分页类
"日期:2005/12/3
"作者:西楼冷月
"网址:www.xilou.net | www.chinaCMS.org
"描述:无
"版权:转载请注名出处,作者
"******************************
Class Page
Private CurrPage
Private PageN
Private UrlStr
Private TempStr
Private ErrInfo
Private IsErr
Private TotalRecord
Private TotalPage
Public  PageRs

Private TempA(11)
Private TempB(8)
"------------------------------------------------------------
Private Sub Class_Initialize()
      CurrPage=1"//默认显示当前页为第一页
      PageN=10"//默认每页显示10条数据
      UrlStr="#"
      TempStr=""
      ErrInfo="ErrInfo:"
      IsErr=False
End Sub
Private Sub Class_Terminate()
      If IsObject(PageRs) Then
            PageRs.Close
            Set PageRs=Nothing
      End If
      Erase TempA
      Erase TempB
End Sub
"----------------------------------------------------------
"//获取当前页码
Public Property Let CurrentPage(Val)
      CurrPage=Val
End Property
Public Property Get CurrentPage()
      CurrentPage=CurrPage
End Property
"//获取每页显示条数
Public Property Let PageNum(Val)
      PageN=Val
End Property
Public Property Get PageNum()
      PageNum=PageN
End Property
"//获取URL
Public Property Let Url(Val)
      UrlStr=Val
End Property
Public Property Get Url()
      Url=UrlStr
End Property
"//获取模板
Public Property Let Temp(Val)
      TempStr=Val
End Property
Public Property Get Temp()
      Temp=TempStr
End Property
"------------------------------------------------------------

Public Sub Exec(Sql,ConnObj)
      On Error Resume Next
      Set PageRs=Server.Cr&#101;ateObject("ADODB.RecordSet")
      PageRs.CursorLocation = 3 "使用客户端游标,可以使效率提高
      PageRs.PageSize = PageN "定义分页记录集每页显示记录数
      PageRs.Open Sql,ConnObj,0,1
      If Err.Number<>0 Then
        Err.Clear
     PageRs.Close
     Set PageRs=Nothing
        ErrInfo=ErrInfo&amp;"建立或打开记录集错误..."
     IsErr=True
     Response.Write ErrInfo
     Response.End
      End If
      TotalRecord=PageRs.RecordCount"//如果为0呢?
      If TotalRecord>=1 Then
      "----------------------------------------------------------------------------开始
      "//计算总页数,Ps,为什么不用PageRs.PageCount呢?
      "If TotalRecord Mod PageN=0 Then
        "TotalPage=PageRs.RecordCount\PageN
      "Else
        "TotalPage=PageRs.RecordCount\PageN
     "TotalPage=Abs(Int(TotalPage))
      "End If
   TotalPage=PageRs.PageCount
      "//处理当前接收页码,默认的为1,所以不是数字类型的都会为1
      If IsNumeric(CurrPage) Then
         CurrPage=CLNg(CurrPage)
         If CurrPage<1 Then CurrPage=1
      If CurrPage>TotalPage Then CurrPage=TotalPage
      Else
            "//Dim M:M="":IsNumeric(M)=True
         CurrPage=1
      End If
      "---------------------------------------------------------------------------结束
      Else
         TotalPage=0
         CurrPage=1
      End If
      "//
      PageRs.AbsolutePage = CurrPage "absolutepage:设置指针指向某页开头
      PageRs.PageSize=PageN
End Sub
Private Sub Init()
      "Private TempA(10)
      TempA(1)="{N1}" "//首页
      TempA(2)="{N2}""//上一页
      TempA(3)="{N3}""//下一页
      TempA(4)="{N4}""//尾页
      TempA(5)="{N5}""//当前页码
      TempA(6)="{N6}""//页码总数
      TempA(7)="{N7}""//每页条数
      TempA(8)="{N8}""//文章总数
      TempA(9)="{L}""//循环标签开始
      TempA(10)="{N}""//循环内单标签:页码
      TempA(11)="{L/}""//循环标签结束
      "Private TempB(8)
      TempB(1)="首页"
      TempB(2)="上一页"
      TempB(3)="下一页"
      TempB(4)="尾页"
      TempB(5)=CurrPage"//当前页码
      TempB(6)=TotalPage"//页码总数
      TempB(7)=PageN"//每页条数
      TempB(8)=TotalRecord"//文章总数
End Sub
Public Sub Show(Style)
      If IsErr=True Then
        Response.Write ErrInfo
     Exit Sub
      End If

      Call Init()
      Sel&#101;ct Case Style
      Case 1
         Response.Write StyleA()
      Case 2
         Response.Write StyleB()
      Case 3
         Response.Write StyleC()
      Case 4
         Response.Write StyleD()
      Case Else
         ErrInfo=ErrInfo&amp;"不存在当前样式..."
      Response.Write ErrInfo
      End Sel&#101;ct
End Sub
Public Function ShowStyle(Style)
      If IsErr=True Then
        ShowStyle=ErrInfo
     Exit Function
      End If

      Call Init()
      Sel&#101;ct Case Style
      Case 1
         ShowStyle= StyleA()
      Case 2
         ShowStyle= StyleB()
      Case Else
         ErrInfo=ErrInfo&amp;"不存在当前样式..."
  ShowStyle=ErrInfo
      End Sel&#101;ct
End Function

Private Function StyleA()
"首页 上一页 下一页 尾页  本页为第1/20页,共20页,每页10条,文章总数200条
"//分页样例:[首页] [上页] [下页] [尾页] [页次:4/5页] [共86篇 20篇/页] 转到:_ 页
"//标签:{N1} {N2} {N3} {N4} || 共:{N8}条记录 {N6}页 当前为第{N5}页 每页{N7}条
If IsEmpty(TempStr) Then
      ErrInfo=ErrInfo&amp;"模板为空..."
      StyleB=ErrInfo
      Exit Function
End If
Dim M
If TotalPage>1 Then
      If CurrPage>1 Then
        M="<a href=""&amp;UrlStr&amp;"Page=1">"&amp;"首页"&amp;"</a>"
     TempStr=Replace(TempStr,"{N1}",M)
     M="<a href=""&amp;UrlStr&amp;"Page="&amp;CurrPage-1&amp;"">"&amp;"上一页"&amp;"</a>"
     TempStr=Replace(TempStr,"{N2}",M)
     If CurrPage<TotalPage Then
       M="<a href=""&amp;UrlStr&amp;"Page="&amp;CurrPage+1&amp;"">"&amp;"下一页"&amp;"</a>"
    TempStr=Replace(TempStr,"{N3}",M)
    M="<a href=""&amp;UrlStr&amp;"Page="&amp;TotalPage&amp;"">"&amp;"尾页"&amp;"</a>"
          TempStr=Replace(TempStr,"{N4}",M)
        Else
       TempStr=Replace(TempStr,"{N3}","下一页")
    TempStr=Replace(TempStr,"{N4}","尾页")
     End If
      Else
        TempStr=Replace(TempStr,"{N1}","首页")
     TempStr=Replace(TempStr,"{N2}","上一页")
        M="<a href=""&amp;UrlStr&amp;"Page="&amp;CurrPage+1&amp;"">"&amp;"下一页"&amp;"</a>"
     TempStr=Replace(TempStr,"{N3}",M)
     M="<a href=""&amp;UrlStr&amp;"Page="&amp;TotalPage&amp;"">"&amp;"尾页"&amp;"</a>"
        TempStr=Replace(TempStr,"{N4}",M)
      End If
Else
      TempStr=Replace(TempStr,"{N1}","首页")
      TempStr=Replace(TempStr,"{N2}","上一页")
      TempStr=Replace(TempStr,"{N3}","下一页")
      TempStr=Replace(TempStr,"{N4}","尾页")
End If
T=TempStr
T=Replace(T,"{N8}",TotalRecord)
T=Replace(T,"{N6}",TotalPage)
T=Replace(T,"{N5}",CurrPage)
T=Replace(T,"{N7}",PageN)
TempStr=T
StyleA=TempStr
End Function

Private Function StyleB()
"首页 |< 1 2 3 4 5 6 7 >| 尾页
"//标签:{N1} {N2} {L}{N}{L/}{N3}{N4}
If IsEmpty(TempStr) Then
      ErrInfo=ErrInfo&amp;"模板为空..."
      StyleB=ErrInfo
      Exit Function
End If
Dim ForceNum,BackNum"//当前页的前面和后面显示个数
ForceNum=5
BackNum=4
Dim M
"//首页
M="<a href=""&amp;UrlStr&amp;"Page=1">"&amp;TempB(1)&amp;"</a>"
TempStr=Replace(TempStr,"{N1}",M)
"//尾页
M="<a href=""&amp;UrlStr&amp;"Page="&amp;TempB(6)&amp;"">"&amp;TempB(4)&amp;"</a>"
TempStr=Replace(TempStr,"{N4}",M)
"//前一页
M="|<"
If CurrPage-1>=1 Then
      M="<a href=""&amp;UrlStr&amp;"Page="&amp;CurrPage-1&amp;"">"&amp;"|<"&amp;"</a>"
End If
TempStr=Replace(TempStr,"{N2}",M)
"//后一页
M=">|"
If CurrPage+1<=TotalPage Then
      M="<a href=""&amp;UrlStr&amp;"Page="&amp;CurrPage+1&amp;"">"&amp;">|"&amp;"</a>"
End If
TempStr=Replace(TempStr,"{N3}",M)
"//取出循环标签
Dim N1,N2,N3,N4,N5,N6
If InStr(TempStr,"{L}")>0 Then
      N1=InStr(TempStr,"{L}")
End If
If InStr(TempStr,"{L/}")>0 Then
      N2=InStr(TempStr,"{L/}")
End If
If N2<=N1 Then
      ErrInfo=ErrInfo&amp;"循环标签出错..."
      StyleB=ErrInfo
      Exit Function
End If
N3=Mid(TempStr,N1,N2-N1+4)"//储存包括{L}{L/}循环标签的模板
N4=Replace(N3,"{L}","")"//储存不包括{L}{L/}循环标签的模板
N4=Replace(N4,"{L/}","")
"//页码列表
Dim FirstPageNum,LastPageNum
If CurrPage-ForceNum<=1 Then
   FirstPageNum=1
   PageList=""
Else
   FirstPageNum=CurrPage-ForceNum
   PageList="... ..."
End If
If CurrPage+BackNum>=TotalPage Then
   LastPageNum=TotalPage
   PageList_2=""
Else
   LastPageNum=CurrPage+BackNum
   PageList_2="... ..."
End If
Dim I
For I=FirstPageNum To LastPageNum
      If I=CurrPage Then
        N5=Replace(N4,"{N}","<b>"&amp;I&amp;"</b>")
     N6=N6&amp;N5
      Else
        M="<a href=""&amp;UrlStr&amp;"Page="&amp;I&amp;"">"&amp;I&amp;"</a>"
     N5=Replace(N4,"{N}",M)
     N6=N6&amp;N5
      End If
Next
TempStr=Replace(TempStr,N3,N6)
StyleB=TempStr
End Function

Private Function StyleC()
"首页 |< |<< 1 2 3 4 5 6 7 >>| >| 尾页
"//此风格在StyleB的基础上修改,增加两个标签:{N9}上10页 {N10}下10页
"//标签:{N1}{N2}{N9}{L}{N}{L/}{N10}{N3}{N4}
Dim T
T=StyleB()
"//前十页
M="|<<"
If CurrPage-10>=1 Then
      M="<a href=""&amp;UrlStr&amp;"Page="&amp;CurrPage-10&amp;"">"&amp;"|<<"&amp;"</a>"
End If
T=Replace(T,"{N9}",M)
M=">>|"
If CurrPage+10<=TotalPage Then
      M="<a href=""&amp;UrlStr&amp;"Page="&amp;CurrPage+10&amp;"">"&amp;">>|"&amp;"</a>"
End If
T=Replace(T,"{N10}",M)
StyleC=T
End Function

Private Function StyleD()
"//此风格在StyleC的基础上修改
"//共{N8}条记录 {N6}页 当前为第{N5}页 每页{N7}条
"//首页 |< |<< 1 2 3 4 5 6 7 >>| >| 尾页
"//标签:{N1}{N2}{N9}{L}{N}{L/}{N10}{N3}{N4}
Dim T
T=StyleC()
T=Replace(T,"{N8}",TotalRecord)
T=Replace(T,"{N6}",TotalPage)
T=Replace(T,"{N5}",CurrPage)
T=Replace(T,"{N7}",PageN)
StyleD=T
End Function

End Class
%>

调用示例:
代码:
Set test = New Page
test.CurrentPage=request.QueryString("page") "自己去读取拉
test.temp="{N1} {N2} {L} {N} {L/} {N3} {N4}"
test.Exec "Sel&#101;ct * From tblname",conn
test.Show 4 "调用第四种风格显示分页
test.PageNum = 5

用模板设置风格不错。只是没有把读取记录集封装进去,不太好。不用。

Tags: 分页, ASP类

6行代码实现无组件上传(打自己嘴巴,只能用在本地)

淡水河边这厮特别提示!!!这个程序只能在本地上传(拷贝),无法实现远程上传,上传的时候程序先是获取文件路径,然后就对文件进行复制,获取的路径是本地的(例:C:/MYPIC.JPG),所以在用在远程服务器上时,远程的服务器上并没有你本地上的文件(服务器上并没有C:/MYPIC.JPG),所以上传的时候就出现文件不能打开出现"adodb.stream 错误 800a0bba".不过PHP到是有这样简单的方法

  目前有很多无组件上传类,我大概看了一下,大多写的相当复杂,有的居然还只能传文本
  最关键的是没有10行代码以下的 :)
  我花了一个晚上时间研究了一下ADODB.Stream,并且用了6行代码实现了无组件上传:

代码:
  strFileName = Request.QueryString("file1")
  Set objstream = Server.Cr&#101;ateObject("ADODB.Stream")
  objstream.Type = 1 " adTypeBinary
  objstream.Open
  objstream.LoadFromFile strFileName
  objstream.SaveToFile Server."123_onweb.gif",2

  使用方法:

  把上面的代码写成upload.asp
  在浏览器里面输入:
  http://XXX/upload.asp?file...\上传文件\123.gif
  XXX为你的主机地址
  执行完后你会看到你的目录下面多了一个123_onweb.gif
  他就是你要文件拉!!!!

  根据原理我们可以扩展以下代码:
  upload.asp文件
代码:
  <%
  Function GetFileName(ByVal strFile)
  If strFile <> "" Then
   GetFileName = mid(strFile,InStrRev(strFile, "\")+1)
  Else
   GetFileName = ""
  End If
  End  function

  strFileName = Request.Form("file1")
  Set objstream = Server.Cr&#101;ateObject("ADODB.Stream")
  objstream.Type = 1 " adTypeBinary
  objstream.Open
  objstream.LoadFromFile strFileName
  objstream.SaveToFile Server.MapPath(GetFileName(strFileName)),2
  objstream.Close
  %>

upload.htm文件
代码:
  <form name="FORM" action="upload.asp" method="post">
  <input type="submit" name="submit" value="OK">
     <input type="file" name="file1" style="width:400"  value="">
  </form>

注,淡水河边这厮提示一下,要有权限。没有权限会出错的。当然,这段代码用“ADODB.Stream”。有些杀软可能会报毒。可以用"ADODB"&amp;"."&amp;"Stre"&amp;"am"方法代替

Tags: 无组件上传

ASP彩色校验码的制作!!!!(幻想剑)

要读懂这些代码主要是要了解ASP中操作二进制数据的对象ADODB.Stream!本程序主要用的就是Adodb.Stream,如果你有这个基础,就可以进一步添加更多的功能如加入杂点,渐变底色,数字行列错位,笔画短点,提高被ocr识别的不可能。目前还没有好的识别引擎,昨天下载了个号称能识别图像验证码90%的!把4321识别成 89910,所以图像码还是比较安全的。

在网上看到有暴力破解的方法,如果我用图像附加码+禁止外部提交+10次密码错误封帐号 +50次密码错误琐死IP+10秒的防刷新间隔注册页,登陆页均要加上+禁止外部提交,这样,暴力破解应该就没戏了。

ASP文件:Code.ASP
数据文件:body.Fix , Head.Fix
用法:<img src="http://www.xxx.com/code.AS...

代码:
Response.buffer = true
NumCode

Function NumCode()
Response.Expires = -1
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "cache-ctrol","no-cache"
dim zNum,i,j
dim Ados,Ados1
Randomize timer
"生成随机四位数字:
zNum = cint(8999*Rnd+1000)
"传递给session
Session("GetCode") = zNum
"该for循环是将随机数字放入一个下标3的数组,便于提供给后面的阵列变换
dim zimg(3),NStr
NStr=cstr(zNum)
For i=0 to 3
zimg(i)=cint(mid(NStr,i+1,1))
Next
dim Pos

"定义二个 ADODB.Stream binary对象,作图像数据操作之用:

set Ados=Server.Cr&#101;ateObject("Adodb.Stream")
Ados.Mode=3
Ados.Type=1
Ados.Open
set Ados1=Server.Cr&#101;ateObject("Adodb.Stream")
Ados1.Mode=3
Ados1.Type=1
Ados1.Open
"载入0~9的数字数据10x100的,Gbr的阵列数据,每个320字节,10个数字3200byte
"BGR一个点,10x10个点一个数字,一个点三个字节(二进制8位,16进制 00~FF)
"一行10个点 30字节 + 行结束标记 00 00 二字节 32字节,所以一个10x100宽小于长的图像每个数字10x10是320字节
"长大于宽的则无行结束标记 0000,直接是300字节
"这些就是BMP 24bit的数据详细信息了
"至于头部,也很简单,包含长宽,图像开始标记等等~~才54字节,远没jpg什么的复杂

Ados.LoadFromFile(Server.mappath("body.Fix"))
Ados1.write Ados.read(1280)
"第一个for循环,按生成的随机数字顺序从 10X100的数字阵列中提取出相应的四个数字
"但是竖排的数字阵列
for i=0 to 3
Ados.Position=(9-zimg(i))*320
Ados1.Position=i*320
Ados1.write ados.read(320)
next
"清空已经用完的ADOS的数据,调入替换新的图像头54字节的头文件
Ados.LoadFromFile(Server.mappath("head.fix"))
Pos=lenb(Ados.read())
Ados.Position=Pos "指定Pos位置,即可再偏移54字节的位置添加图形数据
"第二个for循环,进行数字的阵列变换,由竖排的块转换为横排的数字块
"方法是隔320字节抽取4次30字节写入ados对象,再抽取偏移第二行的图像数据
"30字节是因为bmp 宽大于长时无00 00的行结束标记
for i=0 to 9 step 1
for j=0 to 3
Ados1.Position=i*32+j*320
Ados.Position=Pos+30*j+i*120
Ados.write ados1.read(30)
next
next
Ados.Position=0
response.BinaryWrite直接向客户端发送图像数据
Response.ContentType = "image/BMP"
Response.BinaryWrite Ados.read()
Ados.Close:set Ados=nothing
Ados1.Close:set Ados1=nothing
End Function

Tags: 验证码

详细注解ASPJPGE组件的添加水印用法

详细注解ASPJPGE组件的添加水印用法。
代码:
"------------为图片添加水印--------
Sub AddWaterMark(imagename)
"定义变量。
Dim Jpeg

Set Jpeg = Server.Cr&#101;ateObject("Persits.Jpeg")  " 建立对象
Jpeg.Open trim(server.MapPath(imagename))  " 图片所在位置
Jpeg.Canvas.Font.Color = "&amp;HFFFFFF" " 颜色
Jpeg.Canvas.Font.Family = "宋体"  " 设置字体

"是否设置成粗体
Jpeg.Canvas.Font.Bold = false

Jpeg.Canvas.Font.ShadowColor = "&amp;H000000" "//水印文字的阴影色彩。
Jpeg.Canvas.Font.ShadowXoffset = 1  "//水印文字阴影向右偏移的像素值,输入负值则向左偏移。
Jpeg.Canvas.Font.ShadowYoffset = 1  "//水印文字阴影向下偏移的像素值,输入负值则向右偏移。
Jpeg.Canvas.Font.Size = 12 "字体大小
Jpeg.Canvas.Font.Quality = 3 " 文字清晰度
Jpeg.Canvas.Print 5,5, "淡水河边 - kissmumu@126.com"   "水印文字,位置在原图的坐标的5,5处
Jpeg.Save Server.MapPath(imagename)  " 保存文件
Set Jpeg = Nothing

End Sub
"---------------添加完毕------------------


调用:
Dim FilePath
FilePath="uploadpic/demo.jpg""图片路径
AddWaterMark FilePath

Tags: 水印, aspjpge

show点asp?id=x变成show/?x的形式@防盗链

首先建立一个show目录,建立一个index.asp文件,就是系统默认的那个文件
以前是 show.asp?id=26 的样子,show文件得到id一般用id=request.QueryString("id")之类的获得id.
现在是把获得id换成获得?后面的数字,用以下代码.
id = LCase(Trim(Request.ServerVariables("QUERY_STRING")))

效果:
http://www.xxx.com/show/?x


另外加上一个Request.ServerVariables的应用范例

Request.ServerVariables("HTTP_REFERER")
 用来获取(从哪个页面转到当前页面的) &amp; 路径
 常用来转到某一网址
 response.redirect Request.ServerVariables("HTTP_REFERER")
 用来判断是不是从某个网址链接过来的也一错,可以防址盗链
 下面判断是不是从主面进来,
代码:
server_vv=len(Request.ServerVariables("SERVER_NAME"))"取得WWW名,不好说大概就是这个意思
 server_v1=left(Cstr(Request.ServerVariables("HTTP_REFERER")),server_vv)"取得本页路径的主HTTP
 server_v2=left(Cstr("http://"&amp;R...,server_vv)取得带HTTP名
 if server_v1<>server_v2 and server_v1<>"" and server_v2<>"" then
 response.write("<script>alert("错误:禁止从站点外部提交数据!.")</script>")
 response.end


再来一个简单的防盗程序
代码:
sServerName = LCase(Request.ServerVariables("SERVER_NAME"))
     sReferrerpage = LCase(Request.ServerVariables("HTTP_REFERER"))
     "//盗链检测
     If InStr(sReferrerPage,sServerName)<1 then
           Response.Redirect("/Error.asp?IllegalLink")
     End If

InStr 函数 返回某字符串在另一字符串中第一次出现的位置。
 上面的也就是说,如果没有主机这个名字值小于1(怎么是数字值呢)
 就转到错误页面

Tags: Request,盗链

Request点ServerVariables大全

ASP.NET语法:
Request.ServerVariables [int index]; Request.ServerVariables [string name];

ASP语法:
Request.ServerVariables (server environment variable);

参数 服务器环境变量
指定要检索的服务器环境变量名。可以使用下面列出的值。
变量     说明
ALL_HTTP :客户端发送的所有 HTTP 标题文件。
ALL_RAW :检索未处理表格中所有的标题。ALL_RAW 和 ALL_HTTP 不同,ALL_HTTP 在标题文件名前面放置 HTTP_ prefix,并且标题名称总是大写的。使用 ALL_RAW 时,标题名称和值只在客户端发送时才出现。
APPL_MD_PATH :检索 ISAPI DLL 的 (WAM) Application 的元数据库路径。
APPL_PHYSICAL_PATH: 检索与元数据库路径相应的物理路径。IIS 通过将 APPL_MD_PATH 转换为物理(目录)路径以返回值。
AUTH_PASSWORD :该值输入到客户端的鉴定对话中。只有使用基本鉴定时,该变量才可用。
AUTH_TYPE :这是用户访问受保护的脚本时,服务器用于检验用户的验证方法。
AUTH_USER: 未被鉴定的用户名。
CERT_COOKIE: 客户端验证的唯一 ID,以字符串方式返回。可作为整个客户端验证的签字。
CERT_FLAGS: 如有客户端验证,则 bit0 为 1。
如果客户端验证的验证人无效(不在服务器承认的 CA 列表中),bit1 被设置为 1。

CERT_ISSUER :用户验证中的颁布者字段(O=MS,OU=IAS,CN=user name,C=USA)。
CERT_KEYSIZE :安全套接字层连接关键字的位数,如 128。
CERT_SECRETKEYSIZE: 服务器验证私人关键字的位数。如 1024。
CERT_SERIALNUMBER :用户验证的序列号字段。
CERT_SERVER_ISSUER :服务器验证的颁发者字段。
CERT_SERVER_SUBJECT :服务器验证的主字段。
CERT_SUBJECT :客户端验证的主字段。
CONTENT_LENGTH :客户端发出内容的长度。
CONTENT_TYPE :内容的数据类型。同附加信息的查询一起使用,如 HTTP 查询 GET、 POST 和 PUT。
GATEWAY_INTERFACE: 服务器使用的 CGI 规格的修订。格式为 CGI/revision。
HTTP_<HeaderName> HeaderName :存储在标题文件中的值。未列入该表的标题文件必须以 HTTP_ 作为前缀,以使 ServerVariables 集合检索其值。
注意 服务器将 HeaderName 中的下划线(_)解释为实际标题中的破折号。例如,如果您指定 HTTP_MY_HEADER,服务器将搜索以 MY-HEADER 为名发送的标题文件。

HTTPS :如果请求穿过安全通道(SSL),则返回 ON。如果请求来自非安全通道,则返回 OFF。
HTTPS_KEYSIZE :安全套接字层连接关键字的位数,如 128。
HTTPS_SECRETKEYSIZE :服务器验证私人关键字的位数。如 1024。
HTTPS_SERVER_ISSUER: 服务器验证的颁发者字段。
HTTPS_SERVER_SUBJECT :服务器验证的主字段。
INSTANCE_ID :文本格式 IIS 实例的 ID。如果实例 ID 为 1,则以字符形式出现。使用该变量可以检索请求所属的(元数据库中)Web 服务器实例的 ID。
INSTANCE_META_PATH :响应请求的 IIS 实例的元数据库路径。
LOCAL_ADDR :返回接受请求的服务器地址。如果在绑定多个 IP 地址的多宿主机器上查找请求所使用的地址时,这条变量非常重要。
LOGON_USER :用户登录 Windows NT? 的帐号。
PATH_INFO :客户端提供的额外路径信息。可以使用这些虚拟路径和 PATH_INFO 服务器变量访问脚本。如果该信息来自 URL,在到达 CGI 脚本前就已经由服务器解码了。
PATH_TRANSLATED PATH_INFO: 转换后的版本,该变量获取路径并进行必要的由虚拟至物理的映射。
QUERY_STRING :查询 HTTP 请求中问号(?)后的信息。
REMOTE_ADDR :发出请求的远程主机的 IP 地址。
REMOTE_HOST :发出请求的主机名称。如果服务器无此信息,它将设置为空的 MOTE_ADDR 变量。
REMOTE_USER :用户发送的未映射的用户名字符串。该名称是用户实际发送的名称,与服务器上验证过滤器修改过后的名称相对。
REQUEST_METHOD: 该方法用于提出请求。相当于用于 HTTP 的 GET、HEAD、POST 等等。
SCRIPT_NAME: 执行脚本的虚拟路径。用于自引用的 URL。
SERVER_NAME :出现在自引用 UAL 中的服务器主机名、DNS 化名或 IP 地址。
SERVER_PORT :发送请求的端口号。
SERVER_PORT_SECURE :包含 0 或 1 的字符串。如果安全端口处理了请求,则为 1,否则为 0。
SERVER_PROTOCOL :请求信息协议的名称和修订。格式为 protocol/revision 。
SERVER_SOFTWARE: 应答请求并运行网关的服务器软件的名称和版本。格式为 name/version 。
URL 提供 URL 的基本部分。


注释
如果客户端发送的标题文件在上述表格中找不到,可以在调用 Request.ServerVariables 中给标题文件名加上 HTTP_ 的前缀以检索其值。例如,如果客户端发送标题文件

SomeNewHeader:SomeNewValue 您可以通过使用下面的语法检索 SomeNewValue

<% Request.ServerVariables("HTTP_SomeNewHeader") %> 您可使用重述符以循环遍历所有的服务器变量名。例如,使用下面的脚本打印出所有的服务器名。

<TABLE><TR><TD><B>Server Variable</B></TD><TD><B>Value</B></TD></TR><% For Each name In Request.ServerVariables %> <TR><TD> <%= name %> </TD><TD> <%= Request.ServerVariables(name) %> </TD></TR></TABLE><% Next %> 示例
下面的例子使用 Request 对象显示一些服务器变量。

<HTML><!-- This example displays the content of several ServerVariables. --> ALL_HTTP server variable = <%= Request.ServerVariables("ALL_HTTP") %> <BR>CONTENT_LENGTH server variable = <%= Request.ServerVariables("CONTENT_LENGTH") %> <BR> CONTENT_TYPE server variable = <%= Request.ServerVariables("CONTENT_TYPE") %> <BR>QUERY_STRING server variable = <%= Request.ServerVariables("QUERY_STRING") %> <BR> SERVER_SOFTWARE server variable = <%= Request.ServerVariables("SERVER_SOFTWARE") %> <BR> </HTML> 下一个示例使用 ServerVariables 集合将服务器名插入一个超文本链接。

<A HREF = "http://<%= Request.ServerVariables("SERVER_NAME") %>/scripts/MyPage.asp">Link to MyPage.asp</A>

Tags: Request

asp程序打包和安装程序

作者:落伍者 Lukin
代码:

把网站源码全部打包到Xml文件里面,生成 updata.xml 文件,把xml文件上传到空间里面    
然后通过 install.asp文件将文件全部释放出来。    
就和z-blog的 自动安装包一样的功能呵呵。    
代码是落伍的一位兄弟写的,不过代码好像有错误,这个是我参考他的 修改过了,可以正常运行!~~    
此代码可以应用到 asp程序的 自动升级服务上面。具体怎么来实现,欢迎探讨!~~  
不用设定打包目录版,需要设定打包目录版 这两个版本的区别:

不用设定打包目录版,直接放到你需要打包的目录 执行就可以了。
需要设定打包目录版,必须指定需要打包的路径(在程序里修改),不指定,不能进行打包。  

功能不错,偷偷备份一下。
下载文件
点击这里下载文件

下载文件
点击这里下载文件

Tags: 打包

Records:12312345678910»