网站程序迁移要注意的
我需要把一个站点的程序从虚拟主机转移到独立服务器上,按以往的步骤,第一步应该就是修改一下conn.asp的连接字符串,然后马上测试程序能否直接使用。可我这次偷懒了一下,不想改conn连接字串,而是直接换了一个conn文件——即在几个引用了conn.asp的文件中修改<!– #include file="conn.asp" –>为新的<!– #include file="conn_new.asp" –>,想不到就是这一步操作不够规范和严谨导致我调试了整整一天!
原来,我新建的这个conn.asp编码是UTF-8的,而原来的conn.asp编码是GB2312的,而偏偏我的ASP程序中又到处都是On Error Resume Next,所以出错的页面都是空白一片,没有错误提示。
最终用On Error Resume Next真的是害人啊。。提到的方法解决了。
总结,转移程序平台时,要注意两点:
1、尽量不动源代码或修改少量代码,待测试好之后,证明程序是可以进行平台迁移之后,再做必须的程序上修改。这样可以排除服务器的环境问题。如果没测试好就改了程序,最后运行出错那时如何知道是服务器环境的问题还是程序代码问题?
2、因为有编码问题,所以最好不要添加或覆盖任何代码文件,只能修改代码再保存(不能覆盖)。
3、在每个服务器上代码编辑器和编辑器配置也最好统一,比如我在服务器上的UltraEdit新建一个空文档默认用的是UTF-8编码,而在本机上用EditPlus新建默认用的是GB2312,这样就很可能出问题。
4、打开所有的错误提示功能。比如在ASP程序中注释掉:On Error Resume Next;在客户端IE中去掉“友好错误提示”;在IIS应用程序配置中选择“向客户端发送详细的ASP错误信息”(默认已勾选)。
以下是这次错误的具体调试过程(留给自己看的):
这次引用的conn.asp编码与主文件冲突导致的具体问题是:
1、部分上传页面不能用了;
2、上传不成功按理说至少也得有错误提示,可是什么都没有。这种问题最麻烦,难调试(最后才知道是设置了On Error Resume Next才没有错误提示,冤啊~)。
在用一些简单的上传例子彻底排除了是组件安装的问题后,我选出有问题的页面中最简单的一个页面:musicupload.asp 进行排查。
删掉头部的一些引用设置编码的文件后就可以了,原来是编码的原因。
当时在虚拟主机上时,因为乱码问题,我把整个upload程序统一设置为了gb2312编码,实现方法如下,在每个文件头部添加一句:<!– #include file="codegb.asp" –> codegb.asp里写上编码方式,具体如下:
<%@ CODEPAGE=936%>
<%response.contenttype = "text/html"%>
<%Response.Charset="GB2312"%>
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<meta http-equiv="content-type" content="text/html; charset=GB2312">
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate">
</head>
本来我在虚拟主机上引用的是GB2312的conn.asp,所以是正常的,可现在在服务器上我引用的是UTF-8的conn.asp,所以就出现了很多不能上传的问题:
| 包含<%@ CODEPAGE=936%> | 不包含<%@ CODEPAGE=936%>或<%@ CODEPAGE=65001%> | |
| 原虚拟主机 | 可上传、页面正常 | 可上传、页面乱码 |
| 现服务器 | 不可上传、页面空白 | 可上传、页面不乱码 |
我重新在一个简单的上传例子中使用了<%@ CODEPAGE=936%> ,可以正常上传。证明只是我写的这个有问题,其他用到aspupload的程序未必有问题。于是把upload的所有页面都改为了UTF-8编码保存,并把引用的codegb.asp改为codeutf.asp,即为:
<%@ CODEPAGE=65001%>
<%response.contenttype = "text/html"%>
<%Response.Charset="UTF-8"%>
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate">
</head>
但这样子又会乱码,就是把整个upload文件夹全部转换为UTF-8估计也会有乱码。最后我检查程序时发现了有一句:On Error Resume Next,去掉这句后,再查看网页就提示conn.asp“编码类型不一致”大致的错误,于是立即知道是conn.asp的问题。
实际上,写这个后台upload程序时我还是考虑到迁移的问题的,直接把整个upload文件夹移到服务器上来,直接就可以使用了。

4条评论
tsenfine 2008-12-11 20:53
wp升级为2.7正式版,测试一下回复
[回复]
tsenfine reply on 十二月 11th, 2008 21:01:
Ajax效果没了?
[回复]
tsenfine reply on 十二月 12th, 2008 0:09:
test
[回复]
tsenfine 2008-12-15 9:29
test2
[回复]