注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

山林客

简单不一定幸福,但幸福其实可以很简单。

 
 
 

日志

 
 
关于我

2004年毕业于中山大学,毕业后专注于网站开发和网络工程技术。先后取得SCWCD、CCNP认证,对Asp/Java有丰富的开发经验,对网络工程也有较深的研究。真诚欢迎大家多多指教、多多指点、多多指正,共同分享IT道路和人生道路上的喜怒哀乐。

如何把绝对路径转换为相对路径?  

2009-02-21 18:24:12|  分类: ASP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

我们通常看到的路径有三种:
1. 绝对URL路径,如:
http://www.abc.com/upload/1.gif
2. 相对路径,如:upload/1.gif
3. 相对于网站根的路径,如:/upload/1.gif


本系统采用的是第3种,这主要是因为后台的FCKEditor所带出的可视化编辑器本身的路径并不是直接在admin目录下,如果将上传路径简单地使用../upload之类的相对路径,会导致FCKEditor进行可视化编辑的时候图片显示不正常。

 

一些网友提出是否可以设置相对路径,因为这可以更方便网站的迁移,例如从本地测试环境移到虚拟主机。

考虑到大家的需要,ah_bill特别写了以下三个函数供大家参考,经过ah_bill验证可以顺利完成绝对路径和相对路径的替换。


首先,要在inc/pathconfig.asp中增加两个变量:


Dim RZ_UPLOAD_PATH_REL_ENABLE,RZ_UPLOAD_PATH_REL

'使用相对路径请将此参数设置为1
RZ_UPLOAD_PATH_REL_ENABLE=1

 '这里是你自己的相对路径,参考点是admin目录,例如我这里设置的就是放在本系统的根目录(不是网站根),即和admin目录同级
RZ_UPLOAD_PATH_REL="../upload"  


然后,在admin/inc/functions.asp中增加三个函数:

'绝对路径换相对路径
Function AbsToRel(src)
 Dim result
 result=src
 If RZ_UPLOAD_PATH_REL_ENABLE=1 Then
  result=Replace(src,RZ_UPLOAD_PATH,RZ_UPLOAD_PATH_REL)
 End If
 AbsToRel=result
End Function

'相对路径换绝对路径
Function RelToAbs(src)
 Dim result
 result=src
 If RZ_UPLOAD_PATH_REL_ENABLE=1 Then
  result=Replace(src,RZ_UPLOAD_PATH_REL,RZ_UPLOAD_PATH)
 End If
 RelToAbs=result
End Function

'对文章、产品、图片的content和engcontent中的图片进行路径转换
Function ChangeContentImg(content)
 If RZ_UPLOAD_PATH_REL_ENABLE=1 Then
  Dim pattern,regEx,Matches,Match,result,foundval,newval
  pattern="src=""\S+"""   '这里用到正则表达式来找到content中的所有图片地址
  Set regEx=new RegExp
  regEx.MultiLine = True
  regEx.Pattern=(pattern)
  regEx.IgnoreCase=True
  regEx.Global=True
  Set Matches=regEx.Execute(content)
  If err.number<>0 Then
   response.write "错误:" & err.description
   err.clear
   Exit Function
  End If
  If Matches.count <>0 Then
   for each Match in Matches
    foundval=Match.value
    If InStr(LCase(foundval),"http://")>0 Then 'http://开头的路径不处理
    ElseIf InStr(LCase(foundval),"src=""/")>0 Then '绝对路径
    newval=AbsToRel(foundval)
    Else
    newval=RelToAbs(foundval)
    End If
    content=Replace(content,foundval,newval)
   Next
  End If
  set regEx=Nothing
 End If
 ChangeContentImg=content
End Function

上面几个函数要实现的功能就是,不修改系统的前台任何代码,但是在后台,在图片显示的地方我们看到的是绝对路径,而实际上保存到数据库中的是相对路径。

接下来,就是要修改后台需要用到上传功能的页面,包括:

admin/addarticle.asp   admin/savearticle.asp 

admin/addproduct.asp  admin/saveproduct.asp

admin/addphoto.asp  admin/savephoto.asp

admin/adminsiteconfig.asp 

admin/addad.asp  admin/savead.asp

admin/addspecial.asp admin/savespecial.asp

admin/modifytype.asp  admin/savetype.asp

看例子:
1. admin/addproduct.asp
添加的时候不会影响,因为使用的是原来的绝对路径,图片的显示不会有问题。
主要是用作修改的时候,要对从数据库中读到的相对路径转换为绝对路径,不然显示就会不正常:
要修改3个地方:
content=ChangeContentImg(rsa("content"))
engcontent=ChangeContentImg(rsa("engcontent"))
productimg=RelToAbs(rsa("productimg"))

2. admin/saveproduct.asp
在保存的时候我们要把绝对路径转换为相对路径,也是修改3个地方
content=ChangeContentImg(request.Form("content"))
engcontent=ChangeContentImg(request.Form("engcontent"))
productimg=AbsToRel(request.Form("productimg"))

 

修改后,后台显示正常,因为显示的时候换成了绝对路径:

数据库中的代码(前台):

<p><img style="width: 242px; height: 220px" alt="" src="../upload/2009-2//Fl200902211728232341.jpg" /><img height="220" width="220" alt="" src="../upload/2009-2//Fl200902211805138292.jpg" /></p>

 

当然,你并非一定要全部修改,例如您只想产品中使用相对路径,就只对addproduct.asp和saveproduct.asp进行修改就可以了,其他的模块可以不动。

以上代码仅供参考!!

  评论这张
 
阅读(3614)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018