iis7 404 自定义错误页

三 22nd, 2011

   使用Windows7很久了,调试asp,php网站,一直没有问题。用这也算顺手,所以最近不准备换了。

    本站目录下的成语接龙最近流量恢复到了两三千IP左右,特别是二字开头的成语三字开头的成语四字开头的成语等文章给我带来了不菲的流量,为了再接再厉,准备在体验上再下些功夫。重新设计下成语接龙程序。本程序使用404.php,实现为静态。下载到本地调试,在IIS7中设置了404错误页竟然不行。

    查阅了很多资料,终于找到了解决办法,在web.config 找到httpErrors节点,修改为errorMode=”Custom”就可以了。

重启下IIS,现在就可以正常访问了。

标签:

巧用JS复制网页内容

十二 19th, 2010

最近公司想整理下业务,看看有什么漏掉的订单。万网,息壤的业务比较多。万网的可以导出csv,而息壤就悲剧了。好几百页,只能一条一条的复制,郁闷。受QQ云输入法的影响,将JS保存到收藏夹,点击链接执行JS,加载外部JS创建表单,通过DOM获取内容,提交到本地的数据库。剩下的就好处理了。

1、新建收藏夹项目,路径填写:

javascript:(function(){$tmp=document.createElement("script");$tmp.src='http://192.168.99.29/_app/xirang.js';document.getElementsByTagName("head")[0].appendChild($tmp);})();

2、本地架设好服务器,xirang.js内容如下:

(function(){
  $tmp=document.createElement("div");
  $tmp.innerHTML=' <form action="http://192.168.99.29/_app/xirang.asp" style="display:none" method="post" id="__tmp_form"><textarea name="txtdb"></textarea></form>';
  document.getElementsByTagName("body")[0].appendChild($tmp);}
)();
hostlist = (function(){
  _t=document.getElementsByTagName("table");
  for(i=0;i<_t.length;i++){
    if(_t[i].getAttribute("className") == "listtable"){
      return _t[i];
    }
  }
  return "";
})();
if(typeof(hostlist) == "object"){
  __tmp_frm = document.getElementById("__tmp_form");
  __tmp_frm.txtdb.value = hostlist.innerHTML;
  __tmp_frm.submit();
}else{
  if(confirm("没有找到数据,点确定返回第一页")){
    location.href = "http://www.xrnet.cn/store/member.php?module=mysite&start_item=0&search=&sort_order=expiry_date&sort_order_desc=1";
  };
};

3、现在点击收藏夹中的项目,主机列表的内容(HTML代码)就到了一个表单中,并提交到了:http://192.168.99.29/_app/xirang.asp。

4、建立一个xirang.asp,保存内容。

  set conn = server.createobject("ADODB.Connection")
  conn.open "provider=microsoft.jet.oledb.4.0;data source=" & server.mappath("xirang.mdb")
  set rs = server.createobject("ADODB.Recordset")

  frmstr = request.servervariables("HTTP_REFERER")
  if frmstr = "" then
    rs.open "select txt from txtdb",conn,1,1
    do while not rs.eof
      response.write rs(0)
      response.flush()
      rs.movenext
    loop
  else
    tmpstr = "<table width=""100%"" border=""1"">" & request.form("txtdb") & "</table>"
    stanum = split(mid(frmstr,instr(frmstr,"start_item")+11),"&")(0)
    if isnumeric(stanum) then stanum = cLng(stanum) else stanum = 0
    nxtnum = stanum + 20

    rs.open "select * from txtdb",conn,3,2
    rs.addnew
    rs("txt") = tmpstr
    rs("pag") = stanum
    rs.update
    rs.close
    set rs = nothing
    set conn = nothing

    response.redirect "http://www.xrnet.cn/store/member.php?module=mysite&start_item=" & nxtnum & "&search=&sort_order=expiry_date&sort_order_desc=1"
  end if

5、不停的点击收藏夹的,直到最后一页。

6、直接用浏览器打开,http://192.168.99.29/_app/xirang.asp,就导出了列表的数据。 另存为网页,改后缀名为.xls,用excel打开,另存为excel格式。用access/mssql导入,有脚本处理就可以了。这些不在本文的讨论范围,不提供代码。

这种方法,可以保存任何内容。本人现在对外接单,如果有网站程序开发/重构的需求,欢迎和我联系。QQ:77068320

标签:

PHP分页(页码)函数

十 25th, 2010

