在线
客服

在线客服
尊敬的客户,我们24小时竭诚为您服务 公司总机: 0755-83312037 (32条线)

客服
热线

0755-83312037 (32条线)
7*24小时客服服务热线

?

关注
微信

关注官方微信
TOP

返回
顶部

  • 11

    2020-05
    Photoshop入门技巧:16个PS经验技巧

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">一个设计师的PS经验技巧及设计心得。</font> </td> </tr></tbody></table> <p>1.Alt/Ctrl+delete 填充前景色和背景色同样适用于形状图层和文字图层;</p> <p>2.设置网格线间隔为64px,子网格数为32px,然后对齐网格设计,有利从rentia设备精确转到标准设备;</p> <p>3.Ctrl+Enter或者小键盘的Enter快速退出文字编辑状态;</p> <p>4.对于某一图层的 图层样式,颜色叠加混合模式设为色相,渐变叠加混合模式设为明度,可以更方便的调节渐变;</p> <p>a.可以先为整个项目设置好统一的渐变风格(相同的明度变化)</p> <p style="TEXT-ALIGN: center"><a class="bPic" href="/files/allimg/130320/1041110.jpg" jquery1363746356468="5"><img style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; BORDER-LEFT-STYLE: none; PADDING-LEFT: 0px; WIDTH: 600px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; HEIGHT: auto; BORDER-RIGHT-STYLE: none; PADDING-TOP: 0px" border="0" alt="一个设计师的PS经验技巧及设计心得,破洛洛" src="http://www.webjx.com/files/allimg/130320/1041110.jpg" width="782" height="355"></a></p> <p>b.然后为不同功能的控件施加不同的颜色</p> <p style="TEXT-ALIGN: center"><a class="bPic" href="/files/allimg/130320/1041111.jpg" jquery1363746356468="6"><img style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; BORDER-LEFT-STYLE: none; PADDING-LEFT: 0px; WIDTH: 600px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; HEIGHT: auto; BORDER-RIGHT-STYLE: none; PADDING-TOP: 0px" border="0" alt="一个设计师的PS经验技巧及设计心得,破洛洛" src="http://www.webjx.com/files/allimg/130320/1041111.jpg" width="888" height="459"></a></p> <p>5.使用内发光可以增加更为精细的纹理效果</p> <p style="TEXT-ALIGN: center"><a class="bPic" href="/files/allimg/130320/1041112.png" jquery1363746356468="7"><img style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; BORDER-LEFT-STYLE: none; PADDING-LEFT: 0px; WIDTH: 600px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; HEIGHT: auto; BORDER-RIGHT-STYLE: none; PADDING-TOP: 0px" border="0" alt="一个设计师的PS经验技巧及设计心得,破洛洛" src="http://www.webjx.com/files/allimg/130320/1041112.png" width="891" height="480"></a></p> <p>6.使用径向渐变的时候可以加点内发光表示强调;</p> <p>7.图层样式里,投影的距离设为2px,投影 大小为1px和2px会产生同样的投影效果;</p> <p>8.PS CS6版本中,视图(View)〉显示(Show)〉智能参考线(Smart Guides)处可打开智能参考线 ;</p> <p>9.Bulk Rename Utility可以批量重命名文件,比如说给统一加上@2x;</p> <p>10.Alt+点击图层组前的小三角,其子图层组和自动折叠或者展开;</p> <p>11.锁定透明度,给图层上色;</p> <p>12.添加投影或者外发光,可以减少弧形锯齿;</p> <p>13.如果倾斜老是产生锯齿,试试-33.6度;</p> <p>14.这里可以取消掉每次复制图层 都会出现的&#8211;副本;</p> <p style="TEXT-ALIGN: center"><img style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; BORDER-LEFT-STYLE: none; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; PADDING-TOP: 0px" border="0" alt="一个设计师的PS经验技巧及设计心得,破洛洛" src="http://www.webjx.com/files/allimg/130320/1041113.png" width="357" height="440"></p> <p>Expand New Effects 的意思是 为图层添加图层样式,或者滤镜效果时,图层属性面板会展开,有时会很长(如下图)而影响操作,所以可以选择取消。</p> <p style="TEXT-ALIGN: center"><img style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; BORDER-LEFT-STYLE: none; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; PADDING-TOP: 0px" border="0" alt="一个设计师的PS经验技巧及设计心得,破洛洛" src="http://www.webjx.com/files/allimg/130320/1041114.jpg" width="236" height="248"></p> <p>15.Ctrl+H 隐藏所有;Ctrl +;隐藏参考线;Ctrl+“ 隐藏网格;Ctrl+Shift+H 仅隐藏路径;</p> <p>16.做出选区的同时按住空格键,可同时移动选区</p>

    Read more +
  • 13

    2019-04
    ASP视频教程:制作关于我们和联系我们页面

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">ASP视频教程:制作关于我们和联系我们页面.</font> </td> </tr></tbody></table> <p>大家在初学ASP程序的时候,我们经常第一个任务就是配置环境!在这里根据网页教学网站长的经验,有时克隆版的XP系统有时是安装不了IIS的!前面我们已经讲解了<a href="http://www.webjx.com/asp/2009-11-29/18261.html"><font color="#006da3">ASP视频教程:制作在线订购页面</font></a>,本讲主要讲述制作关于我们和联系我们页面。大家请看视频教程。</p> <p align="center"><object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" height="450" width="600" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param value="15875" name="_cx"> <param value="11906" name="_cy"> <param value="" name="FlashVars"> <param value="/videoedu/dwsqlasp/28.swf" name="Movie"> <param value="/videoedu/dwsqlasp/28.swf" name="Src"> <param value="Window" name="WMode"> <param value="0" name="Play"> <param value="-1" name="Loop"> <param value="High" name="Quality"> <param value="" name="SAlign"> <param value="-1" name="Menu"> <param value="" name="Base"> <param value="" name="AllowScriptAccess"> <param value="ShowAll" name="Scale"> <param value="0" name="DeviceFont"> <param value="0" name="EmbedMovie"> <param value="" name="BGColor"> <param value="" name="SWRemote"> <param value="" name="MovieData"> <param value="1" name="SeamlessTabbing"> <param value="0" name="Profile"> <param value="" name="ProfileAddress"> <param value="0" name="ProfilePort"> <param value="all" name="AllowNetworking"> <param value="false" name="AllowFullScreen"></object></p>

    Read more +
  • 13

    2019-04
    ASP视频教程:后台功能的一些完善

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">ASP视频教程:后台功能的一些完善.</font> </td> </tr></tbody></table> <p>大家在初学ASP程序的时候,我们经常第一个任务就是配置环境!在这里根据网页教学网站长的经验,有时克隆版的XP系统有时是安装不了IIS的!前面我们已经讲解了<a href="http://www.webjx.com/asp/2009-11-29/18262.html"><font color="#006da3">ASP视频教程:制作关于我们和联系我们页面</font></a>,本讲主要讲述后台功能的一些完善。大家请看视频教程。</p> <p align="center"><object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" height="450" width="600" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param value="15875" name="_cx"> <param value="11906" name="_cy"> <param value="" name="FlashVars"> <param value="/videoedu/dwsqlasp/29.swf" name="Movie"> <param value="/videoedu/dwsqlasp/29.swf" name="Src"> <param value="Window" name="WMode"> <param value="0" name="Play"> <param value="-1" name="Loop"> <param value="High" name="Quality"> <param value="" name="SAlign"> <param value="-1" name="Menu"> <param value="" name="Base"> <param value="" name="AllowScriptAccess"> <param value="ShowAll" name="Scale"> <param value="0" name="DeviceFont"> <param value="0" name="EmbedMovie"> <param value="" name="BGColor"> <param value="" name="SWRemote"> <param value="" name="MovieData"> <param value="1" name="SeamlessTabbing"> <param value="0" name="Profile"> <param value="" name="ProfileAddress"> <param value="0" name="ProfilePort"> <param value="all" name="AllowNetworking"> <param value="false" name="AllowFullScreen"></object></p>

    Read more +
  • 13

    2019-04
    ASP视频教程:后台页面加入限制访问和禁用缓存功能

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">ASP视频教程:后台页面加入限制访问和禁用缓存功能.</font> </td> </tr></tbody></table> <p>大家在初学ASP程序的时候,我们经常第一个任务就是配置环境!在这里根据网页教学网站长的经验,有时克隆版的XP系统有时是安装不了IIS的!前面我们已经讲解了<a href="http://www.webjx.com/asp/2009-11-29/18263.html"><font color="#006da3">ASP视频教程:后台功能的一些完善</font></a>,本讲主要讲述后台页面加入限制访问和禁用缓存功能。大家请看视频教程。</p> <p align="center"><object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" height="450" width="600" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param value="15875" name="_cx"> <param value="11906" name="_cy"> <param value="" name="FlashVars"> <param value="/videoedu/dwsqlasp/30.swf" name="Movie"> <param value="/videoedu/dwsqlasp/30.swf" name="Src"> <param value="Window" name="WMode"> <param value="0" name="Play"> <param value="-1" name="Loop"> <param value="High" name="Quality"> <param value="" name="SAlign"> <param value="-1" name="Menu"> <param value="" name="Base"> <param value="" name="AllowScriptAccess"> <param value="ShowAll" name="Scale"> <param value="0" name="DeviceFont"> <param value="0" name="EmbedMovie"> <param value="" name="BGColor"> <param value="" name="SWRemote"> <param value="" name="MovieData"> <param value="1" name="SeamlessTabbing"> <param value="0" name="Profile"> <param value="" name="ProfileAddress"> <param value="0" name="ProfilePort"> <param value="all" name="AllowNetworking"> <param value="false" name="AllowFullScreen"></object></p>

    Read more +
  • 13

    2019-04
    ASP视频教程:制作网站前台首页

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">ASP视频教程:制作前台首页。</font> </td> </tr></tbody></table> <p>大家在初学ASP程序的时候,我们经常第一个任务就是配置环境!在这里根据网页教学网站长的经验,有时克隆版的XP系统有时是安装不了IIS的!前面我们已经讲解了<a href="http://www.webjx.com/asp/2009-11-29/18264.html"><font color="#006da3">ASP视频教程:后台页面加入限制访问和禁用缓存功能</font></a>,本讲主要讲述制作前台首页。大家请看视频教程。</p> <p align="center"><object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" height="450" width="600" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param value="15875" name="_cx"> <param value="11906" name="_cy"> <param value="" name="FlashVars"> <param value="/videoedu/dwsqlasp/31.swf" name="Movie"> <param value="/videoedu/dwsqlasp/31.swf" name="Src"> <param value="Window" name="WMode"> <param value="0" name="Play"> <param value="-1" name="Loop"> <param value="High" name="Quality"> <param value="" name="SAlign"> <param value="-1" name="Menu"> <param value="" name="Base"> <param value="" name="AllowScriptAccess"> <param value="ShowAll" name="Scale"> <param value="0" name="DeviceFont"> <param value="0" name="EmbedMovie"> <param value="" name="BGColor"> <param value="" name="SWRemote"> <param value="" name="MovieData"> <param value="1" name="SeamlessTabbing"> <param value="0" name="Profile"> <param value="" name="ProfileAddress"> <param value="0" name="ProfilePort"> <param value="all" name="AllowNetworking"> <param value="false" name="AllowFullScreen"></object></p>

    Read more +
  • 13

    2019-04
    ASP视频教程:备份和还原SQL Server 2000数据库

    WebjxCom提示:ASP视频教程:备份和还原SQL Server 2000数据库.大家在初学ASP程序的时候,我们经常第一个任务就是配置环境!在这里根据网页教学网站长的经验,有时克隆版的XP系统有时是安装不了IIS的!前面我们已经讲解了ASP视频教程:制作网站前台首页,本讲主要讲述备份和还原SQL Server 2000数据库。大家请看视频教程。

    Read more +
  • 13

    2019-04
    ASP实例教程:asp无限级显示分类代码

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">asp无限级分类加js收缩伸展功能代码.</font> </td> </tr></tbody></table> 为了方便使用分类,我定义了一个分类表category,里面字段是<br>id(自动编号)&#160; cat_name(分类名) parent_id(父ID,对应本表ID) cat_order(顺序) is_show(是否显示) &#160;u_id(这个用来区别是新闻分类,还是产品分类,还是其他分类),为了方便,我将这些分类全部放在这张表中。<br>在给客户添加分类的时候,结果有太多的分类,本来前台显示的时候,将它们全部显示出来了,好长。客户提出修改意见,要求将它们改成点击大分类,才可以将其子分类显示出来,并且每个分类下面还有一条虚线,并且大分类前面有个图片加号,展开后要变成减号。<br>&lt;script&gt;<br>function fd(id,num)<br>{<br>&#160;t=$("c"+id+"_1").style.display;<br>&#160;<br>&#160;if(t=="none")<br>&#160;{<br>&#160;&#160; t1="block";<br>&#160;&#160; t2="images/fll_34.gif";<br>&#160;}<br>&#160;else <br>&#160;{<br>&#160;&#160;t1="none";&#160;<br>&#160;&#160;t2="images/fll_34.gif";<br>&#160;}<br>&#160;for(i=1;i&lt;=num;i++)<br>&#160;{<br>&#160;&#160;$("c"+id+"_"+i).style.display=t1;<br>&#160;&#160;$("d_"+id).src=t2;&#160;&#160;<br>&#160;}<br>}<br>function $(id)<br>{<br>&#160;return document.getElementById(id);<br>}<br>&lt;/script&gt;<br>这是asp无限级显示分类代码,并给这些分类加上id<br><br>&lt;%<br>'功能:asp无限级显示分类+js显示与隐藏<br>'参数:parent_id为父ID,stype为新闻,产品,文章大分类<br>'原创文章,转载请保留些信息,谢谢<br>function cat111(parent_id,stype)<br>set rs1&#160;=server.createobject("adodb.recordset")<br>sql="select cat_name,cat_id,parent_id from category where parent_id="&amp;parent_id&amp;" and u_id="&amp;stype&amp;" and is_show=1 order by cat_order asc"<br>set rs1=conn.execute(sql)<br>If rs1.eof Then<br>Else&#160;<br>if(depath&gt;2) then<br>&#160;display2="none"&#160;&#160;&#160;&#160;&#160;<br>else<br>&#160;display2="block"&#160;<br>end if&#160;&#160;<br>dim j<br>j=1<br>do while not rs1.eof&#160;<br>&#160;cat_name1 = rs1("cat_name")<br>&#160;cat_id1 = rs1("cat_id")&#160;&#160;<br>&#160;parent_id1=rs1("parent_id")&#160;<br>&#160;'******************下面是你要显示的******************'&#160;<br>&#160;m9=0<br>&#160;sql2="select count(cat_id) as t from category where parent_id="&amp;cat_id1&amp;" and u_id="&amp;stype&amp;""&#160;&#160;&#160;&#160;<br>&#160;set rs2=server.createobject("adodb.recordset")<br>&#160;set rs2=conn.execute(sql2)&#160;<br>&#160;if not rs2.eof then<br>&#160;&#160;&#160; m9=rs2("t")<br>&#160;else<br>&#160;&#160;m9=0&#160;&#160;<br>&#160;end if&#160;<br>&#160;rs2.close<br>&#160;&#160;<br>&#160;if(depath&lt;=2) then&#160;&#160;<br>&#160;&#160;mgif="images/-.gif"<br>&#160;&#160;a="block"<br>&#160;else<br>&#160;&#160;if(m9&gt;0) then&#160;<br>&#160;&#160;mgif="images/+.gif"&#160;<br>&#160;&#160;else<br>&#160;&#160;mgif="images/-.gif"<br>&#160;&#160;end if<br>&#160;&#160;if(depath=4) then<br>&#160;&#160;&#160;a="block"<br>&#160;&#160;else&#160;&#160;<br>&#160;&#160;&#160;a="none"<br>&#160;&#160;end if<br>&#160;end if&#160;&#160;<br>&#160;<br>&#160;<br>&#160;catstr=catstr &amp; "&lt;tr id=""c"&amp;parent_id&amp;"_"&amp;j&amp;""" style=""display:"&amp;a&amp;"""&gt;&lt;td width=""25"" align=""center"" valign=""middle"" class=""dotted_class""&gt;&lt;img src="""&amp;mgif&amp;""" width=""12"" height=""11"" id=""d_"&amp;cat_id1&amp;"""&gt;&lt;/td&gt;&lt;td class=""dotted_class leftcatcss""&gt;"<br>&#160;if(m9&gt;0) then<br>&#160;&#160;catstr=catstr&amp;"&lt;a href=""javascript:void(0);"" _fcksavedurl="""javascript:void(0);""" _fcksavedurl="""javascript:void(0);""" onclick=""fd("&amp;cat_id1&amp;","&amp;m9&amp;")""&gt;"&#160;&amp;vbnewline<br>&#160;else<br>&#160;&#160;catstr=catstr&amp;"&lt;a href=""products.asp?id="&amp;cat_id1&amp;""" target=""_blank""&gt;"&amp;vbnewline<br>&#160;end if<br>&#160;for i=1 to depath<br>&#160;&#160; catstr=catstr&amp;"&amp;nbsp;"<br>&#160;Next<br>&#160;catstr=catstr&amp;cat_name1&amp;"&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;"&amp;vbnewline<br>&#160;m9=0<br>&#160;&#160;&#160;&#160;&#160;<br>&#160;sql2="select cat_name,cat_id from category where parent_id="&amp;parent_id1&amp;" and u_id="&amp;stype&amp;" order by cat_order asc"&#160;&#160;&#160;&#160;<br>&#160;set rs2=server.createobject("adodb.recordset")<br>&#160;set rs2=conn.execute(sql2)<br>&#160;if not rs2.eof then<br>&#160;&#160;&#160; depath=depath+4&#160; <br>&#160;&#160;&#160; call cat111(cat_id1,stype)<br>&#160;end if<br>&#160;rs2.close&#160;<br>&#160;set rs2=nothing&#160;<br>&#160;depath=depath-4&#160;<br>&#160;'******************上面是你要显示的******************'<br>&#160;j=j+1<br>rs1.movenext<br>loop<br>End If<br>rs1.close<br>set rs1=nothing<br>end Function<br>%&gt;<br>在使用这个函数之前加上<br>catstr=""<br>然后再call,下面的虚线加在css中的dotted_class里面,这样就搞定了。<br>注意:这里得到的是一个表格的行,要和其他行放在一起,不要加到td里面去了。

    Read more +
  • 13

    2019-04
    IIS无法启动错误的几种情况汇总

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">IIS无法启动、500错误综合解决方案.</font> </td> </tr></tbody></table> <p><span style="COLOR: #008000">1、重新设置IIS的IWAM账号密码和IUSR密码。(管理工具&#8212;〉计算机管理&#8212;〉本地用户和组&#8212;〉用户)<br>2、同步IIS metabase中IWAM_MYSERVER的密码,在CMD中:c:\inetpub\adminscripts&gt;adsutil set w3svc/wamuserpass “yourpassword”<br>3、同步COM+应用程序所用的IWAM_MYSERVER密码,在CMD中:c:\inetpub\adminscripts&gt;cscript synciwam.vbs -v</span></p> <p>如果最后出现Error:80110414错误<br>组件服务-&gt;计算机-&gt;我的电脑-&gt;COM+应用程序-&gt;IIS Out-Of-Process Pooled Applications-&gt;属性-&gt;标识。输入刚才设置的密码,确定退出,然后再次执行cscript synciwam.vbs -v</p> <p><strong>意外情况一:</strong>运行-&gt;cmd-&gt;输入net start msdtc,如果出现了该服务不能启动的错误提示。</p> <p>删除注册表中的键:<br>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC<br>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC<br>HKEY_CLASSES_ROOT\CID<br>停止MSDTC服务:net stop msdtc<br>卸载MSDTC服务:msdtc -uninstall<br>重新安装MSDTC服务:msdtc -install<br>重启电脑<br>启动该服务:net start msdtc</p> <p><strong>意外情况二:</strong>IIS出现The specified module could not be found解决方法(记得在IE的高级选项去掉“显示友好http 错误信息”)</p> <p>iis网站属性-&gt;目录安全性-&gt;匿名访问和身份验证控制<br>去掉允许iis控制密码</p> <p><strong>意外情况三:</strong>无法展开’COM+应用程序’</p> <p>MS DTC日志文件被误删了,cmd输入msdtc -resetlog重新创建日志文件即可</p> <p><strong>意外情况四:</strong>‘COM+ 应用程序中’展开后找不到IIS Out-Of-Process Pooled Applications</p> <p>输入cd %windir%/system32/inetsrv<br>输入rundll32 wamreg.dll, CreateIISPackage<br>注意:必须准确键入’CreateIISPackage’它区分大小写<br>输入regsvr32 asptxn.dll<br>关闭并重新打开’组件服务’</p>

    Read more +
  • 13

    2019-04
    ASP实例代码:asp操作Excel类

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">ASP实例代码:asp操作Excel类.</font> </td> </tr></tbody></table> <p><strong>asp操作Excel类</strong>:</p> <p><span class="code">&lt;%<br>'*******************************************************************<br>'使用说明<br>'Dim a<br>'Set a=new CreateExcel<br>'a.SavePath="x" '保存路径<br>'a.SheetName="工作簿名称"&#160; &#160;&#160;&#160;&#160;&#160;'多个工作表 a.SheetName=array("工作簿名称一","工作簿名称二")<br>'a.SheetTitle="表名称" &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'可以为空&#160;&#160;多个工作表 a.SheetName=array("表名称一","表名称二")<br>'a.Data =d '二维数组 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'多个工作表 array(b,c) b与c为二维数组<br>'Dim rs<br>'Set rs=server.CreateObject("Adodb.RecordSet")<br>'rs.open "Select id, classid, className from [class] ",conn, 1, 1<br>'a.AddDBData rs, "字段名一,字段名二", "工作簿名称", "表名称", &#160;&#160;&#160;&#160;true&#160; &#160; 'true自动获取表字段名<br>'a.AddData c, true , "工作簿名称", "表名称"&#160; &#160; 'c二维数组&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;true&#160;&#160;第一行是否为标题行<br>'a.AddtData e, "Sheet1"&#160; &#160;'按模板生成&#160;&#160;c=array(array("AA1", "内容"), array("AA2", "内容2"))<br>'a.Create()<br>'a.UsedTime&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;生成时间,毫秒数<br>'a.SavePath&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;保存路径<br>'Set a=nothing<br>'设置COM组件的操作权限。在命令行键入“DCOMCNFG”,则进入COM组件配置界面,选择MicrosoftExcel后点击属性按钮,将三个单选项一律选择自定义,编辑中将Everyone加入所有权限<br>'*******************************************************************<br>Class CreateExcel <br>&#160;&#160;&#160;&#160;Private CreateType_<br>&#160;&#160;&#160;&#160;Private savePath_<br>&#160;&#160;&#160;&#160;Private readPath_<br>&#160;&#160;&#160;&#160;Private AuthorStr&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Rem 设置作者<br>&#160;&#160;&#160;&#160;Private VersionStr&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Rem 设置版本<br>&#160;&#160;&#160;&#160;Private SystemStr&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Rem 设置系统名称<br>&#160;&#160;&#160;&#160;Private SheetName_ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Rem 设置表名<br>&#160;&#160;&#160;&#160;Private SheetTitle_ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Rem 设置标题<br>&#160;&#160;&#160;&#160;Private ExcelData &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Rem 设置表数据<br>&#160;&#160;&#160;&#160;Private ExcelApp &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Rem Excel.Application<br>&#160;&#160;&#160;&#160;Private ExcelBook<br>&#160;&#160;&#160;&#160;Private ExcelSheets<br>&#160;&#160;&#160;&#160;Private UsedTime_&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Rem 使用的时间<br>&#160;&#160;&#160;&#160;Public TitleFirstLine&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Rem 首行是否标题<br>&#160;&#160;&#160;&#160;Private Sub Class_Initialize()<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Server.ScriptTimeOut = 99999<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;UsedTime_ = Timer<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SystemStr&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;=&#160;&#160;&#160;&#160;"Lc00_CreateExcelServer"<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;AuthorStr&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;=&#160;&#160;&#160;&#160;"Surnfu&#160;&#160;surnfu@126.com&#160;&#160;31333716"<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;VersionStr&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;=&#160;&#160;&#160;&#160;"1.0"<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if not IsObjInstalled("Excel.Application") then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;InErr("服务器未安装Excel.Application控件")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set ExcelApp = createObject("Excel.Application")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExcelApp.DisplayAlerts = false<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExcelApp.Application.Visible = false<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CreateType_ = 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;readPath_ = null<br>&#160;&#160;&#160;&#160;End Sub <br><br>&#160;&#160;&#160;&#160;Private Sub Class_Terminate()<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExcelApp.Quit<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;If Isobject(ExcelSheets) &#160;&#160;&#160;&#160;Then Set ExcelSheets&#160;&#160;&#160;&#160;=&#160;&#160;&#160;&#160;Nothing<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;If Isobject(ExcelBook) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Then Set ExcelBook&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;=&#160;&#160;&#160;&#160;Nothing<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;If Isobject(ExcelApp) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Then Set ExcelApp&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;=&#160;&#160;&#160;&#160;Nothing<br>&#160;&#160;&#160;&#160;End Sub <br><br>&#160;&#160;&#160;&#160;Public Property Let ReadPath(ByVal Val)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;If Instr(Val, ":\")&lt;&gt;0 Then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;readPath_ = Trim(Val)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;readPath_=Server.MapPath(Trim(Val))<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;End Property<br><br>&#160;&#160;&#160;&#160;Public Property Let SavePath(ByVal Val)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;If Instr(Val, ":\")&lt;&gt;0 Then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;savePath_ = Trim(Val)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;savePath_=Server.MapPath(Trim(Val))<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;End Property<br>&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;Public Property Let CreateType(ByVal Val)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if Val &lt;&gt; 1 and Val &lt;&gt; 2 then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CreateType_ = 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CreateType_ = Val<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;End Property<br>&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;Public Property Let Data(ByVal Val)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if not isArray(Val) then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;InErr("表数据设置有误")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExcelData = Val<br>&#160;&#160;&#160;&#160;End Property<br>&#160;&#160;&#160;&#160;Public Property Get SavePath()<br>&#160;&#160;&#160;&#160;SavePath = savePath_<br>&#160;&#160;&#160;&#160;End Property<br>&#160;&#160;&#160;&#160;Public Property Get UsedTime()<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;UsedTime = UsedTime_<br>&#160;&#160;&#160;&#160;End Property<br>&#160;&#160;&#160;&#160;Public Property Let SheetName(ByVal Val)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if not isArray(Val) then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if Val = "" then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;InErr("表名设置有误")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TitleFirstLine = true<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ReDim TitleFirstLine(Ubound(Val))<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim ik_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;For ik_ = 0 to Ubound(Val)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TitleFirstLine(ik_) = true<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Next<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SheetName_ = Val<br>&#160;&#160;&#160;&#160;End Property<br>&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;Public Property Let SheetTitle(ByVal Val)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if not isArray(Val) then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if Val = "" then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;InErr("表标题设置有误")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SheetTitle_ = Val<br>&#160;&#160;&#160;&#160;End Property<br>&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;Rem 检查数据<br>&#160;&#160;&#160;&#160;Private Sub CheckData()<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if savePath_ = "" then InErr("保存路径不能为空")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if not isArray(SheetName_) then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if SheetName_ = "" then InErr("表名不能为空")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if CreateType_ = 2 then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if not isArray(ExcelData) then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;InErr("数据载入错误,或者未载入")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Exit Sub<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if isArray(SheetName_) then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if not isArray(SheetTitle_) then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if SheetTitle_ &lt;&gt; "" then InErr("表标题设置有误,与表名不对应")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if not IsArray(ExcelData) then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;InErr("表数据载入有误")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if isArray(SheetName_) then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if GetArrayDim(ExcelData) &lt;&gt; 1 then InErr("表数据载入有误,数据格式错误,维度应该为一")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if GetArrayDim(ExcelData) &lt;&gt; 2 then InErr("表数据载入有误,数据格式错误,维度应该为二")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;End Sub<br>&#160;&#160;&#160;&#160;Rem 生成Excel<br>&#160;&#160;&#160;&#160;Public Function Create()<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Call CheckData()<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if not isnull(readPath_) then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExcelApp.WorkBooks.Open(readPath_) <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExcelApp.WorkBooks.add<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set ExcelBook = ExcelApp.ActiveWorkBook<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set ExcelSheets = ExcelBook.Worksheets<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if CreateType_ = 2 then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim ih_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;For ih_ = 0 to Ubound(ExcelData)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Call SetSheets(ExcelData(ih_), ih_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Next<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExcelBook.SaveAs savePath_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;UsedTime_ = FormatNumber((Timer - UsedTime_)*1000, 3)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Exit Function<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if IsArray(SheetName_) then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim ik_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;For ik_ = 0 to Ubound(ExcelData)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Call CreateSheets(ExcelData(ik_), ik_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Next<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Call CreateSheets(ExcelData, -1)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExcelBook.SaveAs savePath_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;UsedTime_ = FormatNumber((Timer - UsedTime_)*1000, 3)<br>&#160;&#160;&#160;&#160;End Function <br>&#160;&#160;&#160;&#160;Private Sub CreateSheets(ByVal Data_, DataId_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim Spreadsheet<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim tempSheetTitle<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim tempTitleFirstLine<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if DataId_&lt;&gt;-1 then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if DataId_ &gt; ExcelSheets.Count - 1 then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExcelSheets.Add()<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set Spreadsheet = ExcelBook.Sheets(1)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set Spreadsheet = ExcelBook.Sheets(DataId_ + 1)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if isArray(SheetTitle_) then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tempSheetTitle = SheetTitle_(DataId_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tempSheetTitle = ""<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tempTitleFirstLine = TitleFirstLine(DataId_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Spreadsheet.Name = SheetName_(DataId_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set Spreadsheet = ExcelBook.Sheets(1)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Spreadsheet.Name = SheetName_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tempSheetTitle = SheetTitle_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tempTitleFirstLine = TitleFirstLine<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim Line_ : Line_ = 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim RowNum_ : RowNum_ = Ubound(Data_, 1) + 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim LastCols_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if tempSheetTitle &lt;&gt; "" then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'Spreadsheet.Columns(1).ShrinkToFit=true '设定是否自动适应表格单元大小(单元格宽不变)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LastCols_ = getColName(Ubound(Data_, 2) + 1)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with Spreadsheet.Cells(1, 1)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.value = tempSheetTitle<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'设置Excel表里的字体 <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.Font.Bold = True '单元格字体加粗<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.Font.Italic = False '单元格字体倾斜<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.Font.Size = 20 '设置单元格字号<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.font.name="宋体" '设置单元格字体<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'.font.ColorIndex=2 '设置单元格文字的颜色,颜色可以查询,2为白色<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;End with<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with Spreadsheet.Range("A1:"&amp; LastCols_ &amp;"1")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.merge '合并单元格(单元区域)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'.Interior.ColorIndex = 1 '设计单元络背景色<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.HorizontalAlignment = 3 '居中<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;End with<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Line_ = 2<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;RowNum_ = RowNum_ + 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim iRow_, iCol_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim dRow_, dCol_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim tempLastRange : tempLastRange = getColName(Ubound(Data_, 2)+1) &amp; (RowNum_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim BeginRow : BeginRow = 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if tempSheetTitle &lt;&gt; "" then BeginRow = BeginRow + 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if tempTitleFirstLine = true then BeginRow = BeginRow + 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if BeginRow=1 then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with Spreadsheet.Range("A1:"&amp; tempLastRange)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.Borders.LineStyle = 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.BorderAround -4119, -4138 '设置外框<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.NumberFormatLocal = "@"&#160; &#160;'文本格式<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.Font.Bold = False <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.Font.Italic = False <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.Font.Size = 10<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.ShrinkToFit=true <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end with<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with Spreadsheet.Range("A1:"&amp; tempLastRange)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.Borders.LineStyle = 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.BorderAround -4119, -4138<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.ShrinkToFit=true <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end with<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with Spreadsheet.Range("A"&amp; BeginRow &amp;":"&amp; tempLastRange)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.NumberFormatLocal = "@" <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.Font.Bold = False <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.Font.Italic = False <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.Font.Size = 10<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end with<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if tempTitleFirstLine = true then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BeginRow = 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if tempSheetTitle &lt;&gt; "" then BeginRow = BeginRow + 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with Spreadsheet.Range("A"&amp; BeginRow &amp;":"&amp; getColName(Ubound(Data_, 2)+1) &amp; (BeginRow))<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.NumberFormatLocal = "@"<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.Font.Bold = True <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.Font.Italic = False <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.Font.Size = 12<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.Interior.ColorIndex = 37<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.HorizontalAlignment = 3 '居中<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.font.ColorIndex=2<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end with<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;For iRow_ = Line_ To RowNum_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;For iCol_ = 1 To (Ubound(Data_, 2) + 1)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;dCol_ = iCol_ - 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if tempSheetTitle &lt;&gt; "" then dRow_ = iRow_ - 2 else dRow_ = iRow_ - 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;If not IsNull(Data_(dRow_, dCol_)) then <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;with Spreadsheet.Cells(iRow_, iCol_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;.Value = Data_(dRow_, dCol_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;End with<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;End If <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Next<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Next<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set Spreadsheet = Nothing<br>&#160;&#160;&#160;&#160;End Sub <br>&#160;&#160;&#160;&#160;Rem 测试组件是否已经安装<br>&#160;&#160;&#160;&#160;Private Function IsObjInstalled(strClassString)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;On Error Resume Next<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;IsObjInstalled = False<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Err = 0<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim xTestObj<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Set xTestObj = Server.CreateObject(strClassString)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;If 0 = Err Then IsObjInstalled = True<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Set xTestObj = Nothing<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Err = 0<br>&#160;&#160;&#160;&#160;End Function<br>&#160;&#160;&#160;&#160;Rem 取得数组维数<br>&#160;&#160;&#160;&#160;Private Function GetArrayDim(ByVal arr)&#160; &#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetArrayDim = Null&#160; &#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim i_, temp&#160; &#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;If IsArray(arr) Then&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;For i_ = 1 To 60&#160; &#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;On Error Resume Next&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;temp = UBound(arr, i_)&#160; &#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;If Err.Number &lt;&gt; 0 Then&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetArrayDim = i_ - 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Err.Clear <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Exit Function&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;End If&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Next&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetArrayDim = i_&#160; &#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;End If&#160;&#160;<br>&#160;&#160;&#160;&#160;End Function <br>&#160;&#160;&#160;&#160;Private Function GetNumFormatLocal(DataType)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Select Case DataType<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Case "Currency":<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetNumFormatLocal = "¥#,##0.00_);(¥#,##0.00)"<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Case "Time":<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetNumFormatLocal = "[$-F800]dddd, mmmm dd, yyyy"<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Case "Char":<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetNumFormatLocal = "@"<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Case "Common":<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetNumFormatLocal = "G/通用格式"<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Case "Number":<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetNumFormatLocal = "#,##0.00_"<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Case else :<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;GetNumFormatLocal = "@"<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;End Select<br>&#160;&#160;&#160;&#160;End Function<br>&#160;&#160;&#160;&#160;Public Sub AddDBData(ByVal RsFlied, ByVal FliedTitle, ByVal tempSheetName_, ByVal tempSheetTitle_, DBTitle)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if RsFlied.Eof then Exit Sub<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim colNum_ : colNum_ = RsFlied.fields.count<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim Rownum_ : Rownum_ = RsFlied.RecordCount<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim ArrFliedTitle<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if DBTitle = true then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;FliedTitle = ""<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim ig_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;For ig_=0 to colNum_ - 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;FliedTitle = FliedTitle &amp; RsFlied.fields.item(ig_).name<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if ig_ &lt;&gt; colNum_ - 1 then FliedTitle = FliedTitle &amp;","<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Next<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if FliedTitle&lt;&gt;"" then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Rownum_ = Rownum_ + 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ArrFliedTitle = Split(FliedTitle, ",")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if Ubound(ArrFliedTitle) &lt;&gt; colNum_ - 1&#160;&#160;then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;InErr("获取数据库表有误,列数不符")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim tempData : ReDim tempData(Rownum_ - 1, colNum_ - 1)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim ix_, iy_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim iz<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if FliedTitle&lt;&gt;"" then iz = Rownum_ - 2&#160;&#160;else iz = Rownum_ - 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;For ix_ = 0 To iz<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;For iy_ = 0 To colNum_ - 1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if FliedTitle&lt;&gt;"" then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if ix_=0 then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tempData(ix_, iy_) = ArrFliedTitle(iy_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tempData(ix_ + 1, iy_) = RsFlied(iy_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tempData(ix_ + 1, iy_) = RsFlied(iy_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tempData(ix_, iy_) = RsFlied(iy_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Next<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;RsFlied.MoveNext<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Next<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim tempFirstLine <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if FliedTitle&lt;&gt;"" then tempFirstLine = true else tempFirstLine = false<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Call AddData(tempData, tempFirstLine, tempSheetName_, tempSheetTitle_)<br>&#160;&#160;&#160;&#160;End Sub<br>&#160;&#160;&#160;&#160;Public Sub AddData(ByVal tempDate_, ByVal tempFirstLine_, ByVal tempSheetName_, ByVal tempSheetTitle_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if not isArray(ExcelData) then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExcelData = tempDate_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TitleFirstLine = tempFirstLine_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SheetName_ = tempSheetName_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SheetTitle_ = tempSheetTitle_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if GetArrayDim(ExcelData) = 1 then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim tempArrLen : tempArrLen = Ubound(ExcelData)+1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ReDim Preserve ExcelData(tempArrLen)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExcelData(tempArrLen) = tempDate_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ReDim Preserve TitleFirstLine(tempArrLen)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TitleFirstLine(tempArrLen) = tempFirstLine_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ReDim Preserve SheetName_(tempArrLen)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SheetName_(tempArrLen) = tempSheetName_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ReDim Preserve SheetTitle_(tempArrLen)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SheetTitle_(tempArrLen) = tempSheetTitle_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim tempOldData : tempOldData = ExcelData<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExcelData = Array(tempOldData, tempDate_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TitleFirstLine = Array(TitleFirstLine, tempFirstLine_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SheetName_ = Array(SheetName_, tempSheetName_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SheetTitle_ = Array(SheetTitle_, tempSheetTitle_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;End Sub<br>&#160;&#160;&#160;&#160;Rem 模板增加数据方法<br>&#160;&#160;&#160;&#160;Public Sub AddtData(ByVal tempDate_, ByVal tempSheetName_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CreateType_ = 2<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if not isArray(ExcelData) then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExcelData = Array(tempDate_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SheetName_ = Array(tempSheetName_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim tempArrLen : tempArrLen = Ubound(ExcelData)+1<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ReDim Preserve ExcelData(tempArrLen)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ExcelData(tempArrLen) = tempDate_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ReDim Preserve SheetName_(tempArrLen)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;SheetName_(tempArrLen) = tempSheetName_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;End if<br>&#160;&#160;&#160;&#160;End Sub<br>&#160;&#160;&#160;&#160;Private Sub SetSheets(ByVal Data_, DataId_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim Spreadsheet<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set Spreadsheet = ExcelBook.Sheets(SheetName_(DataId_))<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Spreadsheet.Activate<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim ix_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;For ix_ =0 To Ubound(Data_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if not isArray(Data_(ix_)) then InErr("表数据载入有误,数据格式错误")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if Ubound(Data_(ix_)) &lt;&gt; 1 then InErr("表数据载入有误,数据格式错误")<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Spreadsheet.Range(Data_(ix_)(0)).value = Data_(ix_)(1)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Next<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set Spreadsheet = Nothing<br>&#160;&#160;&#160;&#160;End Sub<br>&#160;&#160;&#160;&#160;Public Function GetTime(msec_)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim ReTime_ : ReTime_=""<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if msec_ &lt; 1000 then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ReTime_ = msec_ &amp;"MS"<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim second_<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;second_ = (msec_ \ 1000)<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (msec_ mod 1000)&lt;&gt;0 then<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;msec_ = (msec_ mod 1000) &amp;"毫秒"<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;msec_ = ""<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Dim n_, aryTime(2), aryTimeunit(2)<br>&#160;&#160;&#160;&#160;

    Read more +
  • 13

    2019-04
    web开发人员必须知道的Unicode与字符集相关知识

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">web开发人员必须知道的Unicode与字符集相关知识.</font> </td> </tr></tbody></table> <p>原文地址<a href="http://www.joelonsoftware.com/articles/Unicode.html" target="_blank"><font color="#000000">:</font>http://www.joelonsoftware.com/articles/Unicode.html</a><br>作者:Joel Spolsky <br>译文:<a href="http://local.joelonsoftware.com/wiki/Talk:Chinese_(Simplified" target="_blank">http://local.joelonsoftware.com/wiki/Talk:Chinese_(Simplified</a>)</p> <p>&#160;</p> <h3><span class="mw-headline">每个程序员都绝对必须知道的关于字符集和Unicode的那点儿事(别找借口!)</span></h3> <h3> <span class="mw-headline"></span><span class="mw-headline">Unicode与字符集 </span> </h3> <p>&#160;</p> <p>你曾经是否觉得HTML中的"Content-Type"标签充满神秘?虽然你知道这个东西必须出现在HTML中,但对于它到底干吗你可能一无所知。 </p> <p>你是否曾经收到过来自你保加利亚朋友的邮件,到处都是"????&#160;??????&#160;???&#160;????"? </p> <p>我很失望,因为我发现许多软件开发人员到现在为止都还没有对字符集、编码、Unicode有一个清晰的认识,这是个事实。几年前,在测试FogBUGZ项目时,忽然想看看它能不能接收用日文写的电子邮件。这个世界上会有人用日文写电子邮件?我不知道。测试结果很糟糕。我仔细看了用来解析MIME (Multipurpose Internet Mail Extenisons)格式的邮件所用的ActiveX控件,发现了它在字符集上面做的蠢事。于是我们不得不重新写一段代码,先消除Active控件的错误,然后再完成正确的转换。类似的事情在我研究另一个商业库的时候同样发生了,这个库关于字符编码这部分的实现简直糟透了。我找到它的开发者,把存在问题的包指给他,他却表示对于此无能为力。像很多程序员一样,他只希望这个缺陷会被人们遗忘。 </p> <p>事实并非如他所愿。因为我发现,像PHP这么流行的网页开发工具,竟然在实现上也完全忽略了多种字符编码的存在(译者注:这篇文章写于2003年,现在的 PHP可能已经纠正了这个问题吧),盲目地只使用8个比特来表示字符,于是开发优秀的国际化的Web应用程序变成了一场梦。我想说,受够了。 </p> <p>我申明:在2003年,如果你是一个程序员,但你却对字符、字符集、编码和Unicode一无所知,那么你别让我抓到你。如果落在我手里,我会让你待在潜水艇里剥六个月的洋葱,我发誓。 </p> <p>另外,还有一件事: </p> <strong><center>这个一点都不难。</center></strong> <p>在这篇文章里,我所讲的是每一个工作中的程序员都应该知道的知识。所有以为"纯文本 = ASCII码 = 一个字符就是8比特"的人不单单错了,而且错得离谱。如果你仍然坚持使用这种方式编写程序,那么你比一个不相信细菌的存在医生好不到哪里去。所以在你读完这篇文章以前,不要再写半行代码。 </p> <p>在我开始之前,必须说明白,如果你已经了解了国际化,可能你会觉得这篇文章过于简单。没错,我的的确确是想架一座最短的桥,让任何人都可以理解发生了什么事,懂得如何写出可以在非英文语言环境是正常工作的代码。还得指出,字符处理仅仅是软件国际化中的一小部分,但一口吃不成个胖子,今天我们只看什么是字符集。</p> <p></p>

    Read more +
  • 13

    2019-04
    HTTP响应的头文件影响文件下载

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">设置HTTP文件下载四要诀.</font> </td> </tr></tbody></table> <p>网站不仅仅只包含网页,有时你需要提供用户能下载的文件。将你的文件放到服务器上并在网页中附上链接只是第一步,你还需意识到HTTP响应的头文件影响文件下载。</p> <p><strong>提示一:强制下载并控制文件名</strong></p> <p>在HTML中提供一个下载链接很简单:</p> <p><span><span class="code"><font face="NSimsun"><code>&lt;</code><code>a</code></font> <font face="NSimsun"><code>href</code><code>=</code><code>"http://download.httpwatch.com/httpwatch.exe"</code><code>&gt;Download&lt;</code><code>a</code><code>&gt;</code></font></span></span></p> <p><span><span><code></code></span></span>对于浏览器不知道如何呈现的二进制文件,如安装程序和ZIP文件,这工作的很好。这会出现一个对话框,允许用户将文件存储到本地。</p> <p align="center"><img border="0" alt="IE File Save Dialog" src="http://www.webjx.com/files/allimg/100402/0717040.jpg" width="413" height="282"></p> <p>问题在于,如果文件能呈现自己,不同的浏览器行为就不一样。例如,如果你链接一个纯文本文件,浏览器会打开它,不会提示保存下载。</p> <p align="center"><img border="0" alt="Plain Text in IE" src="http://www.webjx.com/files/allimg/100402/0717041.jpg" width="510" height="416"></p> <p>你可以加入以下响应头文件强制使用文件下载对话框。</p> <pre>Content-Disposition: attachment; filename=&lt;file name.ext&gt;</pre> <p>头部还可以控制默认的文件名,这可以帮助你方便的生成像getfile.aspx一样的内容,但你要提供一个更有意义的文件名给用户。</p> <p>对于静态内容,您可以在您的Web服务器手动配置额外的头文件。例如,下面是在IIS中设置:</p> <p align="center"><img border="0" alt="content_disposition_header" src="http://www.webjx.com/files/allimg/100402/0717042.jpg" width="481" height="456"></p> <p>为动态生成的内容,您需要在网页的服务器端代码中添加此头部。</p> <p>加入了头部之后,浏览器总是提示用户下载该文件:</p> <p align="center"><img border="0" src="http://www.webjx.com/files/allimg/100402/0717043.jpg" width="510" height="416" alt=""></p> <p></p>

    Read more +
  • 13

    2019-04
    开发者程序员的5个不同层次

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">本文来自国外程序员所写,里面的内容比较专业,基本涵盖所有程序员所需要的知识结构,对于想要进阶提供自己的开发者来说值得参考。</font> </td> </tr></tbody></table> <p>提示:本文来自国外程序员所写,里面的内容比较专业,基本涵盖所有程序员所需要的知识结构,对于想要进阶提供自己的开发者来说值得参考。</p> <p>注意:每个层次的知识都是渐增的,位于层次n,也蕴涵了你需了解所有低于层次n的知识。</p> <p>计算机科学 Computer Science</p> <p><img height="538" alt="" src="http://www.webjx.com/files/allimg/100403/1341180.jpg" width="523" border="0">&#160;</p> <p>软件工程 Software Engineering</p> <p><img height="379" alt="" src="http://www.webjx.com/files/allimg/100403/1341181.jpg" width="523" border="0">&#160;</p> <p>程序设计 Programming</p> <p><img height="549" alt="" src="http://www.webjx.com/files/allimg/100403/1341182.jpg" width="522" border="0">&#160;</p> <p><img height="515" alt="" src="http://www.webjx.com/files/allimg/100403/1341183.jpg" width="519" border="0">&#160;</p> <p><img height="428" alt="" src="http://www.webjx.com/files/allimg/100403/1341184.jpg" width="522" border="0">&#160;</p> <p><img height="476" alt="" src="http://www.webjx.com/files/allimg/100403/1341185.jpg" width="521" border="0">&#160;</p> <p>经验 Experience </p> <p><img height="401" alt="" src="http://www.webjx.com/files/allimg/100403/1341186.jpg" width="522" border="0">&#160;</p> <p>学识 Knowledge</p> <p><img height="572" alt="" src="http://www.webjx.com/files/allimg/100403/1341187.jpg" width="518" border="0">&#160;</p> <p><img height="432" alt="" src="http://www.webjx.com/files/allimg/100403/1341188.jpg" width="521" border="0">&#160;</p> <p>【CSDN编者按】</p> <p>上述图书中,第一级对应的英文为Unleashed series, 21 days series, 24 hour series, dummies series...其实也有很多不错的书,Unleashed即图灵所出揭秘系列,好书不少;即使是21天、24小时、dummies系列,从入门来说也基本上都算好书。大家在选书时,首先对国内原创的大套书要特别持谨慎态度,越大型的丛书越要小心,因为没有人对这样浩大的工程真正负责。而国外的书原著总体上水平都有较好的保证,主要看译者是否负责。</p> <p>图书第二级中《别让我思考》对应英文为《Don't Make me Think》,中文版名字应该是《点石成金》。</p> <p>图书第三级中《代码珠玑》,中文版名应为《编程珠玑》(两卷:卷1链接,卷2链接)。</p>

    Read more +
  • 13

    2019-04
    Ewebeditor和fckeditork编辑器单引号过滤

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">Ewebeditor及fckeditork单引号的问题.</font> </td> </tr></tbody></table> <p>Ewebeditor及fckeditork,90%的网站都是采用这两种编辑器作为产品或者内容的说明部分的编辑窗口,近日,一客户的外贸站点基本上快完工了,因客户产品分类多,故而让客户自己在后台添加产品,但是客户反映,在后台添加产品时,如果产品说明内容太过复杂的话,产品怎么也添加不入数据库中。</p> <p>当时,我们也好生郁闷,这到底怎么回事,我们亲自测试后台添加任意的产品或者文字都能成功,偏偏他就不行,在网站搜索了相关的如“Ewebeditor 不能添加到数据库”,似乎找到了一点答案,因Ewebeditor自身没对单引号过滤,导致了添加不到数据库的问题。于是乎,我们把编辑器换成了fckeditork,可是还是不行,那是Ewebeditor及fckeditork自带的不完善导致的吗?为什么一个简单的单引号会引发不能添加到数据库呢,想到这里,我们想到了分析下入库代码,我们采用的是SQL=insert into product(title,content) values(' " &amp;request("title")&amp; "' ,' "&amp;request("content")&amp; " ' )的写法,于是我们找到客户当时COPY进编辑器里的内容,发现,果然这内容中包括有单引号,原来,正是由于客户提交到编辑器里的内容中含有单引号,导致我们的SQL语句变化了,相当于原来是SQL=insert into product(title,content) values('内容' ,'内容' )变成了SQL=insert into product(title,content) values(' 内容' ,' 内容'' ),我们细看就知道,就因为这content里多了个单引号,SQL语句发生的严重的写法错误,但是,我们也奇怪,既然他写法错误,为什么SQL语句不给出错误提示呢,竟然也会提示操作成功,想到这里,我们想到了2003年那几年,普遍的小黑客喜欢用的' or' =' or' 的后台入侵法,是乎正是利用了SQL执行时,没过滤单引号的BUG,导致SQL怎么执行,结果都返回真,呵呵,没想到,原以为写程序尽量图个简单明了,也是个错啊。好了,问题找到了,以后,凡是SQL入库前,我们都把字段过滤后再传值,就不会再出这样的问题了,下面是一个非常完善的SQL安全过滤函数,大家直接拿去就可以调用了。</p> <p> </p> <table style="BORDER-BOTTOM: #0099cc 1px solid; BORDER-LEFT: #0099cc 1px solid; TABLE-LAYOUT: fixed; BORDER-TOP: #0099cc 1px solid; BORDER-RIGHT: #0099cc 1px solid" border="0" cellspacing="0" cellpadding="6" width="95%" align="center"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#ddedfb"><font color="#000000">Function HTMLEncode(Str)<br>&#160;If Isnull(Str) Then<br>&#160;&#160;&#160;&#160; HTMLEncode = ""<br>&#160;&#160;&#160;&#160; Exit Function <br>&#160;End If<br>&#160;Str = Replace(Str,Chr(0),"", 1, -1, 1)<br>&#160;Str = Replace(Str, """", "&amp;quot;", 1, -1, 1)<br>&#160;Str = Replace(Str,"&lt;","&amp;lt;", 1, -1, 1)<br>&#160;Str = Replace(Str,"&gt;","&amp;gt;", 1, -1, 1) <br>&#160;Str = Replace(Str, "script", "&amp;#115;cript", 1, -1, 0)<br>&#160;Str = Replace(Str, "SCRIPT", "&amp;#083;CRIPT", 1, -1, 0)<br>&#160;Str = Replace(Str, "Script", "&amp;#083;cript", 1, -1, 0)<br>&#160;Str = Replace(Str, "script", "&amp;#083;cript", 1, -1, 1)<br>&#160;Str = Replace(Str, "object", "&amp;#111;bject", 1, -1, 0)<br>&#160;Str = Replace(Str, "OBJECT", "&amp;#079;BJECT", 1, -1, 0)<br>&#160;Str = Replace(Str, "Object", "&amp;#079;bject", 1, -1, 0)<br>&#160;Str = Replace(Str, "object", "&amp;#079;bject", 1, -1, 1)<br>&#160;Str = Replace(Str, "applet", "&amp;#097;pplet", 1, -1, 0)<br>&#160;Str = Replace(Str, "APPLET", "&amp;#065;PPLET", 1, -1, 0)<br>&#160;Str = Replace(Str, "Applet", "&amp;#065;pplet", 1, -1, 0)<br>&#160;Str = Replace(Str, "applet", "&amp;#065;pplet", 1, -1, 1)<br>&#160;Str = Replace(Str, "[", "&amp;#091;")<br>&#160;Str = Replace(Str, "]", "&amp;#093;")<br>&#160;Str = Replace(Str, """", "", 1, -1, 1)<br>&#160;Str = Replace(Str, "=", "&amp;#061;", 1, -1, 1)<br>&#160;Str = Replace(Str, "'", "''", 1, -1, 1)<br>&#160;Str = Replace(Str, "select", "sel&amp;#101;ct", 1, -1, 1)<br>&#160;Str = Replace(Str, "execute", "&amp;#101xecute", 1, -1, 1)<br>&#160;Str = Replace(Str, "exec", "&amp;#101xec", 1, -1, 1)<br>&#160;Str = Replace(Str, "join", "jo&amp;#105;n", 1, -1, 1)<br>&#160;Str = Replace(Str, "union", "un&amp;#105;on", 1, -1, 1)<br>&#160;Str = Replace(Str, "where", "wh&amp;#101;re", 1, -1, 1)<br>&#160;Str = Replace(Str, "insert", "ins&amp;#101;rt", 1, -1, 1)<br>&#160;Str = Replace(Str, "delete", "del&amp;#101;te", 1, -1, 1)<br>&#160;Str = Replace(Str, "update", "up&amp;#100;ate", 1, -1, 1)<br>&#160;Str = Replace(Str, "like", "lik&amp;#101;", 1, -1, 1)<br>&#160;Str = Replace(Str, "drop", "dro&amp;#112;", 1, -1, 1)<br>&#160;Str = Replace(Str, "create", "cr&amp;#101;ate", 1, -1, 1)<br>&#160;Str = Replace(Str, "rename", "ren&amp;#097;me", 1, -1, 1)<br>&#160;Str = Replace(Str, "count", "co&amp;#117;nt", 1, -1, 1)<br>&#160;Str = Replace(Str, "chr", "c&amp;#104;r", 1, -1, 1)<br>&#160;Str = Replace(Str, "mid", "m&amp;#105;d", 1, -1, 1)<br>&#160;Str = Replace(Str, "truncate", "trunc&amp;#097;te", 1, -1, 1)<br>&#160;Str = Replace(Str, "nchar", "nch&amp;#097;r", 1, -1, 1)<br>&#160;Str = Replace(Str, "char", "ch&amp;#097;r", 1, -1, 1)<br>&#160;Str = Replace(Str, "alter", "alt&amp;#101;r", 1, -1, 1)<br>&#160;Str = Replace(Str, "cast", "ca&amp;#115;t", 1, -1, 1)<br>&#160;Str = Replace(Str, "exists", "e&amp;#120;ists", 1, -1, 1)<br>&#160;Str = Replace(Str,Chr(13),"&lt;br&gt;", 1, -1, 1)<br>&#160;HTMLEncode = Replace(Str,"'","''", 1, -1, 1)<br>End Function</font></td> </tr></tbody></table> <p>文章首发:http://www.seohf.com/seonews/view654.html 如需转载,请注明出处。</p>

    Read more +
  • 13

    2019-04
    推荐几款傻瓜型的ASP服务器软件

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">一键快速搭建ASP运行环境.</font> </td> </tr></tbody></table> <p>ASP语言建站目前应用范围还是比较广泛的,要运行ASP程序,必须安装调试ASP的环境,这里我们就需要安装Windows自带的IIS作为服务器。而IIS的安装对于非专业人士来说是件难以完成的任务,通常不知道如何着手,且安装过程繁琐,容易出错,还需要操作系统安装光盘。这里,我推荐几款傻瓜型的ASP服务器软件,比较适合初级站长。</p> <p><strong><font size="3">1.IIS自动安装程序:</font></strong></p> <p>官方网站:http://landian.cq.cn/</p> <p>一键快速安装IIS,保留了IIS原味,就是体积庞大了点。喜欢IIS的朋友可以试试,功能很全的。</p> <p><strong><font size="3">2.Aws(Ajiu AspWebServer)</font></strong></p> <p align="center"><img id="imgb" alt="" src="http://www.webjx.com/files/allimg/100421/1729400.jpg" width="510" height="410"></p> <p>官方网站:http://hi.baidu.com/swjtu</p> <p>Aws即AspWebServer的缩写,是一款功能极为强大却仅有数百KB大小的纯绿色软件,方便快速支持在线升级。拥有Aws,意味着可以摒弃IIS了! 她能几近完美的支持Asp,可以在局域网和因特网上快速建立属于自己的网站服务器,并且已经支持域名绑定,虚拟目录等功能。</p> <p>将文件(Aws.exe)放到网站的根目录下,双击运行Aws.exe,软件会自动打开网站,默认主页:default.html, index.asp, index.html等。</p> <p>温馨提示:这个软件很不错,我也一直在用。有时候,Aws可能无法正常解析ASP中的某些函数,出现500错误。</p> <p><strong><font size="3">3.NetBox</font></strong></p> <p>官方网站:http://www.netbox.cn/</p> <p>NetBox是一个全新概念的开发平台,它提供了业界最快速的用于开发 Internet 商业应用的开发和编译工具。目前已经有很久的历史了,很多站长网站源码测试工具,都是基于NetBox核心做的二次开发。</p> <p><strong><font size="3">4.小旋风ASP服务器</font></strong></p> <p align="center"><img id="imgb" alt="" src="http://www.webjx.com/files/allimg/100421/1729401.jpg" width="479" height="425"></p> <p>该软件是由残剑无敌在NETBOX核心下开发的一套强大简洁的ASPWEB服务器,使用这个软件的您完全可以抛弃体积庞大的WINNT,WIN2000服务器系统及漏洞百出的IIS了。现在你可以在任何一个系统上调试和发布您的ASP程序了。目前测试通过的操作系统为:Windows 98;Windows 98 SE;Windows ME;Windows NT+IE4;Windows 2000;Windows XP;Windows .NET Server。现在完全支持ACCESS,SQL数据库啊.操作说明 :<br><br>1.安装小旋风ASPWEB服务器2005.很简单哦。<span id="more-97"></span></p> <p>2.把您的ASP程序COPY到安装目录中的WWWROOT的目录下即可 。<br></p> <p>最后打开浏览器,在地址栏中输入:http://127.0.0.1/(或者http://localhost/)</p>

    Read more +
  • 13

    2019-04
    大龄程序员没有年轻程序员脑瓜灵活

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">大龄程序员的价值所在.</font> </td> </tr></tbody></table> <div id="content_body" class="article_content"> <p>最近我过了40岁生日。 一个朋友开玩笑的对我说:”嘿,我想这个意味着你已经老的不适合再去编程了吧!“,我表面上哈哈一笑,但心里却触动不少。 年龄歧视在我们这行里并不可笑。 就像今天用Java的兄弟沦落到这个地步一样,几年前,使用COBOL家伙被我们从心底里嘲笑其老旧的编码方式和缺乏新技术中的灵活性。<span id="more-150"></span></p> <p>如今轮到我被他们嘲笑了。 也许你也是这样。 如果目前没有,我估计这一天也会很快到来。 你还会笑的出来吗? 是的,我想会跟我一样的。</p> <p>我们这一行受年龄歧视体现在好几个方面。 大家都热衷于热门的新技术,追求以不可想象的超速度掌握这些新知识的能力,永不疲倦的加班,让产品按时发布的干劲--所有的这些都是做软件这行中年轻人的特长。 我还没说年轻的员工很便宜的事吧? 不是一般的便宜。 这个计算机专业学历需求趋势统计并没有清楚的告诉你目前年轻、廉价的劳力已经严重的过剩,那些人力经理对这部分人的感觉就像是大海一样取之不尽用之不竭。 事实上,所有的数据都证明了一个结论:近10年来求职登记计算机专业学历水平要求正在下降或至少没升过。 如果说跟以前区别不太大的话,至少根据Jeff Atwood的数据, 人才信息储备库里的人才质量是没以前好了。 当你找人开发你的新项目,而又不相信外包,那去找谁呢?</p> <p>如果你正考虑只由年轻成员组成的开发团队,那么你需要再考虑一下。 在软件业,一些关于大龄软件开发者的传言被很多人深信不疑,这多少都使大龄的、有经验的人处于一种不利的位置。 但是这些人真的很蠢,他们认真参考这个学位趋势,拒绝超过40的任何人,因为我们开起来已经老的有点傻了。 让我来一个个的揭穿这些传言。</p> <p><strong>传言:</strong><em> 大龄程序员要比年轻的昂贵,相比之下年轻的开发者更可取。</em></p> <p><strong>真相: </strong>有经验的程序员之所以被标高价的原因是,在软件企业中,员工工资是第一大成本。 这样看来,年轻就意味着便宜。 虽然没有经验的、年轻的程序员可以让你降低预算,但如果你的团队里都是这样的人,他们会让你支付的更久。 年轻的程序员没有接受过失败的教训。 <em>他们也没有足够的时间学习这种教训。</em> 想想吧,他们会在谁的项目上学习这种教训,会让谁蒙受损失? 是你。 当不能按期完成项目时你不是也要遭受损失吗? 再想想。</p> <p>是的,大龄程序员要比年轻程序员要求的薪水高。 但是,你有没有想过给他们这么高的薪水是要得到什么? 对于有经验的程序员,你实际是雇佣他们在以往失败的或成功的项目中获取的各种经验。 如果你想让他们在你的经理任期里学习这些经验教训,代价是昂贵的。 如果你花钱雇佣了一个有经验的程序员,他能确保你在以后的项目管理和软件开发过程中不会在犯那些经典的错误。 你的年度回顾图表也会漂亮的多,因为你雇佣了聪明能干的人,他们知道如果把工作漂亮的完成。</p> <p><strong>传言:</strong> 大龄程序员缺少灵活性,缺乏学习新知识的能力,因为他们脑袋里的传统知识在作怪。</p> <p><strong>真相:</strong> 相反,正式由于他们的阅历,越是有经验的程序员越是能够更迅速的,更深度的迁移到新的技术、框架和系统里。 例如,如果你学过C/C++的GUI框架,你的脑海里就会对消息传输,事件处理等概念的有了掌握,而MVC模式就是使用了这些概念来设计系统,分离表示层和后端业务处理的。 而最初你学习一个GUI框架时,除了要学习语法,实例,以及常用类库外,你还要学习这些概念性的东西。 经过了二三种或更多的GUI框架学习后,你会发现各种框架之间除了语法外都非常的相似。 你还会发现后,出现的框架已经克服了很多前辈所特有的局限性,已经不需要你再去花时间开发复杂的hack程序了。 这些深刻的见解可并不是那些新人可以拥有的。 由这些思想储备来提升的生产效率并不是你可以用什么方法直接测量到的。</p> <p><strong>传言:</strong> 大龄程序员不愿意去干那些很幸苦的开发工作<em> (编者注: 长时间的,加班加点的工作)因为他们有家庭和其他一些事情拖累,这些在年轻员工身上就不会有。</em></p> <p><strong>真相:</strong> 我认为,说熟练的程序员相比较更不愿意加班加点辛苦的工作是没错的,因为他们知道只有工作效率有问题才会将自己推到每周工作80小时的处境。 有人说是没有干劲了,但我却要请问,哪一个曾经有过这种经历的人还渴望再经历一次? 还有人说,“家庭负担”是一个因素,但这只是个表面上的假象。 高能力的、有经验的软件工程师对时间的管理是不留余地的,正是有了家庭的原因,他们才会更有动机在给予的规定的时间里把工作完成。 他们也许需要陪家人去参加舞会,去看足球比赛,但他们也会在业余时间把这些占用的时间补上,在标准的一周40小时里一心一意的工作。 好的有家室的程序员一定是一个有效的管理自己个人时间的人,否则他立刻会淹没在各种工作之中无法抽身。</p> <p><strong>传言:</strong> 大龄程序员没有年轻程序员脑瓜灵活<em>。</em></p> <p><strong>真相:</strong> 年龄的增长确实影响人的脑力,可以测试出年纪大的工作者确实要比年轻的反应速度慢一些。 可是思考敏捷只是我们的比较的一个方面而已。 思考的快并不是总是好事。 判断的正确与否呢? 有一个古老的说法:</p> <p>&#160;</p> <table style="BORDER-BOTTOM: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-RIGHT: #cccccc 1px dotted" border="0" cellspacing="0" cellpadding="6" width="95%" align="center"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"><em>正确的判断来自于经验,经验来自于错误的判断。</em></td> </tr></tbody></table> <p>&#160;</p> <p>这些老程序员见识过的、经历过的成功的、失败的案例都比年轻的多,由此可以看出,以思考速度退化为借口来拒绝大龄程序员是缺乏说服力的。 经验丰富的程序员有大量的历史可以拿来作为借鉴和参考,让你避免在现在的项目里有错误的判断。 年轻的程序员可能会有一些很好的新观点,但通常是没有经过测试和验证的。 如果团队里两种程序员组合,那会非常的有好处。</p> <p><strong>传言:</strong> <em>大龄程序员对工作感到疲倦和挑剔,所以在岗位上没有年轻人那样有干劲。</em></p> <p><strong>真相:</strong> 这种话很可能来自于一些老是被有经验的程序员批评为傻冒的人,这些有经验的程序员已经无法忍受那些愚蠢的决定在他们周围一次有一次的发生。 有经验的程序员在一公里外就能嗅出错误的气味。 他们绝对不会听你讲故事说这个产品如何在市场上不被客户接受,因为他们已经跟客户打了多年的交道,他们知道你企图用谎言来挽救你被解雇的命运。 他们绝对不会忍受,因为客户要求下月就要出产品,经理就要求他们每周工作80小时的要求,以为他们已经知道并说过至少要3个月才能完全实现客户要求的功能。</p> <p>年轻的程序员并没有经历那么多这样的处境,所以他们很少有反抗经理的错误决定的动作。 管理人员不能用他们天真的想法去要求事物。 如果你想拥有一个优秀的团队,让它生产出优秀的产品,那么允许人们将你从错误的道路拉回来,将会一次又一次的挽救你的项目。 当然,只有在你有勇气承认自己无知的情况才会这样。</p> <p>至于说热情在消失,你很难判断是岁月消磨了人的热情。 如果说是年龄的原因,那么如何解释Donald Knuth, Ward Cunningham, Bill Joy, 比尔 盖茨等成百上千的跨过了40岁门槛的人依旧没有丧失任何对这个领域的热情的呢? <em>他们没有丧失。热情就是热情。 </em>你40岁时还拥有热情,那是你真的热爱这个行业。<br>这种爱不会在一夜之间就消失的。 那些依旧沿着这些前辈的足迹前进的年轻的程序员们也许会拥有短暂的热情,也许会在这条道路的前进过程中面对困难和挑战发生动摇。</p> <p>作为总结,让我们清清楚楚的看清这些事情:年轻不是个坏事情。 <span style="TEXT-DECORATION: underline">年老也不是所有都好。</span> <strong>最重要的是,任何肚子里没有实货的程序员都不应该被雇佣,不论是年轻和年老。</strong> 保持你的团队成员年轻年老、有经验和没经验混合 &#8212; 保持队伍多样性存在,团队才能成长进步。 如果你正在招聘一些人,不要对坐在你前面的头发显花白的人置之不理。 如果他的才能能打动你,那就丢弃年龄的偏见。</p> <p>也许有一天这个人就是你。</p> </div>

    Read more +
  • 13

    2019-04
    ASP错误信息解决:IIS启用父路径的设置

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">ASP错误信息解决:IIS启用父路径的设置.</font> </td> </tr></tbody></table> <p>今天公司有个客户保修网站后台无法访问,我查看了源代码,发现ASP代码本身并没有什么问题。而且我下到本地能够访问。就是在网上不能正常连接,显示入下错误:</p> <p>Server.MapPath() 错误 'ASP 0175 : 80004005' <br>不允许的 Path 字符 <br>/0709/dqyllhsub/news/OpenDatabase.asp,行 4 <br>在 MapPath 的 Path 参数中不允许字符 '..'</p> <p>网页里面用了一个 Response.Redirect 的路径重指向,客户页面里面指向路径写的是相对路径,省略了网站域名地址。</p> <p>主要是IIS服务器没有开启父路径,修改方法:<br>在IIS中 属性-&gt;主目录-&gt;配置-&gt;选项中。把”启用父路径“前面打上勾。确认刷新。</p> <p>如果服务器提供商出于‘安全考虑不开启父路径,建议路径指向的时候写绝对路径,即完整地址 如"http://www.webjx.com/images/logo.gif"</p> <p>IIS6.0安装后默认设置是,不开启父路径。<br>----------------------------------------------<br>如果你的网站程序使用了父路径,如../conn/db.asp这样的,..表示上层目录,就一定要开启父路径,否则系统不能正常识别..父路径,网页就无法正常显示 </p> <p>&#160;</p>

    Read more +
  • 13

    2019-04
    windows 2000服务器IIS开启父路径的步骤

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">Windows 2003 IIS启动父路径.</font> </td> </tr></tbody></table> <p>“开启父路径”是在Windows 2003开始有这个概念的,之前的<a href="http://www.webjx.com/os/windows/"><u>windows</u></a> xp,<a href="http://www.webjx.com/os/windows/"><u>windows</u></a> 2000自带的iis是没有“Windows 2003”这个说法的。Windows 2003自带的IIS6.0安装后默认设置是不开启父路径的。</p> <h3>“开启父路径”主要作用:</h3> <p>“启用父路径”,ASP页面中如果使用到了include file=../header.asp 这样的代码,此项必须选上“启用父路径”,../表示上级目录下的header.asp页面,是用相对路径来表示的,如果您的IIS页面设置中的“启用父路径”没有开启的情况下,访问此页面时就会报错,因为当前的IIS设置不允许使用..方式访问父路径,您需要将这个值设定为true。启用父路径指定 ASP 页面是否允许相对于当前目录的路径(使用 ..\ 表示法)。如果设置为 true,则此属性可能会造成潜在的安全风险,因为包含路径可以访问应用程序根目录外的重要或机密的文件。如果出于安全考虑不开启父路径,建议路径指向的时候写绝对路径,即完整地址。</p> <p>如果iis没有开启“启用父路径”,往往会出现“HTTP 500 - 内部服务器错误”,例如在<a href="http://www.webjx.com/os/windows/"><u>windows</u></a> 2000服务器下运行正常的网站程序,在<a href="http://www.webjx.com/os/windows/"><u>windows</u></a> 2003下酒会出现“HTTP 500 - 内部服务器错误”</p> <h3>如何启用“开启父路径”功能</h3> <p>IIS管理器中,展开本地计算机,右键单击要配置的应用程序的开始位置目录,然后单击“属性”。单击“目录”选项卡,然后单击“配置”。单击“选项”选项卡。在“应用程序配置”部分,选择“启用父路径”复选框。单击“确定”。</p> <p>1、启动IIS,在【默认网站】上右键单击,在弹出的菜单中选择【属性】</p> <p><img style="oldpaddingtop: ; oldbordertopwidth: ; oldpaddingbottom: ; oldborderbottomwidth: ; oldpaddingright: ; oldborderrightwidth: ; oldpaddingleft: ; oldborderleftwidth: " alt="" src="http://www.webjx.com/files/allimg/100716/1425230.gif"></p> <p>2、单击【属性】菜单后,弹出如图2所示的对话框;</p> <p><img style="oldpaddingtop: ; oldbordertopwidth: ; oldpaddingbottom: ; oldborderbottomwidth: ; oldpaddingright: ; oldborderrightwidth: ; oldpaddingleft: ; oldborderleftwidth: " alt="" src="http://www.webjx.com/files/allimg/100716/1425231.gif"></p> <p>3、在图2中选择【主目录】属性页,然后单击【配置】按钮,弹出如图3所示的对话框;</p> <p><img style="oldpaddingtop: ; oldbordertopwidth: ; oldpaddingbottom: ; oldborderbottomwidth: ; oldpaddingright: ; oldborderrightwidth: ; oldpaddingleft: ; oldborderleftwidth: " alt="" src="http://www.webjx.com/files/allimg/100716/1425232.gif"></p>

    Read more +
  • 13

    2019-04
    IIS6和IIS7对静态文件gzip压缩方式

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">IIS6以及IIS7对静态文件gzip压缩方式的区别.</font> </td> </tr></tbody></table> <p>先说明下为什么要写这篇文章,以及纠结于这个“小问题”。首先开启静态文件的gzip压缩非常有利用提高网站的访问速度,并且有效减少蜘蛛爬行静态页面的time-taken,同时也不会像开启动态文件压缩一样可能会对百度蜘蛛造成200 0 64的抓取问题,所以一方面,网站速度快有利于提高用户体验,另一方面,google管理员博客在今年已经明确表示网站速度是排名的因素之一,而对于拿国外主机做百度中文站优化,time-taken不理想会导致百度蜘蛛内页抓的少,国平之前在自己博客文章网页加载速度是如何影响SEO效果的中也提到过,在固定的一段时间内蜘蛛抓取网站的总时间是固定的,那么抓取速度上去了,抓取页面数就会更多,反之则少。</p> <p>好吧,开始正文,在上篇文章《<font color="#1c3d72">蜘蛛抓取静态页面与触发gzip压缩的实验结果</font>》中的问题二,我提出了gzip静态页面的压缩版本在服务器上保存方式的猜测,在困惑了许久之后,发现导致两个主机返回gzip结果不同的最终原因是iis版本而不是我猜测的缓存文件夹设置过小</p> <p>事实上,iis7比iis6在静态压缩上有了较大的更新,在IIS6中,静态压缩是在一个不同的线程上进行的,所以在收到一个HTTP请求后,第一个发送给浏览器的HTML版本是没有压缩过的,而同时IIS6会开始使用一个不同的线程对这个文件进行压缩并且将这个压缩后的版本长期保存在压缩文件的缓存文件夹内。而在以前,也就是IIS6服务器上,在压缩完成之后凡是对该被压缩版本的静态文件的HTTP请求,IIS6都会直接从缓存文件夹中直接调用压缩后的版本并返回给浏览器。</p> <p>但是在IIS7中,压缩是在主线程上进行的,而且为了节省压缩的成本,IIS7不对所有的HTTP请求而只对哪些经常会被用户访问的静态文件进行压缩版本的长期保存,这也就是为什么我在之前第一次访问没有压缩,短期内再次访问返回的是压缩版本,但是再过几分钟访问返回的又是未压缩版本的原因。这里我们可以理解为IIS7并没有将压缩版本实际保存到缓存文件夹中,而是只在服务器内存中做了保存,或者是临时将压缩版本保存到缓存文件夹中,一会之后进行删除。</p> <p>而IIS7定义什么文件是经常访问的符合压缩标准的方法是system.webServer/serverRuntime中的以下两个属性,frequentHitThreshold和frequentHitTimePeriod 。如果IIS在frequentHitTimePeriod时间段内接收到了对某个静态文件的超过frequentHitThreshold闸值次数的访问,那么IIS7就会像IIS6一样压缩该静态文件并且将这个压缩后的版本长期保存在压缩文件的缓存文件夹内。如果用户访问网站某文件时,已经在缓存文件夹中存在该文件的缓存版本,那么IIS7是不会再判断frequentHitThreshhold这个逻辑而是直接返回压缩版本给浏览器。</p> <p>这种设置的确很蛋疼,但是微软官方给出的答复是这样有利用提高服务器性能。。。那么如果想要让IIS7能够向IIS6一样做压缩的话,有两种解决方法,当然都是修改frequentHitThreshold和frequentHitTimePeriod这两个值:</p> <p>第一种是在web.config中添加以下内容,将frequentHitThreshold调至1,将frequentHitTimePeriod调制10分钟</p> <blockquote> <p>&lt;system.webServer&gt;</p> <p>&lt;serverRuntime enabled="true"</p> <p>frequentHitThreshold="1"</p> <p>frequentHitTimePeriod="00:10:00"/&gt;</p> <p>&lt;/system.webServer&gt;</p> </blockquote> <p>第二种方法是打开%windir%\system32\inetsrv\appcmd.exe,然后再命令行界面中输入以下命令字符串,然后回车</p> <blockquote> <p>set config -section:system.webServer/serverRuntime -frequentHitThreshold:1</p> </blockquote> <p>微软官方建议比较不激进的办法是不要调低frequentHitThreshold而是提高frequentHitTimePeriod,这样对服务器性能更适中。这里要提到的是,对于拥有VPS的朋友们,建议可以手动设置,而虚拟主机用户能不能设置就得看服务商了,我就很悲剧的改不了。大家试试看吧</p>

    Read more +
  • 17

    2018-05
    IE8内部对渲染模型的判断流程

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">下面的图详细得给出了IE8内部对渲染模型的判断流程.</font> </td> </tr></tbody></table> <p>首先给出一组数据</p> <img alt="photo" src="http://www.webjx.com/files/allimg/100305/0810520.png"><br>这组数据说明了目前IE8在渲染模式下的一些比例(微软偷偷统计的?)。 <br><p>● 有19% 的站点用了严格型的标准来设计(非常好的数据,得感谢默默无闻在前线工作的页面重构同学们)</p> <p>● 有 14% 的站点用了http头和 <a href="http://msdn.microsoft.com/en-us/library/cc288325" rel="external">X-UA-Compatible</a> 把IE打回IE7的模式</p> <p>● 有 41% 的站点用了Doctype让IE8使用标准模式(这里指的是,大家常用的过渡型)</p> <p>● 很不幸还有 26% 的站点使用了Quirks 模式....</p> <br><br>下面的图详细得给出了IE8内部对渲染模型的判断流程 <img alt="photo" src="http://www.webjx.com/files/allimg/100305/0810521.png"> 更多信息请跳转这里: <a href="http://blogs.msdn.com/ie/archive/2010/03/02/how-ie8-determines-document-mode.aspx" rel="external">http://blogs.msdn.com/ie/archive/2010/03/02/how-ie8-determines-document-mode.aspx</a>

    Read more +
  • 17

    2018-05
    开源领域常用的许可协议和它们之间的区别

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">在我们所能想到的应用领域,都有开源软件存在(象 WordPress,Drupal 这些开源CMS)。然而很多人对开源许可并不了解,本文介绍开源领域常用的几种许可协议以及它们之间的区别。</font> </td> </tr></tbody></table> <p>越来越多的开发者与设计者希望将自己的产品开源,以便其他人可以在他们的代码基础上做更多事,开源社区也因此充满生机。在我们所能想到的应用领域,都有开源软件存在(象 WordPress,Drupal 这些开源CMS)。然而很多人对开源许可并不了解,本文介绍开源领域常用的几种许可协议以及它们之间的区别。</p> <p><a href="http://www.flickr.com/photos/massimobarbieri/2162544547/"><img alt="Opensourceubuntu in A Short Guide To Open-Source And Similar Licenses" src="http://www.webjx.com/files/allimg/100331/1919320.jpg" width="500" height="333" original="/files/allimg/100331/1919320.jpg"></a></p> <h3 class="subtitle">什么是许可协议?</h3> <p>什么是许可,当你为你的产品签发许可,你是在出让自己的权利,不过,你仍然拥有版权和专利(如果申请了的话),许可的目的是,向使用你产品的人提供一定的权限。</p> <p>不管产品是免费向公众分发,还是出售,制定一份许可协议非常有用,否则,对于前者,你相当于放弃了自己所有的权利,任何人都没有义务表明你的原始作者身份,对于后者,你将不得不花费比开发更多的精力用来逐个处理用户的授权问题。</p> <p>而<a href="http://en.wikipedia.org/wiki/Open-source_license">开源许可协议</a>使这些事情变得简单,开发者很容易向一个项目贡献自己的代码,它还可以保护你原始作者的身份,使你至少获得认可,开源许可协议还可以阻止其它人将某个产品据为己有。以下是开源界的 5 大许可协议。</p> <h3 class="subtitle">GNU GPL</h3> <p><a href="http://www.opensource.org/licenses/gpl-2.0.php">GNU General Public Licence</a> (GPL) 有可能是开源界最常用的许可模式。GPL 保证了所有开发者的权利,同时为使用者提供了足够的复制,分发,修改的权利:</p> <ul> <li> <strong>可自由复制</strong><br>你可以将软件复制到你的电脑,你客户的电脑,或者任何地方。复制份数没有任何限制。</li> <li> <strong>可自由分发</strong><br>在你的网站提供下载,拷贝到U盘送人,或者将源代码打印出来从窗户扔出去(环保起见,请别这样做)。</li> <li> <strong>可以用来盈利</strong><br>你可以在分发软件的时候收费,但你必须在收费前向你的客户提供该软件的 GNU GPL 许可协议,以便让他们知道,他们可以从别的渠道免费得到这份软件,以及你收费的理由。</li> <li> <strong>可自由修改</strong><br>如果你想添加或删除某个功能,没问题,如果你想在别的项目中使用部分代码,也没问题,唯一的要求是,使用了这段代码的项目也必须使用 GPL 协议。</li> </ul> <p>需要注意的是,分发的时候,需要明确提供源代码和二进制文件,另外,用于某些程序的某些协议有一些问题和限制,你可以看一下 <a href="http://www.twitter.com/PierreJoye">@PierreJoye</a> 写的 <a href="http://www.softwarefreedom.org/resources/2008/compliance-guide.html">Practical Guide to GPL Compliance</a> 一文。使用 GPL 协议,你必须在源代码代码中包含相应信息,以及协议本身。</p> <h4>GNU LGPL</h4> <p>GNU 还有另外一种协议,叫做 LGPL (<a href="http://www.opensource.org/licenses/lgpl-2.1.php">Lesser General Public Licence</a>),它对产品所保留的权利比 GPL 少,总的来说,LGPL 适合那些用于非 GPL 或非开源产品的开源类库或框架。因为 GPL 要求,使用了 GPL 代码的产品必须也使用 GPL 协议,开发者不允许将 GPL 代码用于商业产品。LGPL 绕过了这一限制。</p> <h3 class="subtitle">BSD</h3> <p>BSD 在软件分发方面的限制比别的开源协议(如 GNU GPL)要少。该协议有多种版本,最主要的版本有两个,新 BSD 协议与简单 BSD 协议,这两种协议经过修正,都和 GPL 兼容,并为开源组织所认可。</p> <p>新 BSD 协议(3条款协议)在软件分发方面,除需要包含一份版权提示和免责声明之外,没有任何限制。另外,该协议还禁止拿开发者的名义为衍生产品背书,但简单 BSD 协议删除了这一条款。</p> <h3 class="subtitle">MIT</h3> <p><a href="http://www.opensource.org/licenses/mit-license.php">MIT 协议</a>可能是几大开源协议中最宽松的一个,核心条款是:</p> <p>该软件及其相关文档对所有人免费,可以任意处置,包括使用,复制,修改,合并,发表,分发,再授权,或者销售。唯一的限制是,软件中必须包含上述版权和许可提示。</p> <p>这意味着:</p> <ul> <li>你可以自由使用,复制,修改,可以用于自己的项目。</li> <li>可以免费分发或用来盈利。</li> <li>唯一的限制是必须包含许可声明。</li> </ul> <p>MIT 协议是所有开源许可中最宽松的一个,除了必须包含许可声明外,再无任何限制。</p> <h3 class="subtitle">Apache</h3> <p>Apache 协议 2.0 和别的开源协议相比,除了为用户提供版权许可之外,还有专利许可,对于那些涉及专利内容的开发者而言,该协议最适合(<a href="http://www.howstuffworks.com/question492.htm">这里有一篇文章阐述这个问题</a>)。</p> <p>Apache 协议还有以下需要说明的地方:</p> <ul> <li> <strong>永久权利</strong><br>一旦被授权,永久拥有。</li> <li> <strong>全球范围的权利</strong><br>在一个国家获得授权,适用于所有国家。假如你在美国,许可是从印度授权的,也没有问题。</li> <li> <strong>授权免费,且无版税</strong><br>前期,后期均无任何费用。</li> <li> <strong>授权无排他性</strong><br>任何人都可以获得授权</li> <li> <strong>授权不可撤消</strong><br>一旦获得授权,没有任何人可以取消。比如,你基于该产品代码开发了衍生产品,你不用担心会在某一天被禁止使用该代码。</li> </ul> <p>分发代码方面包含一些要求,主要是,要在声明中对参与开发的人给予认可并包含一份许可协议原文。</p> <h3 class="subtitle">Creative Commons</h3> <p>Creative Commons (CC) 并非严格意义上的开源许可,它主要用于设计。Creative Commons 有多种协议,每种都提供了相应授权模式,CC 协议主要包含 4 种基本形式:</p> <ul> <li> <strong>署名权</strong><br>必须为原始作者署名,然后才可以修改,分发,复制。</li> <li> <strong>保持一致</strong><br>作品同样可以在 CC 协议基础上修改,分发,复制。</li> <li> <strong>非商业</strong><br>作品可以被修改,分发,复制,但不能用于商业用途。但商业的定义有些模糊,比如,有的人认为非商业用途指的是不能销售,有的认为是甚至不能放在有广告的网站,也有人认为非商业的意思是非盈利。</li> <li> <strong>不能衍生新作品</strong><br>你可以复制,分发,但不能修改,也不能以此为基础创作自己的作品。</li> </ul> <p>这些许可形式可以结合起来用,其中最严厉的组合是“署名,非商用,不能衍生新作品”,意味着,你可以分享作品,但不能改动或以此盈利,而且必须为原作者署名。在这种许可模式下,原始作者对作品还拥有完全的控制权,而最宽松的组合是“署名”,意味着,只要为原始作者署名了,就可以自由处置。</p> <h3 class="subtitle">延伸资源</h3> <ul> <li> <a href="http://creativecommons.org/about/licenses">Creative Commons Licenses</a><br>Creative Common 许可的官方条款与解释</li> <li> <a href="http://www.opensource.org/licenses/alphabetical">Open Source Initiative</a><br>包含各种开源协议资源</li> <li> <a href="http://developer.kde.org/documentation/licensing/licenses_summary.html">Open Source Licenses Comparison</a><br>对主流开源协议的对比</li> <li> <a href="http://openacs.org/about/licensing/open-source-licensing">Understanding Open-Source Licensing</a><br>开源协议详解</li> <li> <a href="http://blogs.zdnet.com/Burnette/?p=130">HOW TO: Pick an Open Source License</a><br>如何选择不同的开源协议</li> </ul> <p>本文国际来源:Smashing Magazine <a href="http://www.smashingmagazine.com/2010/03/24/a-short-guide-to-open-source-and-similar-licenses/">A Short Guide To Open-Source And Similar Licenses</a></p>

    Read more +
  • 17

    2018-05
    成为优秀的Web开发人员的学习步骤和学习内容

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">如果你还是一个准备入行或刚入行的菜鸟,那本文倒值得一读。要成为一名优秀的Web开发人员,没有捷径可走,10步让您成为一名优秀的 Web开发人员就是为那些还在苦苦寻找学习目标的人编写的。</font> </td> </tr></tbody></table> <p>如果你已经是一名优秀的Web开发人员,那请路过即可。如果你还是一个准备入行或刚入行的菜鸟,那本文倒值得一读。要成为一名优秀的Web开发人员,没有捷径可走,<strong>10步让您成为一名优秀的 Web开发人员</strong>就是为那些还在苦苦寻找学习目标的人编写的。</p> <h2>第一步:学好HTML</h2> <p>HTML(超文本标记语言)是网页的核心,因此你首先 应该学好它,不要害怕,HTML很容易学习的,但也很容易误用,学懂容易要学精还得费点功夫,但学好HTML是成为Web开发人员的基本条件。</p> <p>学习资源:</p> <p>HTML Dog (http://htmldog.com/)</p> <p>HTML入门指南 (http://www.w3.org/MarkUp/Guide/)</p> <p>W3C HTML学习教程 (http://www.w3schools.com/html/)<br><span id="more-2796"></span></p> <h2>第二步:学好服务器端脚本语言</h2> <p>服务器端脚本编程也是Web开发人员的基本功之一,你 只需挑选一个服务器端脚本语言,然后学好它,目前流行的服务器脚本语言有:</p> <p>PHP (http://php.net/)</p> <p>Python (http://www.python.org/)</p> <p>Ruby (http://www.ruby-lang.org/en/)</p> <h2>第三步:学好SQL</h2> <p>要构建动态页面就必须使用到数据库,但这么多数据库产 品,该如何是好呢?别担心,它们都会遵循标准的SQL原则,学习SQL的资源包括:</p> <p>W3C SQL学习教程 (http://www.w3schools.com/SQl/default.asp)</p> <p>MySQL主页 (http://www.mysql.com/)</p> <p>SQL维基百科 (http://en.wikipedia.org/wiki/SQL)</p> <h2>第四步:学好CSS</h2> <p>涉及到网页外观时,就需要学习CSS了,它可以帮你把 网页做得更美观。</p> <p>学习资源:</p> <p>HTML Dog (http://htmldog.com/)</p> <p>CSS禅意花园 (http://www.csszengarden.com/)已有中文版图书。</p> <h2>第五步:学好JavaScript</h2> <p>今天大部分Web开发人员都喜欢使用 jQuery(http://jquery.com/),学习JavaScript的基本语法,以及如何使用JavaScript编程将会提高你的技能。</p> <p>学习资源:</p> <p>webmonkey.com上的JavaScript 学习资源 (http://www.webmonkey.com/tutorial/JavaScript_Tutorial)</p> <p>W3C JavaScript学习教程 (http://www.w3schools.com/JS/default.asp)</p> <h2>第六步:学好正则表达式</h2> <p>虽然它并不像其它知识那么重要,但学习了正则表达式 后,如果使用得当将会节省你很多时间,从验证到高亮显示它够能帮到你。</p> <h2>第七步:学习一点Unix和Linux的基本知识</h2> <p>这并不是必须的,但知道一点Linux命令不会伤害到 你,或许你还不知道,大部分Web服务器都运行在Unix和Linux平台上,如果我是你,我会去学习一些基本的Linux命令的。</p> <h2>第八步:了解Web服务器</h2> <p>你不必在这上面花太多精力,但对Apache的基本配 置,.htaccess配置技巧有一些掌握的话,将来必定受益,而且这方面的知识学起来也相对容易,不会花多长时间。</p> <h2>第九步:熟悉版本控制系统的用法</h2> <p>熟悉使用一种优秀的版本控制系统将很有用处,你在实际 工作中就会发现精通一种版本控制系统是多么幸福。</p> <h2>第十步:学好Web框架</h2> <p>当你掌握了HTML,服务器端脚本语言,CSS和 JavaScript后,就应该找一个Web框架加快你的Web开发速度,使用框架可以节约你很多时间,如果你使用PHP,可选的框架有 CakePHP,CodeIgniter,Zend等,Python程序员喜欢使用Django和 webpy,Ruby程序员喜欢使用RoR。</p> <p>怎么样,从最简单的HTML到Web框架,内容还是不 少吧,要想精通这里的每一样技术,都得下苦功夫才行。</p>

    Read more +
  • 17

    2018-05
    网站开发人员常去的10个网站

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">网站开发人员常去的10个网站.</font> </td> </tr></tbody></table> <div class="section"> <p><strong>1、MySQL Format Date</strong></p> <p>MySQL Format Date 帮助你更好地使用 MySQL DATE_FORMAT 函数。只需选择通用的日期格式,然后将其更改为满足你需求的格式。MySQL DATE_FORMAT 代码将会在页面底部生成,你可以直接复制这段查询语句。</p> <p>点击访问:<a href="http://www.mysqlformatdate.com/" target="_blank">http://www.mysqlformatdate.com</a></p> <p><strong>2、Script Src</strong></p> <p>作为网站开发人员,天天一个一个站点打开查看 JavaScript 框架和库的最新版本是不是很麻烦?ScriptSrc.net 汇集了所有框架和库的最新版本,以独立页面的形式展现,只要一键点击就可以复制种子文件的引用路径。</p> <p>点击访问:<a href="http://scriptsrc.net/" target="_blank">http://scriptsrc.net</a></p> <p><strong>3、Em Chart</strong></p> <p>我并不喜欢 CSS 文件中的 em 单位,但有时候又不得不面对它。在这种情况下,Em Chart 会将 em 单位转换为像素值,让你节省时间和麻烦。</p> <p>点击访问:<a href="http://aloestudios.com/tools/emchart" target="_blank">http://aloestudios.com/tools/emchart</a></p> <p><strong>4、Twitter API Explorer</strong></p> <p>如果你在自己的应用中使用了 Twitter API,你肯定会喜欢 Twitter API Explorer。这个网站很方便的让你通过 Twitter API 进行搜索。更妙的是,该网站可以生成可直接使用的代码片段。即时生成即时获取!</p> <p>点击访问:<a href="http://twitapi.com/explore" target="_blank">http://twitapi.com/explore</a></p> <p><strong>5、Browser Sandbox</strong></p> <p>跨浏览器兼容性肯定是 Web 开发人员日常工作中所要面对的大问题。Browser Sandbox 允许在网络上运行任何 Windows 浏览器。唯一的不足是,你必须运行 Windows 系统:该应用程序不支持 Mac 和 Linux 操作系统。</p> <p>点击访问:<a href="http://spoon.net/browsers" target="_blank">http://spoon.net/browsers</a></p> <p><strong>6、PHP Forms</strong></p> <p>Web 表单是网站重要的组成部分,但创造他们也很费时。那么是否有一个可以免费快速生成表单的工具呢?PHP forms 允许你创建可扩展的、适用于大部分网站需求的表单。</p> <p>点击访问:<a href="http://www.phpform.org/" target="_blank">http://www.phpform.org</a></p> <p><strong>7、.htaccess editor</strong></p> <p>.htaccess 文件是网站(尤其是 WordPress 博客)必须具备的。不知道怎么写?没问题,只要访问这个网站,即可通过使用向导来创建 .htaccess文件。也许它并不是非常完美,但基本能满足大部分需求。</p> <p>点击访问:<a href="http://www.htaccesseditor.com/en.shtml" target="_blank">http://www.htaccesseditor.com/en.shtml</a></p> <p><strong>8、Smush it!</strong></p> <p>图片可能胜过千言万语,但同时也占用了大量带宽。图像可以通过 Photoshop 等处理软件优化,以满足网站使用。但如果你没有这些臃肿不堪的桌面软件,你也不会束手无策,<a href="http://www.mangguo.org/tag/smush.it/">Smush.it</a> 可以完全满足你。由雅虎开发者网络开发的在线图片优化工具 <a href="http://www.mangguo.org/tag/smush.it/">Smush.it</a>,能有效减少图像大小而不降低其质量。对于 WordPress 用户,更有方便强大的 <a href="http://www.mangguo.org/wp-smush-it-blog-image-lossless-compression-plugin/">WP-Smush.it 插件</a>可以使用。</p> <p>点击访问:<a href="http://developer.yahoo.com/yslow/smushit/" target="_blank">http://developer.yahoo.com/yslow/smushit/</a><br>可在线上传版本:<a href="http://www.mangguo.org/smush-it-hidden-online-image-optimizer/">http://www.mangguo.org/smush-it-hidden-online-image-optimizer/</a></p> <p><strong>9、CSS Compressor</strong></p> <p>特别是在有许多不同页面布局的网站,CSS 文件往往非常庞大,占用大量的服务器带宽。这个名为 CSS Compressor 的压缩工具,可通过去除注释、空白等不必要的字节占用以减少 CSS 文件尺寸。更妙的是,压缩等级可以随心配置以满足你的需求。</p> <p>点击访问:<a href="http://www.csscompressor.com/" target="_blank">http://www.csscompressor.com</a></p> <p><strong>10、Test everything</strong></p> <p>这个网站是必须具备的书签:正如其名,一切都可以用它来测试,例如 XHTML 和 CSS 标记、PageRank、反向链接和其他更多的测试内容。</p> <p>点击访问:<a href="http://tester.jonasjohn.de/" target="_blank">http://tester.jonasjohn.de</a></p> <p>英文原稿:<a href="http://www.catswhocode.com/blog/10-sites-developers-should-have-in-their-bookmarks" target="_blank">10 sites developers should have in their bookmarks | CatsWhoCode</a><br>翻译整理:<a href="http://www.mangguo.org/10-sites-developers-should-have-in-their-bookmarks" target="_blank">值得网站开发人员收藏的 10 个网站 | 芒果</a></p> </div> <div class="caption"> <div class="quote"> <strong>版权所有,转载请注明出处。</strong> </div> </div>

    Read more +
  • 17

    2018-05
    配置IIS服务器时需要注意的地方

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">介绍五种配置IIS服务器时需要注意的地方,把好安全关是所有网站都必须要做好的功课,如果服务器本身不安全,给网站带来的将是毁灭性的。</font> </td> </tr></tbody></table> 介绍五种<strong>配置IIS服务器时需要注意的地方</strong>,把好安全关是所有网站都必须要做好的功课,如果服务器本身不安全,给网站带来的将是毁灭性的。 <p><strong>一、操作系统的安装</strong></p> <p>我这里说的操作系统以Windows 2000为例,高版本的Windows也有类似功能。</p> <p>格式化硬盘时候,必须格式化为NTFS的,绝对不要使用FAT32类型。</p> <p>C盘为操作系统盘,D盘放常用软件,E盘网站,格式化完成后立刻设置磁盘权限,C盘默认,D盘的安全设置为Administrator和System完全控制,其他用户删除,E盘放网站,如果只有一个网站,就设置Administrator和System完全控制,Everyone读取,如果网站上某段代码必须完成写操作,这时再单独对那个文件所在的文件夹权限进行更改。</p> <p>系统安装过程中一定本着最小服务原则,无用的服务一概不选择,达到系统的最小安装,在安装IIS的过程中,只安装最基本必要的功能,那些不必要的危险服务千万不要安装,例如:FrontPage 2000服务器扩展,Internet服务管理器(HTML),FTP服务,文档,索引服务等等。</p> <p align="center">&#160;</p> <p><strong>二、网络安全配置</strong></p> <p>网络安全最基本的是端口设置,在“本地连接属性”,点“Internet协议(TCP/IP)”,点“高级”,再点“选项”-“TCP/IP筛选”。仅打开网站服务所需要使用的端口,配置界面如下图。</p> <p align="center">&#160;</p> <p>进行如下设置后,从你的服务器将不能使用域名解析,因此上网,但是外部的访问是正常的。这个设置主要为了防止一般规模的DDOS攻击。</p> <p><strong>三、安全模板设置</strong></p> <p>运行MMC,添加独立管理单元“安全配置与分析”,导入模板basicsv.inf或者securedc.inf,然后点“立刻配置计算机”,系统就会自动配置“帐户策略”、“本地策略”、“系统服务”等信息,一步到位,不过这些配置可能会导致某些软件无法运行或者运行出错。</p> <p align="center">&#160;</p> <p><strong>四、WEB服务器的设置</strong></p> <p>以IIS为例,绝对不要使用IIS默认安装的WEB目录,而需要在E盘新建立一个目录。然后在IIS管理器中右击主机-&gt;属性-&gt;WWW服务 编辑-&gt;主目录配置-&gt;应用程序映射,只保留asp和asa,其余全部删除。</p> <p><strong>五、ASP的安全</strong></p> <p>在IIS系统上,大部分木马都是ASP写的,因此,ASP组件的安全是非常重要的。</p> <p>ASP木马实际上大部分通过调用Shell.Application、WScript.Shell、WScript.Network、FSO、Adodb.Stream组件来实现其功能,除了FSO之外,其他的大多可以直接禁用。</p> <p>WScript.Shell组件使用这个命令删除:regsvr32 WSHom.ocx /u</p> <p>WScript.Network组件使用这个命令删除:regsvr32 wshom.ocx /u</p> <p>Shell.Application可以使用禁止Guest用户使用shell32.dll来防止调用此组件。使用命令:cacls C:\WINNT\system32\shell32.dll /e /d guests</p> <p>禁止guests用户执行cmd.exe的命令是: cacls C:\WINNT\system32\Cmd.exe /e /d guests</p> <p><font color="#4e0a13">FSO组件的禁用</font>比较麻烦,如果网站本身不需要用这个组件,那么就通过RegSrv32 scrrun.dll /u命令来禁用吧。如果网站本身也需要用到FSO,那么请参看<font color="#4e0a13">这篇文章</font>。</p> <p>另外,使用微软提供的URLScan Tool这个过滤非法URL访问的工具,也可以起到一定防范作用。当然,每天备份也是一个好习惯。</p>

    Read more +
  • 17

    2018-05
    ASP教程:删除记录和链接数据库程序解释

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">ASP教程:删除程序和链接数据库程序解释.</font> </td> </tr></tbody></table> <h3> </h3> <p>一、删除记录 </p> <p>opendataconn '打开数据库连接 <br>xxlb=RtnReplaceInt(Trim(request("xxlb")),0) '从里到外依次是接收xxlb变量,去除变量两端的空格,最外层是一个自定义函数,估计与替换有关。 <br>id=changechr(request("id")) '接收id,并转换成字符串 <br>ids=split(id,",") '把id按 "," 分割,并保存到数组ids中 <br>for i=0 to ubound(ids) '用for循环遍历数组 <br>tt=trim(ids(i)) '数组元素去除两端空格后赋值给tt <br>conn.execute"delete from house where id="&amp;tt&amp;"" '删除数据表中id=tt变量的记录 <br>next '循环结束 <br>response.redirect "house.asp?xxlb="&amp;xxlb&amp;"" '跳转到house页面并用get方法传递xxlb参数,值为xxlb变量的值. <br>closedataconn 关闭数据库连接 </p> <h3> </h3> <p>二、连接数据库 </p> <p>dim conn '定义变量 <br>dim char_str(20) '定义数组 <br>sub OpenDataConn() '自定义过程,用户链接数据库地 <br>dim connstr 定义变量 <br>connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" <br>connstr = connstr &amp; Server.MapPath("../../data/fyhouse_free.mdb") '数据库驱动字符串 <br>'response.write connstr 输出变量connstr的值 <br>set conn=Server.CreateObject("AdoDb.Connection") '创建连接对象 <br>conn.Open connstr '链接数据库 <br>end sub 这句是过程的结束语,但从你贴出来的代码来看并没有开头。 </p> <!-- 导入 在此 参考资料--><!-- end 参考资料-->

    Read more +
  • 17

    2018-05
    对Web开发者非常有价值10个很棒的网站

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">开发者应该收藏的 10 个很有用的网站.</font> </td> </tr></tbody></table> <p>很多网站默默无闻,但为开发者提供了非常有帮助的内容和功能,本文列出10个很棒的网站,真的对Web开发者非常有价值。</p> <p><strong><a href="http://aloestudios.com/tools/emchart" target="_blank"><font color="#1c3d72">Em Chart</font></a></strong></p> <p style="TEXT-ALIGN: center"><font color="#1c3d72"><img border="0" src="http://www.webjx.com/files/allimg/110823/2137300.png" width="550" height="414" alt=""></font></p> <p>Em Chart 是一个很有用的工具用来快速简单的将网页上的 em 转成像素值。</p> <p><strong><a href="http://twitapi.com/explore/" target="_blank"><font color="#1c3d72">Twitter API Explorer</font></a></strong></p> <p style="TEXT-ALIGN: center"><font color="#1c3d72"><img border="0" src="http://www.webjx.com/files/allimg/110823/2137301.png" width="550" height="414" alt=""></font></p> <p>该网址为你提供 Twitter API 的浏览和搜索,同时提供了一些可运行的示例代码。</p> <p><strong><a href="http://www.mysqlformatdate.com/" target="_blank"><font color="#1c3d72">Mysql Format Date</font></a></strong></p> <p style="TEXT-ALIGN: center"><font color="#1c3d72"><img border="0" src="http://www.webjx.com/files/allimg/110823/2137302.png" width="550" height="414" alt=""></font></p> <p>它允许使用 MySQL 的 DATE_FORMAT 函数对日期进行格式化,通过选择一个通用的日期格式,页面的底部将会显示出相应的函数调用参数。</p> <p><strong><a href="http://scriptsrc.net/" target="_blank"><font color="#1c3d72">Script Src</font></a></strong></p> <p style="TEXT-ALIGN: center"><font color="#1c3d72"><img border="0" src="http://www.webjx.com/files/allimg/110823/2137303.png" width="550" height="414" alt=""></font></p> <p>该网站为你找出所引用的 javascript 库的最新版本。</p> <p><strong><a href="http://spoon.net/browsers/" target="_blank"><font color="#1c3d72">Browser Sandbox</font></a></strong></p> <p style="TEXT-ALIGN: center"><font color="#1c3d72"><img border="0" src="http://www.webjx.com/files/allimg/110823/2137304.png" width="550" height="414" alt=""></font></p> <p>该网站可让你检查网站对跨浏览器的兼容情况,不过你需要在 Windows 下使用它。</p> <p></p>

    Read more +
  • 17

    2018-05
    关注web编程语言和脚本语言的就业趋势

    <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr> <td style="WORD-WRAP: break-word" bgcolor="#fdfddf"> <font color="#ff0000">WebjxCom提示:</font><font color="#000000">Web编程语言和脚本语言的就业趋势.</font> </td> </tr></tbody></table> <p>八月是一个值得关注工作趋势的月份,今天,我们来重点关注web编程语言和脚本语言的就业趋势。</p> <p>您可能很想知道我所指的“web编程语言和脚本语言”到底是什么?本文中我列举了Ruby、Python、PHP、JavaScript、Flex 以及 Groovy等编程语言。我在这里并没有提及Rails,是因为我想尽量将开发框架和开发语言区分开。</p> <p>1. Indeed.com趋势分析图:(横坐标表示时间;纵坐标表示所匹配工作岗位的百分比)</p> <p style="TEXT-ALIGN: center"><img class="aligncenter size-medium wp-image-2445" title="伯乐" border="0" src="http://www.webjx.com/files/allimg/110823/2140400.jpg" width="500" height="277" alt=""></p> <p>同其它语言相比,JavaScript的需求量最大,但是在过去六个月里增长得较为缓慢。我预料到这样的趋势并不会持续下去,因为随着 HTML5 的广泛应用,我们越来越需要用到JavaScript的知识。总体而言,在过去的六个月里,所有的语言都表现出了更为缓慢的增长趋势。PHP先有一定幅度 的增长,然后慢慢趋向稳定。而Python在下次更新之前似乎会赶超Flex。Ruby会继续保持增长的趋势,而Groovy则处于垫底低位,但一直保持 着稳定的增长。</p> <p>2. SimplyHired.com短期趋势分析:(横坐标表示时间;纵坐标表示所匹配工作的百分比)</p> <div style="TEXT-ALIGN: center"><img class="aligncenter size-medium wp-image-2446" title="伯乐02" border="0" src="http://www.webjx.com/files/allimg/110823/2140401.jpg" width="500" height="277" alt=""></div> <p>自2010年底,PHP、Python和Ruby表现出了相似的趋势。Groovy的变化趋势明显慢于其它编程语言。</p> <p>3. Indeed.com增长数量趋势:(横坐标表示时间;纵坐标表示增长的数量)</p> <div style="TEXT-ALIGN: center"><img class="aligncenter size-medium wp-image-2447" title="伯乐03" border="0" src="http://www.webjx.com/files/allimg/110823/2140402.jpg" width="500" height="277" alt=""></div> <p>我很喜欢这张图,因为它显示的不仅仅是当前的需求,还有整个行业的动态。虽然目前整个行业对Groovy的需求量不是很大,但是同其它语言相比, 它具有最强的增长趋势,紧跟其后的是Ruby。在过去一两个月里,所有语言都表现出了一定的稳定性,与以上的需求趋势很相似。Python继续保持迅速的 增长,超过了PHP和JavaScript。Flex基本上并没有较强的增长,随着HTML5发展的不断壮大,Flex很可能会出现下降的趋势。</p> <p>所有这些趋势都表明了web发展慢慢趋向稳定和成熟了。随着语言的种类越来越多,有关语言的问题也越来越多了。这些年来这些语言表现出了很强的增长趋 势,特别是Ruby和Groovy的强劲势头已经明显超过了开发框架Rails和Grails。长期备受关注的语言当然非HTML5莫属。考虑到 HTML5包含了一些有趣的JavaScript API,也包含了取代 Flash、Flex的一些功能,所以HTML5在整个的需求和增长趋势上会有一些显著的变化。</p>

    Read more +