2007-02-09

firefox 使用技巧-----插件兼容性的修改

firefox依靠其优异的性能和强大的插件功能,获得了广大电脑爱好者的喜爱,尤其是它的各种功能的插件让使用者在网络活动中获得了极大的方便。可是每种插件为了保证其稳定性,都有一个版本的兼容性,这样一些好的插件因为没有更新,在新版本的firefox中就不能使用,如何解决这个问题呢?用 google搜了一下,原来方法很简单:



1. 先把你需要的插件下载下来,一般下载下来的文件是xpi扩展名;

2. 关闭firefox;

3. 把xpi扩展名改为zip扩展名,然后解压;

4. 打开其中的install.rdf,找到其中和firefox有关的语句,修改“maxVersion“后面的版本号,例如”3.0.0.*“改大一些,如”4.0.0.*“,如果找不到明显和firefox有关的语句,那索性把所有“maxVersion“后面的版本号都改大一些。

5. 重新压缩成zip包,改扩展名为xpi,再安装即可。



如果你已经安装了插件包,在firefox升级后不能使用了,那就要这样做:



1. 关闭firefox;

2. 先找到firefox的profile所在文件夹,一般默认是在C:\Documents and Settings\(当前用户名)\Application Data\Mozilla\Firefox\Profiles\*.default\,进入文件夹extensions下面的每个目录,按照上面的方法修改每个install.rdf文件。

3. 最后再用相同的方法修改profile文件夹下面的extensions.rdf文件中maxVersion后面的版本号。

4. 重新启动firefox你就可以看到插件又可以用了。





2007-02-06

《落叶归根》有感

很感人,画面清晰,用色非常好,特别是里面的多个人物表现出的形形色色的性格,惟妙惟肖。

可以说是近年电影中难得的佳作。



最难忘的是赵本山坐在大卡车上,深情的朗诵的一首诗:

"如果我的祖国是一片大海,我就是一条小鱼,我游啊游,我真快乐!


如果我的祖国是一条大路,我就是一辆汽车,我开啊开,我真快乐!


如果我的祖国是一棵大树,我就是一片树叶,我摇啊摇,我真快乐!"



《了望东方周刊》:《越狱》背后的中国字幕组

中文字幕组为盗版的英美电视剧配上字幕,很容易被看成中国盗版猖獗的证据,而《纽约时报》记者又把他们冠名为“打破文化屏蔽者”.这两条理由就足够把中文字幕组的哥们全吊死在电线杆子上.

随着美剧《越狱》在写字楼里的风靡,一个神秘的群体—— 负责为“狱粉”们下载、翻译、制作、压制、发布、分流的字幕组逐渐浮出水面.



  第一个揭开神秘面纱的是《纽约时报》,不久前该报发表了一篇题为《打破文化屏蔽的中国字幕组》的文章, 报道出来后被专栏作者连岳转载进个人博客,立即引来跟帖无数,有网友回帖高声赞叹:“以自然法的名义,向字幕组的同志们致敬!他们是这个时代真正的教育家,如果没有这些人,中国青年脑中的知识将起码丧失一半。”



  越来越多的网友开始好奇中国字幕组究竟是一个什么样的组织?他们在做着什么样的工作?他们做这些工作的初衷何在,他们是否以此为生?



他们不再隐秘



  在伊甸园论坛上,打出了这样的招聘启事:字幕组长期招募各语种(英、日、韩、德、法、俄、意、西、其他)字幕翻译、听译及时间轴制作人员,待遇优厚。欢迎高手加盟!



基本条件:

(1)热爱电影或美剧;

(2)有一定的网络条件(公众网资源下载速度10KB/s以上);

(3)有一定的业余时间(平均每月10小时以上);

(4)做事踏实认真,具有敬业精神、团队精神和强烈的责任感;

(5)目前不在其他电影或美剧字幕组效力或担任职务。



  当记者试图以应聘者的身份发帖咨询时被拒之门外,原因是只有会员才可以发帖,而想要注册伊甸园会员必须受到现有会员的邀请才能注册。据一位不愿透露身份的伊甸园会员称,这样做的目的是为了保证论坛的安全,里面的人还是尽量不希望过多地暴露在阳光下。



  所有的字幕组都在拼时间,都想抢在第一时间把中文字幕发布出来。一位不愿透露姓名的《越狱》字幕组成员讲述了从接收片源到上传字幕所经历的六个小时的 “生死时速”:FOX电视台播放完一集《越狱》,就有片源从国外BT网站传到国内字幕组的FTP,这个工作通常由国外的留学生完成,大概需要半小时,为了争取时间,有的字幕组还会先借道韩国的服务器, 再传回国内的FTP,这样能将片源的传输过程从半小时缩短到10分钟。英文字幕常由录制人员直接用MSN或QQ传给字幕总监,字幕总监再分发给下面的工作人员,同时通知参与这次翻译行动的时间轴、翻译、校对、压片人员。



  当一集《越狱》的无字幕视频准备好后,先由时间轴人员清理字幕里的广告,并为英文字幕配上时间轴,即“从几分几秒到几分几秒,某个角色说了什么话”,做这项工作最重要的是细心,因为一不小心就可能对错时间点。一部45分钟的片子,一名熟练的时间轴人员大概两个小时就可以搞定。



  字幕总监收到配好时间轴的英文字幕,分派给4名翻译,每人10分钟左右,差不多200句对白,两个小时的工作量。翻译是件挺郁闷的事情,要赶时间,所以翻译过程中少有交流,遇到问题就请教Google。



翻译完成后,还需要校对人员最后把关,纠正翻译错误,统一翻译风格,并重新检查时间轴,因为有时英文一句话要分两行显示,而中文几个字就能表达。更何况字幕不是书本上、网站上的文字,可供读者按自己的阅读速度来读。字幕在画面上是一闪即逝的,观众的阅读速度,会被它的停留时间所控制。即使观众能在该行字幕消失前阅毕,太长的字幕仍会占用观众的时间,妨碍他们观赏画面。



  校对完毕后,字幕总监就可以在射手网(国内最大的字幕网站)上发布中文字幕文件了。通常,他们还会顺便把简体中文转换成繁体格式,连同英文字幕一并打包,单独提供下载。射手网做过一个简单的统计,《越狱》第二季第13集是伊甸园最早发布的,从北京时间上午9点30分拿到片源,到当天下午16点零2分在网上发布,只用了6个半小时。伊甸园字幕组文件发布后被下载了1万多次,而 3个小时后上传的另外一个字幕组的中文字幕,下载量不足它的1/10。这个数字或许可以解释字幕组之间为什么会如此争分夺秒地抢进度。



