滥用onerrorresumenext造成的空间被停用

on error resume next 这条语句是用来屏蔽出错信息,当出错时,使得程序继续执行的,不过在使用中,似乎很多人没有考虑到on error resume next的作用范围.比如

十载的句容网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整句容建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“句容网站设计”,“句容网站推广”以来,每个客户项目都认真落实执行。

<%

On Error Resume Next

     Set Conn=Server.CreateObject("ADODB.Connection")

    Conn.Open "provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.Mappath("db.mdb")

     If Err.Number<>0 Then Response.Write "数据库连接发生错误" : Response.End

    


Set Rs=conn.execute("Select * from 表")

Do While Not rs.eof

     response.write rs(0)

rs.movenext

loop


%>

类似上面的代码,如果错误是发生在建立数据连接的时候,那么程序会按照我们设想的那样停止执行,给出出错信息,但假如是在set rs=conn.execute("select * from 表")这里出错呢?这个时候on error resume next仍然在起作用,这时候,一个占用cpu 100%的死循环就出现了,结果呢,如果服务器设置的好,那顶多你自己的站点无法访问了,如果服务器设置不够严格,那整个服务器的站点都要遭殃,结果就是空间商停掉你的空间.

代码改造一下

<%


Dim conn

Sub connect

On Error Resume Next

     Set Conn=Server.CreateObject("ADODB.Connection")

    Conn.Open "provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.Mappath("db.mdb")

     If Err.Number<>0 Then Response.Write "数据库连接发生错误" : Response.End

End sub    


connect


Set Rs=conn.execute("Select * from 表")

Do While Not rs.eof

     response.write rs(0)

rs.movenext

loop


%>

这样on error resume next就只作用于connect这个过程了,后面程序出错,不会因为on error resume next而带来死循环.

另外,on error resume next会屏蔽掉出错信息,在写程序的时候,尤其是初学者写程序的时候,很有可能因为这条语句的使用,使你忽略掉程序里隐藏的一些小错误.所以一定要慎用.

由于死循环造成服务器cpu100%,我们将暂停空间web服务,待修复问题后才可重新开通

当前题目:滥用onerrorresumenext造成的空间被停用
文章网址:http://csdahua.cn/article/eodoio.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流