09年的时候写过一个ASP输出分页页面的函数,分享两个ASP分页(页码)函数(http://www.miaoqiyuan.cn/p/asp-yema-fenye)。在开发中,省了不少力气,今天在些一个php的分页(页码)函数,供以后工作用。和ASP版本的参数,函数名都一样。

<?php
  /*
    #函数:csPage
    #功能:返回页面列表
  */
  Function csPage($iPage,$aPage,$urlStart,$urlEnd){
  	$tmp = "";
    if($iPage == 1 && $aPage == 1){
      $tmp = "<strong> 1/1 </strong>";
    }else{
      if($iPage == 1){
        $tmp = "<span> |< </span><span> << </span>";
      }else{
        $tmp = '<a title="首页" href="' . $UrlStart . 1 . $urlEnd . '"> |< </a><a title="上一页" href="' . $UrlStart . ($iPage-1) . $urlEnd . '"> << </a>';
      }
      $tmp .= "<strong> " . $iPage . "/" . $aPage . " </strong>";
      if($iPage == $aPage){
      	$tmp .= '<span> >> </span><span> >| </span>';
      }else{
        $tmp .= '<a title="下一页" href="' . $urlStart . ($iPage+1) . $urlEnd .' "> >> </a><a title="尾页" href="' . $urlStart . $aPage . $urlEnd . '"> >| </a>';
      }
    }
    return $tmp;
  }
  ?>
标签:

用FileDB快速开发生成静态系统

十 24th, 2010

最近要用到一套ASP生成静态的小系统,虽然说程序简单,但是写起来还是比较繁琐的,正好前几天写过一个:ASP文件存储方案(http://www.miaoqiyuan.cn/p/asp-filedb),用改类,可以直接快速开发生成ASP的系统。

  '加载模板
  '对于模板,不了解的,可以参考我以前写过的文章,当然也可以用任何asp的模板系统
  set p = new MYW3_TPL
  p.LoadTpl "tpl/chengyu.html"
  p.assign "Title","猫七"
  p.assign "WebHome",WebHome
  p.assign "WebSkin",WebSkin

  '/index.html
  url = "index"
  '/home/index.html
  'url = "home::index"
  '/home/1/2/333.html
  'url = "home::1::2::333"
  '生成静态
  ‘使用FileDB类,超级简单
  set f = new FileDB
  f.DBPath = "/"
  f.idxKey = url
  f.save(p.outHtml)

需要对FileDB的类做一下小的修改

Private Function getPath()
    Dim tmp
    getPath = replace(idxKey,"::","/") & ".html"
  End Function
标签: ,

ASP文本存储方案-FileDB

十 21st, 2010

四月份做个一个短信系统,当时为了节省成本(使用万网的空间,不带SQL数据库空间便宜),使用了ASP+Access开发,最近需要升级,增加一个短信接口。发现现在Access的数据库竟然有170MB。我的天啊,因为查询比较少,不是很耗资源,所以没有检查出来。
仅仅六个月,数据库竟然到了170MB。随着客户业务的增长,可能再过六个月就要到500MB了,真恐怖。主要占空间大小的,就是存储的短信的发送号码,思考再三,决定将所有的保存到文本文件中。于是写下了一个暂时成为FileDB的asp类。

Class FileDB
  Dim fso,IdxKey,DBPath
  Private Sub Class_Initialize
    Set fso = Server.CreateObject("Scripting.FileSystemObject")
    idxKey = "demo::test"
    DBPath = "DataCenter/File_DB/"
  End Sub

  Private Function getPath()
    Dim tmp
    getPath = replace(idxKey,"::","/") & ".html"
  End Function

  Private Function checkFile(byref fname)
    fname = Server.Mappath(DBPath & getPath())
    checkFile = fso.fileexists(fname)
  End Function

  Private Sub createPathName(byval idxKey)
    Dim TmpPa
    TmpPa = Server.Mappath(DBPath & idxKey)
    if not fso.folderexists(TmpPa) then
      if instr(idxKey,"\") > 0 then Call createPathName(left(idxKey,instrrev(idxKey,"\")-1))
      fso.createfolder(TmpPa)
    end if
  End Sub

  Public Function getTxt()
    if checkFile(fname) then
      set Txt = fso.getfile(fname)
      if Txt.size = 0 then
        Tmp = ""
      else
        Tmp = fso.opentextfile(fname).readall
      end if
      set Txt = Nothing
      getTxt = Tmp
    else
      getTxt = ""
    end if
  End Function

  Public Function remove()
    if checkFile(fname) then
      fso.deletefile fname
    end if
  End Function

  Public Function Save(byval content)
    if checkFile(fname) then
      set fpo = fso.opentextfile(fname,2)
    else
      idxKey = replace(idxKey,"::","\")
      if instr(idxKey,"\")>0 then Call createPathName(left(idxKey,instrrev(idxKey,"\")-1))
      set fpo = fso.createtextfile(fname)
    end if
    fpo.write content
    fpo.close
    set fpo = nothing
  End Function
End Class

因为时间比较紧,而且代码比较简单,就不加注释了,实际就是简化了文本文件的操作方法。

<% Server.ScriptTimeOut=10000 %>
<%
  '数据库链接代码

  set fdb = new FileDB
  fdb.DBPath = "../DataCenter/sms_DB/"

  conn.open constr
  set rs = server.createobject("ADODB.Recordset")
  '得到所有没有转换的数据
  rs.open "select * from sendlog where send_mob not like '%::%'",conn,3,2
  do while not rs.eof
    'FileDB 数据存放路径,日期::MD5(ID)
    idxStr = split(Rs("send_date")," ")(0) & "::" & md5(Rs("send_id"))
    fdb.IdxKey = idxStr
    fdb.Save(Rs("send_mob"))
    Rs("send_mob") = idxStr
    rs.update
    rs.movenext
  loop
  rs.close
  conn.close

  '数据库压缩过程,不是重点,再次不再多述
  compactdata(DataPath)
%>
减肥成功,所有数据转存到FileDB中。

执行一下,所有数据就转存好了,读取的时候很简单,指定了 idxStr,用getTxt()即可得到内容。

  set fdb = new FileDB
  fdb.DBPath = "../DataCenter/sms_DB/"
  '../DataCenter/sms_DB/aaa/1111.txt
  fdb.idxKey = "aaa::1111"
  str1 = fdb.getTxt()
  '../DataCenter/sms_DB/bbb/ccc/ddd/eee.txt
  fdb.idxKey = "bbb:ccc::ddd:eee"
  str2 = fdb.getTxt()
  '删除 ../DataCenter/sms_DB/bbb/ccc/ddd/eee.txt
  fdb.remove()
  '因为文件不存在,得到的值就是空字符串
  str3 = fdb.getTxt()
  '将内容保存到../DataCenter/sms_DB/bbb/ccc/ddd/eee.txt,因为不存在则创建,如果存在,则修改。
  fdb.save("11111")

2010年10月24日更新小Bug,修复了idxKey 定于数据存放在根目录,就会报错的错误

标签: ,

ASP版本 文件转十六进制

十 20th, 2010

最近接了一个彩信接口的网站,需要将 文本文件、图片文件 转换成 HexString,通过Form提交,.net、php、javascript的函数网上一抓一大把,asp的却不好找,今天我就来写一个asp版本的hexstring转换函数,为了方便以后用,直接写成类。

  class bin2txt
    dim adostream
    private sub class_initialize
      set adostream = server.createobject("ADODB.Stream")
      adostream.type = 1
      adostream.mode = 3
    end sub

    public sub open(fn)
      adostream.open
      adostream.LoadFromFile fn
    end sub

    public function getHex(t)
      dim tmp,hexstr,binstr
      binstr = adostream.read()
      for i = 1 to lenB(binstr)
        tmp = hex(ascB(midB(binstr,i,1)))
        if len(tmp) = 1 then tmp = "0" & tmp
        hexstr = hexstr & tmp & t
      next
      getHex = hexstr
    end function

    public function getOct(t)
      dim tmp,octstr,binstr
      binstr = adostream.read()
      for i = 1 to lenB(binstr)
        tmp = (ascB(midB(binstr,i,1)))
        if len(tmp) = 2 then tmp = "0" & tmp
        if len(tmp) = 1 then tmp = "00" & tmp
        octstr = octstr & tmp & t
      next
      getOct = octstr
    end function

  end class

使用方法,很简单,代码如下:

  set f = new bin2txt
  f.open server.mappath("sms/1.jpg")
  response.write f.getHex()

彩信添加桢也添加玩函数

'addpage
'pid:帧编号
'showtime:帧展示时间
function addpage(pid,showtime,ttype,tfile,ptype,pfile,mtype,mfile)
  addpage = "&d" & pid & "=" & showtime
  if ttype <> "" and ptype <> "" then
    f.open server.mappath(tfile)
    addpage = addpage & "&tt" & pid & "=" & ttype &_
                        "&tv" & pid & "=" & f.getHex()
  end if
  if ptype <> "" and ptype <> "" then
    f.open server.mappath(ptype)
    addpage = addpage & "&pt" & pid & "=" & ptype &_
            "&pv" & pid & "=" & f.getHex()
  end if
  if mtype <> "" and mtype <> "" then
    f.open server.mappath(mtype)
    addpage = addpage & "&mt" & pid & "=" & mtype &_
            "&mv" & pid & "=" & f.getHex()
  end if
end function

set f = new bin2txt
f.open server.mappath("sms/title.txt")
sendstr = "id=***&pwd=***&subject=" & f.getHex()
sendstr = sendstr & addpage(1,5,"txt","sms/1.txt","jpg","sms/1.jpg","","")
sendstr = sendstr & addpage(2,5,"txt","sms/2.txt","jpg","sms/2.jpg","","")
response.write openApi("http://118.144.76.79:8080/mmsServer/sendMms",sendstr)
标签: ,