但求热爱 不问回报



  很多网友都有这样的同感:“网上翻译的字幕比很多DVD的字幕好多了”。这种好不仅体现在准确度和时效性上,更体现在字里行间译者流露的感情,一种对片子的感情。现在新加坡攻读物理学博士的王鹏曾经是伊甸园论坛的一名普通译工,他对《了望东方周刊》记者说:“粉丝看粉丝翻译的字幕,最能心领神会,相顾莞尔。”



  复旦大学中文系严锋教授对《了望东方周刊》说:“他们所翻译的东西并不是达到了怎样的高度,翻译得多么好,但他们的翻译不像一些正规、专业的翻译那么生硬,他们的翻译更加生活化,很贴近我们自然的语言,有时他们还使用了一些我们熟悉的成语。最可贵的是他们在一些对话旁边还加了注释,比如一些文化、历史方面的典故,这些都是非常贴心的。我能在他们身上看见一种敬业精神。”



  《纽约时报》报道过一位“痴情”的中国骨灰级粉丝兼字幕翻译:“23岁的丁承泰是一家银行的网络技术专家,一年半来,他一下班就把自己关在房间里,开始消灭那些大部头的美国电视剧,比如 ‘Lost’、‘C.S.I.’还有‘律政俏主妇’,朋友还以为他失踪了。他连夜为这些连续剧编译字幕,发布到网上。通过BT这样的技术,越来越多的中国观众能够免费下载观看到这些节目。”



  只要登录到相关的字幕网站,不难发现网站招聘的都是像丁承泰这样的兼职人员,所谓的待遇都不是拿人民币来衡量的。TLF被网友公认为最具实力的字幕组之一,成立于2002年7月,主要从事电影翻译和美剧翻译。4年内,有全世界超过500名电影爱好者为TLF字幕组的发展贡献了力量。目前,TLF字幕组现役组员超过100名,组员涵盖出生于60年代、70年代和80年代的三代人,学历包含中学、大学、硕士、博士四个级别。组内男女性别比例6:1,囊括了全中国的语言精英,其中相当部分为海外留学人员,其中不乏来自哈佛等世界名校的学子。



  参加字幕组的人, 并非个个毫无私心, 不少人是冲着字幕组的内部FTP账号去的。对喜欢美剧的人来说, 那个账号是个宝贝, 几乎可以看到所有的美剧。王鹏告诉记者:“我当时加入字幕组的动机也主要在于此,学校曾一度把BT的端口给封了,我只好加入字幕组,每个星期翻译三四个小时,就可以换得最新一集的美剧,后来电视剧播完,我也就退出了。”



  正是因为有了这些字幕组,中国的美剧粉丝们从此过上了“天涯共此时”的日子。美国东部时间11月27日晚19点,即北京时间28日的早8点,《越狱》第二季第13集在美国福克斯电视网开播。这是《越狱》第二季进入冬歇期之前的最后一集。美剧的规矩是每周一集,中国《越狱》迷苦等了一个星期后,早已心痒难耐,隔几个钟头就跑到射手网和各大美剧论坛上去看中文字幕出来了没有。



  长期以来,各大中国字幕组以翻译字幕为乐,享受着彼此之间竞争速度和质量的简单快乐。他们类似早期的黑客一样低调,仅仅在作品的流布范围上就能取得足够的自我满足。



在接受《了望东方周刊》采访的字幕翻译中还有一位是上海电影制片厂的签约译员蒋蔚,他在上影译制片厂作兼职翻译,不同的是他的工作有回报,他最终没有透露收入的多少。“坦率地说,我在乎的不是翻译的酬劳,我更看重自己连续赶上几个通宵翻译一部作品,最后被中国观众接受的成就感。” 蒋蔚告诉记者,他把每一部由他参与翻译的电影都刻成光盘,小心地珍藏着,“将来儿子长大了,我要告诉儿子这部电影里面也有老爸的一份功劳。”



  提到影视论坛里那些自发组织不拿一分钱报酬的中文字幕组,蒋蔚很钦佩这样一个躲在幕后,默默奉献,无声无息的群体。“如果让你加入他们,不拿一分钱报酬,你肯吗?”记者问道。“我愿意。”蒋蔚回答地很干脆,“对于美国电影或电视剧的影迷剧迷们来说,第一时间享受到一个好故事,第一时间伴着剧情的起承转合,心情随之跌宕起伏,第一时间得知人物命运的结局,这些意义都要远远胜过外界的赞许或者任何物质上的回报。



翻错一个字就是对美剧的亵渎



  美剧的很多剧迷们都知道网上流传着一个王牌翻译叫Re-quiem,此人是《太空堡垒卡拉狄加》的超级粉丝,这部片子最初在网上流行没有英文字幕,他就一句一句听译,翻来覆去地听上一整天,如临大敌,仿佛一个错别字都是对这部剧的亵渎。有热心人给他算了一下,他翻译一集片子,至少要对着字幕看6次片子。因此同行都开玩笑说字幕组新招的人跟谁比都不要跟Re-quiem比,他属于变态级别的。



  “听译已经是翻译的最高境界了。”王鹏坦言他只做过一次听译,当时是翻译一部电影,花了一天时间,非常辛苦,来来回回,反反复复听了好多遍。“尤其是一些不太熟悉的人名、地名,还有一些深刻的老片老引用历史,我就要不断Google。认真一点的做法都是要查清楚并且作注释的,尽管观众一般都不注意注释。”



  一些被认为“痴气”的字幕翻译常常一翻就是8小时,不吃不喝不睡,像着了魔一样。当看到一些触景生情的场面,翻译还会一边抹眼泪一边在键盘上敲字,浑然忘我。最让王鹏敬佩的是一部日本动画《Ghost in Shell》的翻译,里面大量引用世界文学名著原话,在他看来翻译真是到了炉火纯青的地步。



  一位网名叫“冬天”的网友说:“我印象最深的一句特别富有中国特色的翻译是‘I swear to God’这句话,在Shark(《律政狂鲨》)的某一集里面,这句话被‘fr’翻译为‘向毛主席保证’,哈哈,太贴切了,中国人是不会向上帝发誓的。”



  把美国民谚翻译成中文有其特别的难处。《欲望都市》有一集里面,“我想你们两个将会很适合”(I thought you two would hit it off)被翻成“我想你们两个会来电”。《越狱》里面的名句“准备的作用是有限的” (Preparation can only take you so far)则被改成了“谋事在人,成事在天”。尽管故事的背景完全在美国,经过了这样的翻译,或多或少会带上一点中国特色。而这些都要归功于翻译的精心雕琢。



  据王鹏介绍,即使都是志愿翻译者,水平差异还是很大的,有些翻译质量太差,斑竹会自动清理掉。字幕组间在内容的相互竞争也就是把字幕发到字幕站,靠公众的口碑来评判。



  “各个字幕小组之间存在竞争,这种竞争不是商业角度的,而是从业务角度,他们互相比速度、比质量,这种良性的竞争必然会使得他们的翻译越来越好。”严锋说。



  韩剧的著名字幕团队骄阳字幕组就受到了韩剧迷们的首肯,有网友这样写道:“通过《天可怜见》认识了骄阳。从那时开始,《19岁的纯情》、《真的真的喜欢你》、《美好的一天》还有《伟大的遗产》也都是看骄阳出品的。我信赖骄阳,骄阳也没有让我们失望!骄阳人的服务是一流的,你们虚心接受意见;主动与韩迷沟通;韩剧在线播完之后,骄阳字幕组人员通宵制作,凌晨发布!这种敬业精神让我们感动!骄阳,你们为韩迷们所做的、所奉献的一切心血和汗水,我们都看在眼里,感激在心里!”



