存档
1.下载&安装
到http://www.miaoqiyuan.cn/products/webzip.rar,保存为webzip.rar以供备用。
2.压缩
将webzip.rar中的webzip.asp、webzip.asp.webzip解压到要压缩的目录。在浏览器中访问[hostname]/[保存路径]/webzip.asp打开本工具,点击压缩,稍等片刻,即可打包完毕。
3.上传
将webzip.asp、webzip.asp.webzip通过FTP或在线文件管理系统上传到您的站点目录。
4.解压
在浏览器中访问[hostname]/[保存路径]/webzip.asp,选择解压。稍等片刻,您的整个站点将会在服务服务器上解压完毕。
至此,您的整个站点即可正常使用了。
[Debug]
1.ADODB.Stream读取asp文件时,如果文件结尾为%>,则%后的>会被忽略掉,现在本人暂未解决这个问题,用户可以在以%>结尾的asp文件,请在后边添加一个空格或换行符,恢复后程序即可正常使用。
2.如果您在使用中发现出现某些问题,可直接致邮:mqycn@126.com
猫七原创ASP压缩解压系统-WEBZip,原理即遍历当前目录的所有文件和文件夹,将结果保存到MDB数据库中。现在已经实现了ASP无需任何插件,仅用Access数据库。
全部代码如下:
<%
Server.ScriptTimeout=9999
Response.Buffer=false
Dim WEBZip_Path,WEBZip_Date,WEBZip_CMD,WEBZip_File
Dim WEBZip_FSO,WebZip_Conn,WEBZip_Rs,WEBZip_ADOStrem
‘压缩相关
‘================================================================
Function findFiles(p)
savePath(p)
for each s in p.subfolders
findFiles(s)
next
for each f in p.files
saveFile(f)
next
End Function
Function savePath(p)
If trim(replace(p,WEBZip_Path,""))="" Then Exit Function
RunSqlOne("insert into [p]([p_na],[p_pa],[p_cn])values(‘"&p.name&"’,'"&replace(p,WEBZip_Path,"")&"’,"&p.subfolders.count&")")
echo "找到路径:"&p
End Function
Function saveFile(f)
If instr(f,WEBZip_File)>0 Then Exit Function
RunSqlOne("insert into [f]([f_na],[f_pa],[f_sz])values(‘"&f.name&"’,'"&replace(f,WEBZip_Path,"")&"’,"&f.size&")")
SaveFileContent(replace(f,WEBZip_Path,""))
echo "压缩文件:"&f
End Function
‘写入文件内容
Function SaveFileContent(f)
fl=WEBZip_FSO.getfile(Server.Mappath(f))
WEBZip_Rs.Open "select * from [f] where [f_pa]=’"&f&"’",WEBZip_Conn,3,2
With WEBZip_ADOStrem
.Type = 1
.Open
.LoadFromFile fl
WEBZip_Rs("f_co") = .Read
.Close
End [...]
给华众的Other业务添加一个续费提醒,新注册业务的提醒
华众程序的用户,应该有很多人用过Other类型的产品。但是Other产品有一个缺点,那就是会员新注业务和续费业务没有提醒。这样就增大了该类产品的维护成本(时间)。今天我给大家带来一种解决方案。
我们以ot2为例,在ot2lst中添加字段肯定是不可取的方案,我的方案是添加一个表。malst,字段设置如下:
ma_id 自动编号
ma_otid 对应的ot2list.s_id
ma_otstr ot2,如果改成ot1,ma_otid就是ot1lst.s_id
ma_lastdate 到期日期+1天
加表的好处如下:无需修改任何子平台,主平台只需修改后台的1个文件。
原理如下:
1.新注册业务,ma_lastdate字段为空,我们处理后,值变成了到期日期+1天
2.续费业务,到期日期比原来有所增加,但是ma_lastdate字段并未变化,所以查询到期日期待处理申请业务</a>
<a class=commonface href=”ot2_lst.asp?querytype=176″>待处理续费业务</a>
处理日期的程序:
< %
's_exptme 业务到期日期
'sid 业务ID
set rs=server.createobject("ADODB.recordset")
rs.open "select * from malst where ma_otstr='ot2' and ma_otid="&sid,conn,3,2
if rs.eof then
rs.addnew
rs("ma_otstr")="ot2"
rs("ma_otid")=sid
rs("ma_lastdate")=s_exptme+1
else
rs("ma_lastdate")=s_exptme+1
end if
rs.update
rs.close
set rs=nothing
%>
如果other产品有产品,请用以下代码升级。
‘Name:addLastManager.vbs
‘Desc:给所有ot型业务添加lastmanager记录
‘Auth:猫七(Miaoqiyuan.cn)
set conn=createobject(“ADODB.connection”)
conn.open “Provider=SQLOLEDB.1;Persist Security Info=False;User ID=hzhost7;Password=********;Initial Catalog=hzhost7;Data Source=********”
set rs=conn.execute(“select * from ot2lst where s_id>10000000″)
do while not rs.eof
if conn.execute(“select * from malst where ma_otstr=’ot2′ and ma_otid=”&rs(“s_id”)).eof [...]
前几天写过一篇巧用404.php解决Wordpress耗资源的问题,给Wordpress加个缓存功能(http://www.miaoqiyuan.cn/p/wordpress-haoziyuan-wordpress-cache)中提到了PHP缓存的方法,总感觉不是很方便,现在我又写了一个新的。
< ?php
class cache404{
public $K,$P;
public function __construct($URI,$P='blog',$Par='./cache/'){
$this->U = $URI;
$this->K = md5($URI);
$this->P = $P;
$this->Par = $Par;
$this->E = ‘.tmp_miaoqiyuan’;
$this->F = $this->Par . $this->P . ‘/’ . $this->K . $this->E;
}
public function getCache(){
if(!!($fp=@fopen($this->F,’r'))){
$html=fread($fp,102400);
}else{
$html=file_get_contents($this->U);
$this->addIndex();
$fp=fopen($this->F,’w');
fwrite($fp,$html);
}
fclose($fp);
return $html;
}
public function noCache(){
$html=file_get_contents($this->U);
$fp=fopen($this->F,’w');
fwrite($fp,$html);
fclose($fp);
return $html;
}
public function flushCache(){
unlink($this->F);
}
public function addIndex(){
$fpidx=fopen($this->Par . $this->P . ‘.rtf’,'a’);
fwrite($fpidx,$this->K . ‘ ‘ .$this->U);
fclose($fpidx);
}
}
?>
用的时候很简单
require_once(‘./inc/404cache.php’);
$Cache=new cache404($URI,$Path);
#echo $Cache->noCache();
echo $Cache->getCache();
< ?php
require_once('./inc/404cache.php');
$q=explode("/",$URI=substr(($qs = strtolower($_SERVER['QUERY_STRING'])),strpos($qs, ':80')+4));
$URI="/".$URI;
switch($q[0]){
case 'test':
#/test -> /seo_test/test.asp
if(preg_match(‘/^\/test(\/)?$/’,$URI)){
$URI=’http:’.'//’.$_SERVER['SERVER_NAME'].’/seo_test/test.asp’;
}
#/test/[a-z]\.html -> /seo_test/test.asp?key=$1
else [...]
刚开始搭建博客的时候,看中了wordpress的功能强大,经过两年的不懈努力,我的小博已经从pr0到pr4(最近降到pr3),有的时候每日pv竟然能到3万,这时idc那边就提醒我好资源了。自己购买了台西数的VPS,配置好后,cpu也是居高不下,首页竟然要4秒钟才能打开。当时考虑到seo,路径使用了http://www.miaoqiyuan.cn/p/wordpress-plus-chc(注意,不是文件夹)的模式,生成静态,路径就变了http://www.miaoqiyuan.cn/p/wordpress-plus-chc/。第一,我不想耗资源,第二,我不想改变路径。
我博客的现在的路径是怎样实现的呢?这个问题请看我以前的一篇文章WordPress无Rewrite用cos-html-cache实现静态化(http://www.miaoqiyuan.cn/p/wordpress-plus-chc)。既然一切皆由404.php起,那么现在就从404.php找切入点,比如在404.php上加个缓存。声明:本文由苗启源发表在他的博客,一切思想皆为苗启源原创,转帖请注明出处。
这个换成怎样加呢?改动源程序也不现实,而且文件太多,太麻烦。这时我想到了前几天写的一篇文章Python 之 XML与文本操作(http://www.miaoqiyuan.cn/p/python-xml-file),在那篇文章中,也是使用了缓存,比如请求http://www.miaoqiyuan.cn/products/,因为没有用到数据库,把请求过的网址记录到一个文本文件,少了还好说,多了就。。。最好的办吧就是把每个URL地址返回的内容保存到MD5(URL)的文件中,如果读取的时候该文件存在,说明已经读取过了,有缓存。python源码请见Python 之 XML与文本操作(http://www.miaoqiyuan.cn/p/python-xml-file)。
这样就好办了,直接按以前说的那种方法。404.php返回的请求路径,我没给md5下,如果存在,就直接读取,不存在,执行程序,然后保存到缓存文件中。下面给出404.php的代码,如果觉得本文对您有所帮助,请Ctrl+D收藏我的博客地址,我最近准备写一个php的缓存类哦。
< ?php
$qs = $_SERVER['QUERY_STRING'];
$_SERVER['REQUEST_URI'] = substr($qs, strpos($qs, ':80')+3);
$CacheStr = md5($_SERVER['REQUEST_URI']);
if(!$fp=@fopen("./404cache/".$CacheStr.".tmp","r")){
$getHtml=file_get_contents("http://www.miaoqiyuan.cn/index.php".$_SERVER['REQUEST_URI']);
$fp=fopen("./404cache/".$CacheStr.".tmp","w");
fwrite($fp,$getHtml);
echo $getHtml;
}
echo fread($fp,1100000);
?>
基本功能都实现了。不过更新是个问题,还有缓存数据,我会分别用Mysql数据库,XML文件,文本文件分别存取,关于速率我还要进一步进行测试。文本文件的存储缓存的一个致命的缺点就是最后更新时间,缓存的有效时间不好控制。如果用xml或数据库,这个问题就简单了。好了,现在时间太晚了,就此结笔(键盘)。
PushWeb,应该算是我自造的一个词,Push发送,PushWeb则是把采集到的数据发送到站点的一个方案,临时使用vbscript脚本编写。那有的朋友可能会说CMS后台之类的,或者采集软件直接发上来不更好吗?原因如下:
CMS后台,来回复制好麻烦,而且容易出错。复制一篇两篇还可以,如果1000,10000呢?
采集软件发送,这个呢?如果信息都是采集的,按原来的列表顺序原封不动的发上来,恐怕。。。。而且在采集软件了并不是很方便的控制。
PushWeb的好处,可以同时发送数据到同一台服务器上的多个站点。为什么不用asp?因为一般iis站点,我习惯每个站点权限独立,假如pushWeb拥有所有站点的权限,安全性可能会降低。而且同时查询较多数据时,可能占用cpu过多,而影响web站点,而wscript可以通过累了sleep一下。另外后期准备为站点加些计划任务(比如自动生成,现在还是Beta0.1,仅供发布信息),这样只需要一个进程就可以了。
实现方法:
‘pushWeb beta0.1
‘刷新时间
const pushWeb_flush_Time=10000
‘数据库路径
const pushWeb_dbPath=”D:\WebDesign\Products\pushWeb\pushWebDB.mdb”
function pushWeb()
dim conn,rs,push_id,push_webid,push_sql
dim web_db,web_name
dim push_Arr,push_str
set conn=createobject(“ADODB.connection”)
conn.open “provider=microsoft.jet.oledb.4.0;data source=”&pushWeb_dbPath
set rs=conn.execute(“select push_id,push_webid,push_sql from push”)
if rs.eof then
push_id=0
wscript.echo “没有更新,”&pushWeb_flush_Time/1000&”秒后再检查…”
else
push_id=rs(0)
push_webid=rs(1)
push_sql=rs(2)
end if
rs.close
set rs=nothing
if push_id0 then
conn.execute(“delete from push where push_id=”&push_id)
set rs=conn.execute(“select web_name,web_db from web where web_id=”&push_webid)
if not rs.eof then
web_name=rs(0)
web_db=rs(1)
else
wscript.echo “错误的任务请求,”&pushWeb_flush_Time/1000&”秒后再检查…”
end if
rs.close
set rs=nothing
conn.close
if web_db”" [...]