你不是公安局的吧



  “你不是公安局的吧?” 还在新加坡读博的字幕翻译王鹏,通过MSN接受本刊记者采访的一个小时里,不下五次质疑记者的身份。一位自称是“自闭症患者”的网友在论坛里发帖也表示这样的担忧:“字幕组成员应该被央视评为2006感动中国年度人物,唉,还是不要炒作了,否则这些幕后英雄就要挂了。”



  一位不愿透露姓名的网友在“航海日志”里发言:“中文字幕组为盗版的英美电视剧配上字幕,很容易被看成中国盗版猖獗的证据,而《纽约时报》记者又把他们冠名为‘打破文化屏蔽者’。这两条理由就足够把中文字幕组的哥们全吊死在电线杆子上。”有些网友准备在网上发表联合声明,连煽情的标题都想好了:《求求你们放过中国字幕组吧!》



  对于无数美剧的忠实粉丝来说,他们的心情是复杂和矛盾的,“从丁承泰接受了《纽约时报》的采访起,多米诺骨牌就开始倒下。结果是所有中文字幕组都曝露在阳光之下,当年各大黑客组织出水就是这样的情形。”一位《越狱》粉丝这样慨叹,“而我不能对此说什么,甚至不能谴责谁。因为我是中文字幕组的受益者,我无权要求他们永远隐姓埋名下去。如果他们有一天不希望如此了,要走到前台来,得到他们应有的荣耀,这是他们的自由。或者因此而得到美国方面的工作邀请,则更是他们的权益所在。即使因此而导致我没有翻译的美剧看,也只能如此。我可以遗憾,我可以悲伤,但是我不能呼吁,不能要求。没有谁规定他们必须保持缄默,因此我的保护也就无从说起。只是一想到未来可能没有BT可下,心里总觉得怅然得很。”



  “你担心中国法律有一天会封杀中文字幕组吗?”王鹏回答记者说:“我担心的是法律有一天会禁止下载,那样字幕组也就名存实亡了。如果这帮哥们遭遇不测,意味着无数粉丝将无法看到及时准确的美剧翻译版本,只好苦练英文了,中文字幕组是中国特色的产物,在新加坡,美剧迷们的英文比中文还好,没有中文字幕组也就不存在这样的担心了。”



  聪明的字幕制作组成员早已做到兵来将挡,水来土掩。细心的观众会在《越狱》每集的LOGO旁边看到这样一段文字:“伊甸园影视论坛荣誉出品,本字幕仅供学习交流,严禁用于商业用途,请于24小时内删除,请购买正版”。字幕组还意识到,他们的作品在其他国家可能被认为是侵权。不过根据中国法律,这些作品很可能被认为是学术研究。因为他们既不收费,也不以赢利为目的。



  上海大学影视艺术技术学院教授林少雄回顾了我国引进影片的正常渠道和程序:“文革”及上世纪80年代,国家对于外国影片的引进有专门的审查机构,意识形态占主要的因素。那时候国内的观众所能看到的都是苏联、阿尔巴尼亚等社会主义国家的影片。后来我们国家开始引进国外大片,我还记得引进的第一部进口大片是Harrison Ford主演的《亡命天涯》。



“现在我们国家引进国外影片实行配额制,每年引进的外国影片数量有具体的规定,逐年有所增加。至于国外电视剧的引进,则由电视台来做。比如韩国《大长今》就是由湖南经济卫视引进的。”林少雄说。





作文化交流的使者





  姑且不论中文字幕组所从事的是不是合法的工作,至少他们被网友看作是美国流行文化的爱好者和传播者。他们为那些想通过看大量的美国电视和电影来学英语、了解西方文化的人提供了一个绝佳的平台。



不少《越狱》粉丝说他们从电视剧里学到了许多知识,从流行时尚到生化医学,还有美国各州名称及地理位置,FBI的工作流程,甚至包括美国的dating culture。



  “从电视里你能看到日常生活的方方面面,从政治、历史到文化艺术。”丁承泰说,“这就是美剧的独特之处。当我第一次看《老友记》时,我发现里面随处可见美国历史的相关知识,也显示了美国的高速发展。这比课本上的有趣多了。”



林少雄在接受《了望东方周刊》采访时表示,国内出现的字幕组客观上会对国内的受众产生三方面的影响:



  “首先,对观众的欣赏习惯有很大的改变。’‘文革’以后80年代,欣赏和接受外国影片都是通过翻译、配音,而现在很多受众在观看外国影片的时候都要求必须要听原声、看字幕。我上课的时候给学生作过试验,给学生播放配音的影片,学生们就会觉得很别扭。”



  “第二,保持了影片原有的品质。在影片中原声和配音的差距还是比较明显的,人物对话和音乐等都是影视作品中比较重要的方面。”



  “第三,改变人们的认知能力。虽然观众在看原声电影的时候,一方面要看画面,一方面又要忙着看字幕,这肯定会分散他们的注意力,但是把阅读和观看两者结合起来,经过长期的培养,可能会对人的认知能力产生一些影响。”



2007-01-20

挑战极限!制作220分钟vcd光盘

一张700mb容量的普通光盘能刻录多长时间的vcd视频?80分钟还是更短?如果我说最多能刻录360分钟,而且画面质量并不比普通vcd差,可能你会说那是用rmvb格式吧?如果我说这张光盘还能在vcd、dvd影碟机上播放,而且用的就是普通vcd使用的mpeg编码,你相信吗?



一、kvcd。



首先可以肯定地告所你,这种技术是存在的,它的名字就叫做kvcd。它并不是一种新



的压缩编码技术,而是基于mpeg1压缩算法的一种非标准vcd编码方式。



二、kvcd模板。



Kvcd的作者设计了专用的编码模板文件,这些模板使用在mpeg压缩品质最好的软件“TMPGEnc plus”上,通过优化的动态码率和修正的量化矩阵来压缩编码,保证了生成的视频质量。



Kvcd编码模板文件在http://kvcd.net/dvd-models.html页面上获得,在页面中有许多不同压缩质量的模板,右击带下划线的模板名称,选择“另存为”就可以将这些扩展名为“MCF”的模板文件保存到硬盘中,我们国家使用的是pal制式,要下载对应的模板。



这里的模板文件按照不同的类型分别以红、绿、蓝背景显示,其中红色背景中的模板是最常用的,判断模板生成视频质量的标准是700mb容量光盘可以刻录的视频时间长度,其中“352×288 ULBR”就是最多可以在一张700mb容量光盘上刻录360分钟视频模板,不过这是理论值,一般情况可以做到150分钟~220分钟,常用来作为制作电视剧模板;“352×288 LBR”是180分钟模板,这个非常适合编码普通长度的电影;“352×288”是120分钟模板,其编码这里比前两个要好一些;“352×576”是120分钟高分辨率视频编码模板;“704×576”模板编码生成的视频接近dvd分辨率,即使这样也可以在普通cdr光盘上刻录将近90分钟的高品质视频。



三、kvcd实战:rmvb刻录kvcd



第一步,使用“TMPGEnc plus”转换rmvb格式视频,必须使用2.54或2.53版本,http://www.ayxz.com/down.asp?id=4849 下载2.54版。这是绿色板,内有序列号,找到序列号注册。



第二步,打开运行后出现“项目向导”对话框,直接关闭该对话框,然后在主界面中单击“输入影像”栏的“浏览”按钮,在弹出的“打开”对话框中先设置“文件类型”为“所有文件(*.*)”,就可以选择要转换的rmvb文件了,这时在“输入声音”栏中会自动添加好同样rmvb文件路径,注意,如提示错误,请安装能够播放rmvb格式视频的播放器。



第三步,点“读取”按钮,选择kvcd编码模板文件,这时默认的“码流类型”设置是“video only”也就是只转换视频,所以这里一定要选择“system(video+audio)选项,这样才能转换出既有画面又有声音的电影



第四步,单击“设定“按钮”,然后单击“音频”标签,默认的“声道模式”是“dual channel”,一定要修改为“stereo”立体声模式。最后单击“确定”按钮保存设置。



第五步,文件输出路径根据个人情况设定,最后点“开始”按钮开始转换视频。



第六步,用nero进行刻录光盘,不过由kvcd编码的mpeg文件是非标准vcd格式,所以在nero中添加文件时,它会提示“不是建立标准vcd的有效文件”这时要注意,必须选择“关闭标准一致性并继续”,否则活就白干了。后面就可以按照正常流程刻录vcd光盘了。

二级域名转发程序实现原理

二级域名程序的实现其实很简单,很多人不明白其中原理,觉得很深奥或者很迷茫。下面我来讲将二级域名的实现原理。

功能服务:首先来分析一下二级域名程序所有提供的服务。就是我们来通过国际域名moocky.net,提供诸如abc.moocky.net的域名转发到目的的网站(网址)。这就是二级域名程序所要实现的功能。

虚拟主机:
随着Web服务器的发展,也有原来的一台服务器上只能建立一个Web站点,发展到现在可以建立虚拟主机更加成熟的WebServer。当然这个也和浏览器的发展是分不开的。大家在访问一个站点的时候比如http://www.moocky.net,浏览器首先连接http://www.moocky.net这 个网站所对应的服务器,然后再把主机头(也就是域名,http://后面到第一个[/]反斜杠之间之间的部分)给服务器,服务器接收到主机头之后,然后再 返回所对应的站点的内容。这也就是基于名称的虚拟主机的原理,当然基于IP的虚拟主机的原理就是通过IP地址来判断相应的Web站点。个默认站点,就是当 基于IP的虚拟主机找不到所对应的IP、基于名称的虚拟主机找不到对应的名称是所有访问的站点,就是默认站点了。当然这个也为我们实现域名转发提供可能。

范解析和范绑定:
什么是范解析?比如:我有一个moocky.net的国际顶级域名,那么我需要将“任意字符.moocky.net(*.moocky.net)”,解析 到一个固定的ip,如果我们要一个一个的去做那当然是不可能实现的了,那范解析就是用来做这个的。现在的大多数域名注册商都有提供泛解析(也就是大家通常 说的范域名解析)。
什么是范绑定?上面刚刚讲了虚拟主机的实现原理,那么范绑定也就是一个范域名到对应站点的一个实现过程。比如刚刚我已经做了*.moocky.net的范 解析,接下来要做的就是让*.moocky.net指向到我的站点(注意同一个IP上也可能有很多个主机);对于基于IP的虚拟主机,那我可以告诉你“恭 喜你,你不用再作范绑定了。”(为什么呢,自己多想想),但是对于基于名字的虚拟主机要做范绑定,恐怕就是不是人人都知道了。不同的Web服务器范绑定是 不同的,我就简单得说一下我所知道的:


据我目前所知IIS、TomCat不能绑定范域名(如果你知道怎么绑定请你告诉我一下),但这并不是说IIS、Tomcat就不能实现二级域名程序,别忘 了我们还有基于IP的虚拟主机和一个默认站点呢。虽然不能想范绑定那样可以为所有站点都做到,但至少可以勉强实现。

到此,有关二级域名程序实现原理的服务器部分就算是讲完了,不知道你能否明白。


二级域名转发的程序实现部分相对来说就很简单了。
测试:首先来看一个测试,我们首先在web站点下面建立一个文件test.php(test.asp、test.jsp;php可以使用phpinfo ()函数,ASP和JSP可以遍历ServerVariable),用该程序来打印服务器的相关信息,这里不再赘述程序的具体写法,主要对比的是 HTTP_HOST这个参数的变化,然后用http://test1.moocky.net/test.phphttp://test2.moocky.net/test.phphttp://test3.moocky.net/test.php, 我么可以看到,三次访问HTTP_HOST分别对应的是tes1.moocky.net、tes2.moocky.net、 tes3.moocky.net,这也就是我前面讲到的浏览器发送给WebServer的主机头,到这里我想你应该差不多明白怎么用程序来实现二级域名转 发了。

程序编写:明白来实现的原来,下面我来看看为用户提供二级域名的程序流程。用户通过注册,申请一个域名abc.moocky.net,提供自己的网址:http://www.moocky.net/blog.xml,注册完成,用户在浏览器打开http://abc.moocky.net,程序自动跳转的http://www.moocky.net/blog.xml

第一步,我们就是建立数据库,来保存用户注册信息;

user_info表结构:
PRIMARY KEY (user_id);
UNIQUE KEY `domain` (`domain);
user_id int auto_increment;
domain varchar(20);
password varchar(20);
homepage varchar(100);
第二步,编写用户注册程序(略);

第三步,编写转发程序;

ASP程序:
<%
dim host = request.servervariables('http_host')
dim sql = "select * from user_info domain='" & host & "'"
.....查询数据库操作,将网址付值给homepage(省略)....
%>

Aspupload 属性

UploadManager 属性
=============================================
CodePage As Long (Read/Write)
可以把表单的文本项目名和文件名的字符从指定的CodePage转换为Unicode,比如表单是按UTF-8提交的,那么这个属性应该设置为65001。其他的如1251 (Cyrillic), 1255 (Hebrew), 1256 (Arabic)等等。

用法:
程序代码: [ 复制代码到剪贴板 ]
Upload.CodePage = 65001
-------------------------------------------
DetectMacBinary As Boolean (Read/Write)
默认为True。 这个属性用来控制是否检测上传的文件是MacBinary格式的,如果是则从中提取“data fork”。AspUpload 3.0 Beta 1. 不支持。

用法:
Upload.DetectMacBinary = False
--------------------------------------------
Directory (Path As String, Optional SortBy, Optional Ascending) As Object (Read-Only)
返回一个集合,这个集合包括指定目录的所有子目录和文件的引用。
在这个集合里,子目录总是优先于文件.Path 可以包括通配符 * 和 ?。

SortBy 可以是: SORTBY_NAME (1, default). SORTBY_TYPE (2), SORTBY_SIZE (3), SORTBY_CREATIONTIME (4), SORTBY_LASTWRITETIME (5), and SORTBY_LASTACCESSTIME (6).

Ascending 默认为True。

用法:


Set Dir = Upload.Directory("c:\path\*.*", SORTBY_SIZE)
For Each Item in Dir
...
Next
-------------------------------------------
Expires As Date (Read-Only)
如果已经注册,返回9/9/9999,否则返回失效期。

用法:
Response.Write Upload.Expires
-------------------------------------------
Files As Object (Read-Only)
返回一个集合,这个集合包含有上传文件的引用。

使用这个集合之前,必须调用Save或 SaveVirtual方法。

要引用一个单个文件,可以使用从1开始的整数下标,或者相应的文件框的名称。

要列举集合里的项目,可以使用For/Each 语句。

用法:

Set File = Upload.Files(1)

Set File = Upload.Files("FILE1")

For Each File in Upload.Files
...
Next
-------------------------------------------
Form As Object (Read-Only)
返回一个集合,这个集合包括所有不是文件框的表单项目的引用。

使用这个集合之前,必须调用Save或 SaveVirtual方法。

要引用一个单个表单项目,可以使用从1开始的整数下标,或者相应的项目的名称。

要列举集合里的项目,可以使用For/Each 语句。

用法:

Name = Upload.Form(1)

Name = Upload.Form("Name")

For Each Item in Upload.Form
Response.Write Item.Value
Next
-------------------------------------------
IgnoreNoPost As Boolean (Read/Write)
当Upload.Save方法被脚本直接调用,而不是通过表单提交时,可以避免 "Wrong Content-Type"这个错误。当表单和相应的上传脚本在同一个文件时,这个属性很有用。

用法:

Upload.IgnoreNoPost = True
-------------------------------------------
OverwriteFiles As Boolean (Read/Write)
默认为True。如果设置为False,那么当文件名已经存在时,AspUpload会在原文件名后附加“(12)”这种形式的字符。这个属性影响Save, SaveVirtual 和 File.SaveAs方法。
用法:

Upload.OverwriteFiles = False
-------------------------------------------
PreserveFileTime As Boolean (Read/Write)
默认为Flase。如果设置为True,会试图保护上传文件的上次修改时间。
这个属性只是客户端使用XUpload或者JUpload 的时候有用。
当使用常规Form提交的时候,它没有任何作用。
用法:

Upload.PreserveFileTime = False
-------------------------------------------
ProgressID As String (Read/Write)
上传进度条所用的,用来区分上传进程。

用法:

Upload.ProgressID = Request.QueryString("PID")
-------------------------------------------
RegKey As String (Read/Write)
指定注册码,如果没有指定,AspUpload会从系统注册表读取。
用法:

Upload.RegKey = "12345-67890-12345"
-------------------------------------------
TotalBytes As Long (Read-Only)
返回上传的总字节数。
只能在成功调用Save(SaveVirtual)方法后调用这个属性。

用法:
Response.Write Upload.TotalBytes
-------------------------------------------
TotalSeconds As Long (Read-Only)
返回上传持续的总时间。
只能在成功调用Save(SaveVirtual)方法后调用这个属性。

用法:
Response.Write Upload.TotalSeconds
-------------------------------------------
Version As String (Read-Only)
返回组件的版数,如:"3.0.0.0".
用法:

Response.Write Upload.Version
-------------------------------------------
UploadManager Methods
======================================================
Sub CopyFile (FromPath As String, ToPath As String, Optional Overwrite)
复制文件。
Overwrite 默认为True。如果设置为False,当目标路径存在时,这个方法会失败。

用法:
Upload.CopyFile "c:\path1\file.ext", "c:\path2\file.ext"
-------------------------------------------
Sub CreateDirectory (Path As String, Optional IgnoreAlreadyExists)
建立目录。
IgnoreAlreadyExists 默认为False。如果设置为True,当目标路径存在时,这个方法不会报错。

用法:
Upload.CreateDirectory "c:\dir1\dir2", True
-------------------------------------------
Sub CreateFile (Path As String)
建立一个空文件。

用法:
Upload.CreateFile "c:\path\file.txt"

-------------------------------------------
Sub DecryptAndSendBinary (Path As String, IncludeContentType As Boolean, ContentType As String, Key As CryptoKey, RemoveExt As Boolean, Optional Attachment, Optional FileName)

和SendBinary相同,但是发送之前会使用Key对文件进行编码,这个Key可以由AspEncrypt组件生成。

RemoveExt参数指定下载框中是否显示文件的扩展名。

如果Attachment参数设置为True,输出的Header中Content-Disposition 将包括关键字"attachment;",以强迫IE下载这个文件。

FileName参数, 指定下载框中显示的文件名。

用法:
Upload.DecryptAndSendBinary "c:\dir\file.txt.xxx", True, "application/octet-stream", Key, True, True

-------------------------------------------
Sub DeleteFile (Path As String)
删除文件。

用法:
Upload.DeleteFile "c:\path\file.txt"
-------------------------------------------
Function FileExists (Path As String) As Boolean
检测文件是否存在。

用法:
if Upload.FileExists("c:\path\file.txt") Then ...
-------------------------------------------
Sub FromDatabase (Connect As String, SQL As String, Path As String)
使用ODBC,从数据库的表中输出BLOB字段到硬盘。
Connect 指定ODBC连接字符串。
SQL 该SQL语句应该返回一条记录,这个记录应该包括Blob字段。
Path 完整的文件路径,包括文件名。

用法:
Upload.FromDatabase "DSN=mydb;UID=sa;PWD=xxx;", "select image_blob from myimages where id = 3", "c:\path\file.txt"
-------------------------------------------
Sub FromRecordset (RecorsetValue As Variant, Path As String) 使用ADO Recordset 对象从数据库的表中输出BLOB字段。

RecordsetValue 是一个recordset字段,比如rs("image_blob").Value。

Path 完整的路径,包括文件名。

用法:
Set rs = Server.CreateObject("adodb.recordset")
rs.Open "MYIMAGES", Connect, 2, 3
Upload.FromRecordset rs("image_blob").Value, "c:\path\file.txt"
-------------------------------------------
Sub LogonUser (Domain As String, Username As String, Password As String, Optional Flags) 扮演指定的用户帐号。

如果Domain 是空的,那么本机将会验证这个密码。

如果您当前的安全设置不允许你执行上传到远程机器或者其他操作,可以使用这个方法。

Flags 可以是以下值: LOGON_INTERACTIVE (2, default), LOGON_NETWORK (3), LOGON_BATCH (4), and LOGON_SERVICE (5)。不推荐使用这个可选参数。


用法:
Upload.LogonUser "domain", "jsmith", "xxxxxx"
-------------------------------------------
Sub MoveFile (FromPath As String, ToPath As String) 移动文件。如果目标路径存在,这个方法将会报错。

用法:
Upload.MoveFile "c:\path1\file.ext", "c:\path2\file.ext"
-------------------------------------------
Function OpenFile (Path As String) As Object 建立一个UploadedFile 实例,它指向指定的文件。
如果你想使用UploadedFile.Binary属性的优势,保存任意文件到数据库,这个方法很有用。

用法:
Set File = Upload.OpenFile("c:\path1\file.ext")
-------------------------------------------
Sub RegisterServer (Path As String, Optional Register) 模仿 REGSVR32 (/u)的动作。 注册或者卸载指定的ActiveX DLL.

如果Register参数为True或忽略,为注册DLL, 否则为卸载。

用法:
Upload.RegisterServer "c:\path1\file.dll"

Upload.RegisterServer "c:\path1\file.ocx", False
-------------------------------------------
Sub RemoveDirectory (Path As String)
删除目录,如果目录包含文件或子目录,会报错。

用法:
Upload.RemoveDirectory "c:\path"
-------------------------------------------
Sub RevertToSelf
结束由 LogonUser方法开始的扮演。
通常不需要调用这个方法,角色扮演会自动结束。

用法:
Upload.RevertToSelf
-------------------------------------------
Function Save (Optional Path, Optional Key, Optional Ext) As Long
最主要的方法。捕获文件,保存到硬盘或内存,组装Files和Form集合。

Path参数, 如果指定,则是文件保存到的路径。

如果Path参数被忽略,文件保存到内存,可以通过File.Binary存取,或者通过File.SaveAs保存到硬盘。

参数Key和Ext,用来加密上传的文件。

Key是一个CryptoKey对象,它由AspEncrypt组件生成。如果指定这个参数,文件保存之前将会被加密。

Ext是可选扩展名。

方法返回值:成功保存的文件数。

用法:

Count = Upload.Save ' save to memory

Count = Upload.Save("c:\upload") ' save to hard drive

Upload.Save "c:\upload" ' save to hard drive, ignore return value

Upload.Save , Key, "xxx" ' Save to memory, encrypt with Key

Upload.Save "c:\upload", Key, "xxx" ' Save to hard drive, encrypt with Key
-------------------------------------------
Function SaveEncrypted (Path As String, Key As Object, Ext As String) As Long
此方法废止。 只用来向后兼容。用Save方法替代。

Upload.SaveEncrypted(Path, Key, Ext)
等价于
Upload.Save(Path, Key, Ext)
-------------------------------------------
Function SaveToMemory As Long
此方法废止。 只用来向后兼容。用Save方法替代。

Upload.SaveToMemory
等价于
Upload.Save
-------------------------------------------
Function SaveVirtual (Optional VirtualPath, Optional Key, Optional Ext) As Long

和Save方法相同,但是参数为虚拟路径,而不是物理路径。

方法内部调用Server.MapPath方法转换虚拟路径为物理路径。

因此, Upload.SaveVirtual(path) 等价于Upload.Save(Server.MapPath(path))。

在Web主机环境里,系统管理员可以禁止Save方法,强迫AspUpload用户使用SaveVirtual方法,以便限制他在自己的目录中进行操作。

用法:
Upload.SaveVirtual "/images"
Upload.SaveVirtual "/images", Key, "xxx"
-------------------------------------------
Function SaveVirtualEncrypted (Optional VirtualPath, Optional Key, Optional Ext) As Long
此方法废止。 只用来向后兼容。用SaveVirtual方法替代。
-------------------------------------------
Sub SendBinary (Path As String, Optional IncludeContentType, Optional ContentType, Optional Attachment, Optional FileName)

用作文件下载。
取得指定的文件,发送给客户端浏览器。
参数IncludeContentType默认为True。
它控制着是否建立Content-Type, Content-Disposition 和Content-Length 这些Header信息. 如果设置为False,这些Header信息不会建立。

ContentType 指定Content-Type header。

Attachment 默认为False。如果设置为True,“Content-Disposition” header 将包括“attachment”关键字,强迫浏览器弹出下载框,而不是在浏览器中打开。

FileName 指定下载框中的文件名。
用法:

Upload.SendBinary "c:\path\file.ext", True, "application/octet-stream", True
-------------------------------------------
Sub SetMaxSize (MaxSize As Long, Optional Reject)
指定单个文件的限定大小。
参数Reject 指定过大的文件是否会拒绝(True的时候)或截取(False或省略的时候。)。

用法:
Upload.SetMaxSize 150000, True
-------------------------------------------
Sub ToDatabaseEx (Path As String, Connect As String, SQL As String, Optional MSAccessHeaders)
保存任意的文件到数据库。
查看UploadedFile.ToDatabase 方法。

用法:
Upload.ToDatabaseEx "c:\path\file.txt", "DSN=mydb;", "insert into myimages(image_blob) values(?)"
-------------------------------------------
UploadedFile 属性
================================================
Attributes As Long (Read/Write)
设置和取得文件的系统属性。
可以是以下值的结合。
FILE_ATTR_READONLY = &H1
FILE_ATTR_HIDDEN = &H2
FILE_ATTR_SYSTEM = &H4
FILE_ATTR_DIRECTORY = &H10
FILE_ATTR_ARCHIVE = &H20
FILE_ATTR_NORMAL = &H80
FILE_ATTR_TEMPORARY = &H100
FILE_ATTR_COMPRESSED = &H800

用法:

Response.Write File.Attributes

File.Attributes = File.Attributes + FILE_ATTR_READONLY
-------------------------------------------------------------
Binary As Variant (Read-Only)
返回文件的binary image 。It is a Variant-packed safe array of bytes.
保存文件到数据库的时候有用。

用法:
rs.AddNew
rs("image_blob).Value = File.Binary
rs.Update
-------------------------------------------------------------
ContentType As String (Read-Only)
返回文件的Content-Type。
如:"text/plain" 或 "application/octet-binary".

用法:
Response.Write File.ContentType
-------------------------------------------------------------
CreationTime As Date (Read-Only)
返回文件的创立时间戳。如果是内存文件,这个属性没有定义。

用法:
Response.Write File.CreationTime
-------------------------------------------------------------
Ext As String (Read-Only)
返回文件扩展名。

用法:
Response.Write File.Ext
-------------------------------------------------------------
FileName As String (Read-Only)
返回文件被保存的名称。
如果Upload.OverwriteFiles为False,它可能和原始文件名不同。

用法:
Response.Write File.FileName
-------------------------------------------------------------
Folder As String (Read-Only)
返回文件被保存的文件夹名。
如果是内存文件,和原始文件夹名相同。

用法:
Response.Write File.Folder
-------------------------------------------------------------
ImageHeight As Long (Read-Only)
返回图片的像素高。如果不是图片,返回0。
格式支持BMP, JPG, GIF, 和 PNG。

用法:
Response.Write File.ImageHeight
-------------------------------------------------------------
ImageType As String (Read-Only)
返回图片类型。 可能的返回值有"BMP", "GIF", "JPG", "PNG", 和"TIF" for BMP, GIF, JPEG, PNG 和TIFF images, 分别的, 和"UNKNOWN" (如果文件不是图片,或是已知图片类型以外的。)

用法:
Response.Write File.ImageType
-------------------------------------------------------------
ImageWidth As Long (Read-Only)
返回图片的像素宽。如果不是图片,返回0。
格式支持BMP, JPG, GIF, 和 PNG。

用法:
Response.Write File.ImageWidth
-------------------------------------------------------------
LastAccessTime As Date (Read-Only)
返回文件的上次存取时间戳。如果是内存文件,这个属性没有定义。

用法:
Response.Write File.LastAccessTime
-------------------------------------------------------------
LastWriteTime As Date (Read-Only)
返回文件的上次写入时间戳。如果是内存文件,这个属性没有定义。
除非这个文件是由XUpload或JUpload上传的,并且PreserveFileTime特性是打开的。

用法:
Response.Write File.LastWriteTime
-------------------------------------------------------------
MD5Hash As String (Read-Only)
以十六进制返回文件的MD5 one-way Hash值。

用法:
Response.Write File.MD5Hash
-------------------------------------------------------------
Name As String (Read-Only)
返回文件在表单中对应项目的名称。
这个属性不能取得文件名,应该使用FielName。

用法:
Response.Write File.Name
-------------------------------------------------------------
OriginalFileName As String (Read-Only)
返回文件的原始文件名。

用法:
Response.Write File.OriginalFileName
-------------------------------------------------------------
OriginalFolder As String (Read-Only)
返回文件的原始文件夹。

用法:
Response.Write File.OriginalFolder
-------------------------------------------------------------
OriginalPath As String (Read-Only)
返回文件的原始的完整路径。

用法:
Response.Write File.OriginalPath
-------------------------------------------------------------
OriginalSize As Long (Read-Only)
返回文件的原始大小。
这个值可能和当前大小不同,如果文件通过SetMaxSize方法被截断的时候。

用法:
Response.Write File.OriginalSize
-------------------------------------------------------------
Path As Long (Read-Only)
返回文件在服务器上的完整路径。

用法:
Response.Write File.Path
-------------------------------------------------------------
Size As Long (Read-Only)
返回文件在服务器上的大小。
如果SetMaxSize 特性是有效的,这个值可能和原始大小不同。

用法:
Response.Write File.Size
-------------------------------------------------------------
UploadedFile Methods
======================================================
Sub AllowAccess (Account As String, Flags As Long)
给指定的NT用户增加“允许访问控制(ACE)”到文件的“访问控制列表(ACL)”。

参数Flags 必须是有效的访问类型的组合,这些值在AspUpload.inc中进行了定义,如: GENERIC_ALL。

其他有效的Flag组合包括:

Read (RX):GENERIC_READ + FILE_GENERIC_EXECUTE
Change(RWXD): GENERIC_READ + GENERIC_WRITE + FILE_GENERIC_EXECUTE + DELETE
Full Control (All): GENERIC_ALL

用法:
File.AllowAccess "jsmith", GENERIC_ALL
----------------------------------------------------------
Sub Copy (Path As String, Optional Overwrite)
复制文件到指定的路径,此路径必须是有权限的。
如果参数Overwrite设置为True或者忽略,覆盖存在的文件。如果设置为False,并且指定路径下文件已经存在,那么报错。

用法:
File.Copy "c:\newpath\" & File.FileName
----------------------------------------------------------
Sub CopyVirtual (VirtualPath As String, Optional Overwrite)
和Copy方法相同。 但是参数为虚拟路径,而不是物理路径。
如果系统管理员禁止了Copy方法,用户被迫使用CopyVirtual方法,这将限制他们在自己的目录下进行操作。

用法:
File.CopyVirtual "/uploads/" & File.FileName
----------------------------------------------------------
Sub Delete
删除文件。

用法:
File.Delete
----------------------------------------------------------
Sub DenyAccess (Account As String, Flags As Long)
给指定的NT用户增加“拒绝访问控制(ACE)”到文件的“访问控制列表(ACL)”。

参数Flags必须设置为GENERIC_READ。

用法:
File.DenyAccess "jsmith", GENERIC_ALL
----------------------------------------------------------
Sub ExtractFileName
此方法废止,仅用来保持向后兼容。请使用FileName。

用法:
Response.Write File.ExtractFileName
----------------------------------------------------------
Sub ExtractFolderName
此方法废止,仅用来保持向后兼容。请使用Folder。
用法:

Response.Write File.ExtractFolderName
----------------------------------------------------------
Sub Move (Path As String)
复制文件到指定的路径,该路径必须有权限。

如果文件已经存在,将报错。

副作用:如果此方法成功执行,File.Path 属性将更新为新路径。

用法:
File.Move "c:\newpath\" & File.FileName
----------------------------------------------------------
Sub MoveVirtual (VirtualPath As String)
和Move方法相同,但参数是虚拟路径,而不是物理路径。

用法:
File.MoveVirtual "/uploads/" & File.FileName
----------------------------------------------------------
Sub RevokeAllowance (Account As String)
从文件的ACL移除相应的允许ACE 。

用法:
File.RevokeAllowance "jsmith"
----------------------------------------------------------
Sub RevokeDenial (Account As String)
从文件的ACL移除相应的拒绝ACE 。

用法:
File.RevokeDenial "jsmith"
----------------------------------------------------------
Sub SaveAs (Path As String)
保存文件到指定的路径。
如果UploadManager.OverwriteFiles 设置为False,并且指定的路径下文件已经存在, 次方法将在原文件名后追加(1)(2)等形式的字符,以生成唯一文件名。

此方法是保存内存文件到硬盘的唯一方法。

副作用:如果此方法成功执行, UploadedFile.Path 将更新为新路径(或者源于他的新的唯一文件名。)。

用法:
File.SaveAs "c:\path\" & File.FileName
----------------------------------------------------------
Sub SaveAsVirtual (VirtualPath As String)
和Save方法相同。 但是参数为虚拟路径,而不是物理路径。
如果系统管理员禁止了Save方法,用户被迫使用SaveVirtual方法,这将限制他们在自己的目录下进行操作。
用法:

File.SaveAsVirtual "/path/" & File.FileName
----------------------------------------------------------
Sub SetOwner (Account As String, Flags As Long)
将指定的NT用户指定为文件的NTFS所有者。

用法:
File.SetOwner "jsmith"
----------------------------------------------------------
Sub ToDatabase (Connect As String, SQL As String, Optional MSAccessHeaders)
使用ODBC,将文件作为BLOB保存到数据库。

参数Connect 是一个ODBC连接字符创,可以用系统DSN,或非DSN,如:

"DSN=mydb;UID=sa;PWD=xxxxx"

或者

"Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\path\db.mdb"

但是, Connect 不能使 ADO-style 连接串,也就是说,它不能涉及一个旧的DB provider, 因为这个方法是基于ODBC的。

SQL 是一个INSERT或UPDATE的SQL语句, 用问号作为保存到数据库的文件的占位符,

如:

"INSERT INTO mytable(image_blob, path) values(?, 'c:\path\file.ext')"

或者

"UPDATE mytable SET imageblob = ? WHERE id = 15"

MSAccessHeaders 参数只能用在 MS Access 数据库。

如果设置为True, AspUpload 将试图把文件作为OLE对象保存,而不是作为BLOB。
以便文件可以在MS Access中通过双击字段直接调用。

只有当文件类型存在于OLE document servers 的文件类型(如MS Word documents (*.doc), Excel workbooks (*.xls), bitmaps (*.bmp)等等)中时,此特性才有效。

对于其他类型的文件,(如 *.gif) ,参数 MSAccessHeaders 将被忽略,并且假定为False。

注意:你不能直接下载一个以OLE对象保存的文件。

用法:
File.ToDatabase "DSN=mydb;UID=sa;PWD=xxxx;", "insert into myimages(image_blob) values(?)"

2007-01-14

绝妙的创意

1、洗碗机

2、护苗盒

3、创意灯

4、听力保护耳罩

5、距离提醒器

6、马桶清新盒

7、简易照片夹

8、打盹头部保护器

9、方便筷

10、物品夹

11、效果灯

12、美甲

13、门护

14、雪糕护板

15、护脚蹬

16、衣帽钩

精选文章

如何准备适合的美术器材

按: 本文是少数派共创栏目 《写给家长的幼儿美术启蒙指南》 的第三章,在栏目更新完成之际,免费开放给大家阅读,希望能给正在为挑选美术器材而犯难的你有所帮助。 本栏目在专业的理论基础之上,结合作者多年育儿经验与真实案例,用足够简单、实用、接地气的语言,让每个人都能逐渐掌握美术启蒙所...