2011年03月19日 09:52
Orshu的论坛程序已经调整4天了,这4天做了很多的调整。调整期间不会影响网站的使用,当这次大修改完毕之后,新程序上传到服务器和调试需要3~5个小时以上的时间,因此届时服务器需要临时暂停几个小时。数据结构再做了新的变化,以前每个论坛的容量为1000×500=50万个主帖,超过这个数量就无法发表新帖了,只能开新的论坛,或者到那时必须修改程序。现在趁着修改,也把这些都做了调整,现在调整为每个论坛的主帖容量是1000×1000×1000个主帖(10亿个),容量足够了。每位用户的站内短消息原来的容量为1000×20=2万条短消息,现在调整为1000×1000×1000×20条(200亿条)。允许注册数最大值原来是1000×1000×1000=10亿个(1000的3次方),为了避免以后不够用再改程序,趁这次修改程序再乘以1000,也就是1000的4次方(1万亿)。在程序上理论上可以支持这么多而尽可能不会影响访问的速度,因为现在是使用虚拟主机,所以网站空间在几年后,或者十几年后可能会爆满,当空间满之后,就需要使用独立服务器,或者将数据拆分到多个服务器上。一台独立服务器约合4000多~6000多元人民币/年以上,一个虚拟主机一年几百元人民币。一台独立服务器大约可以容纳10万人~100万人/每天的访问量,一个虚拟主机的空间大约可以容纳1000人~10万人/每天的访问量。除了与硬件有关系之外,与程序和数据结构也有很大的关系。 站内短消息的容量现在设置得很大,是为了避免以后不够用再修改程序。虽然容量大,但是因为站内短消息数据都是放在同一个空间,所以当同时在线的用户超过一定数量,速度就会慢,因为不是一个很主要的功能,因此把数据暂时都放在同一个空间,只有当流量大时才考虑数据的拆分,把流量分配到另外的服务器上。 因为现在是使用数据拆分的程序结构,为将来的网站拆分做了预留,以减少将来的修改。例如同一个站点的站内短消息、帐号数据,都是可以拆分到不同的服务器上的。理论上,同一个网站的任何数据都可以拆分到不同的服务器上,以提高访问速度,不过拆分时可能要做大量的程序修改的工作,因为有很多个程序文件都是关联的。小的修改,可能只要单独修改一些程序文件即可。大的修改时,相关的所有程序都需要修改。 编写程序需要做大量的规划、修改(修改实际上就是程序的升级),程序开发最重要的条件是要有一个安静、不受打扰的环境,因为外界的干扰对开发速度的影响是很大的,会成倍地增加开发时间。开发期间,必须养成早睡早起的良好习惯,最好是在晚上10点以前睡,早上6点起,这样可以减少很多的疲劳,开发期间如果晚睡晚起会使人极其疲惫。程序有极强的连贯性,如果不休息,一口气把一个大型的程序编写完毕需要100小时的话,如果按照正常的休息时间可能就需要2个月完成。因为休息之后,工作状态会大减,对前面所做的一些工作也会遗忘。如果每天工作2个小时来编写程序,每天的有效工作时间可能只有十几分钟~1个小时,有效工作时间平均为半个小时/天,因此如果不睡觉连续开发100小时可完成的程序,同样的程序每天工作2个小时就需要200天才能完成。 如果一个人每个星期,周一~周五上班,周六一天开发程序8小时,周日休息的话,有效工作时间约为2~4个小时,所以同样连续开发100小时可完成的程序,需要25~50个星期才能完成。这里的有效工作时间,指对于程序的进度而言,因为2次工作的间隔时间越长,忘得越多,需要花很多的时间回顾原来的程序。程序开发的基础技术,并不困难,实际用到的技术可能不到千分之一,学习编程就是直接去做一个项目,相关的技术需要时可以在搜索引擎上找到很多资料。当然,也有很多的技术是网上搜索不到,书上没有的,因为有很多的技术和思路是开发者无意间设想和开发出来的。我设想的思路和规划,都已经在程序上实现了。基础知识,是十分重要的。开发程序,本身是一个研发的过程,对每位开发者都是一个很大的锻炼和挑战。
2011年03月15日 10:01
这次的大修改是因为上次的大修改把多个不同域名的数据全部合并在一起,用户在不同域名的论坛中登录不用重新注册帐号,但是缺点是所有的论坛必须使用同一个空间,所以这次要把论坛拆分为多个不同的空间,但可以使用原来的帐号。这次的大修改,进展比想象中顺利一些,原来计划用15天的时间修改Orshu帐号程序,用10天的时间修改论坛程序,用5天的时间修改英文版的所有相应程序,用5~10天再次修改aufor.com的程序。因为这些站点都是使用Orshu帐号和Orshu的论坛程序,所以只要Orshu程序有修改,相关的站点都需要修改。 现在已经进行5天了,Orshu帐号程序基本上已经修改完了,只差最后的一些测试,估计再过两三天就能完成Orshu帐号程序的修改。修改后在功能上的变化是“站内短消息”,也就是收件箱功能,原来是不同域名是使用相同的数据。例如有网友在ufoaq.com的站内短消息给我发了一条留言,我在ufoaq.com或salusa.net的收件箱都可以看到这条留言。这次改版之后,不同域名的站内短消息的数据库是各自独立的。也就是例如在ufoaq.com,只能看到在这个域名中网友发来的短消息;例如在salusa.net,只能看到网友在salusa.net的平台上发来的短消息。但是,在不同的域名中,登录时的用户名和密码,仍然是同一个帐号,无需重新注册。 在上次的合并的大修改之前,由于程序十分凌乱,无法规划,只能一边修改一边规划;又因为时间十分紧促,压力很大,为了抓紧时间,所以当时决定先把数据合并,等程序调试完成之后,过些时间再进行拆分。这次开始拆分,也是对于上次修改后的程序的再次整理和规划,拆分之后的结构会更好,不同域名的Orshu帐号的站点可以随时转移服务器。 Orshu论坛的地址,将大部分以二级域名、三级域名为主。原来的二级域名下的目录的论坛,例如http://club.orshu.com/group/auc/这样的路径,将改为http://auc.club.orshu.com,为什么要这样改?这是因为http://club.orshu.com/group/dir/下的所有论坛,必须使用同一个空间、或者同一台服务器、或者同一个机房;而如果使用一个独立的二级域名或三级域名,当auc.club.orshu.com的域名流量大时,就可以单独把这个域名转移到另外的服务器。
2011年03月12日 08:24
ufoaq.com,salusa.net,aufor.com等等,都是使用Orshu帐号,您只要在这当中的任意一个网站申请了帐号,就可以在任意的其它域名中用相同的用户名和密码登录。过去因为论坛的数据是合并在一起的,现在开始拆分,在拆分之后,安全问题会出现一些新的变化。 首先关于密码本身,数据库中不会记录您的密码,它记录的是一个加密之后的校验码。这个校验码是经过加密、再经过截取某些字符而产生的,例如123会转化为53575955866542,数据库中可能会从第2位开始截取、倒数第4位结束,也就是截取357595586。数据库中记录的是357595586,任何人都无法还原为53575955866542。并且,53575955866542也无法还原为123。好比24×15=360,175+185=360,当我们获得一个数字360的时候,是无法还原构成它的结果的数字和顺序的,可能是12×30,也可能是30×12,也可能是2×180,也可能是4×90,也可能是2×6×5×6,也可能是72+288,等等。 如果您忘记了密码,可以使用Orshu帐号的找回密码功能,可以点击顶端的“帐号管理→忘记密码”,输入用户名和邮箱之后,会随机产生一个新的临时密码,这个临时密码会在1分钟之内自动发送到您的邮箱。 需要先说明的是Cookies的时间问题。为了方便用户,启用了Cookies,它的作用是用户在一定的时间内不用输入用户名和密码重复登录。在申请帐号时,可以选Cookies的时间,默认为7天内不用输入用户名和密码,如下图: 修改这个Cookies的时间,可以点击顶端的“帐号管理→修改资料”。如果您在公共的电脑上登录,离开前点击“退出”,即可保证帐号的安全问题。 在过去,在一些需要密码校验的登录页面,例如“站内短消息”、发表新帖、回复等功能,密码校验是实时的。也就是当您在公共的电脑A上登录,离开前没有点击“退出”,在任意的其它一台电脑上修改Orshu帐号上的密码,旧密码在公共电脑A上会立即失效,公共电脑A无法再使用您的帐号。 现在由于做了拆分,密码校验流程有了新的变化,请用户留意。但是不变的是,在公共的电脑上登录,离开前点击“退出”,即可保证帐号的安全问题。变化的是修改密码后,如果您在公共的电脑上登录,离开前没有点击“退出”,在另外的电脑上修改密码,是不能实时生效的,可能需要1个小时~1个多小时的时间。用户的数据存放在服务器D上,如果仍然采用实时校验密码,由于是远程数据,会很影响访问速度,因为每次刷新都会连接远程数据库。例如服务器B,服务器C都是使用Orshu帐号,现在的新程序是用户登录后,会给服务器B加载密码校验缓存B,会给服务器C加载密码校验缓存C。这个缓存B、缓存C的时间,程序上可以设置,目前统一设置为1小时。时间越短,安全性越高,但是越会影响访问速度。这个密码校验缓存的含义是1小时内,不会向服务器D发送数据获得新的校验码。1小时之后,访问服务器B的页面,会向服务器D发送一次请求,如果由于网络问题,服务器D连接失败,访问服务器B的页面时,会每隔10分钟向服务器D发送一次请求,以获得新的校验码。 这个安全问题,也是本文介绍的安全问题,是当您在公共的电脑上登录,离开前没有点击“退出”,而产生的安全问题。如果您在公共的电脑上登录,离开前点击“退出”,则不会有这些安全问题。服务器B上的密码校验缓存B、或服务器C上的密码校验缓存C,也可以手动清除,用户点击“手动清除”后,也可以使原来公共的电脑上的密码立即生效,手动清除校验缓存的程序因为时间的关系未开发。开发这一功能会有些复杂,会有很多新的问题。 需要留意的是由于ufoaq.com,salusa.net,aufor.com等使用Orshu帐号的站点,因为是不同的域名,如果您在当中的域名中登录帐号,退出时需要在这些不同的域名中一一点击“退出”。如果是同一个域名下的子域名,例如e.salusa.net、msg.salusa.net、sirius.salusa.net,则只要在其中的任意一个子域名点击“退出”即可。因为PHP的Cookies设置,由于安全问题,不能跨域名,以防止伪造Cookies;但是同一个域名下的子域名,可以一次设置Cookies。 Orshu帐号在特定页面的Cookies时间的说明。对于不同的页面,Cookies时间是单独设置的。申请Orshu帐号时的“Cookies”选项,这个Cookies时间目前对于站内短消息、发表新帖、回复、修改资料页面会起作用,但此时修改资料页面只能查看,提交修改需要输入密码。aufor.com的论坛页面,Cookies时间是单独设置的。
2011年03月09日 17:19
去年底用了30多天的时间把Orshu论坛做了大修改,当时是把多个域名的帐号、数据库全部合并在一起。最近这几天因为meeting,很多国外空间的线路被限制了,Gmail、Google企业邮箱变得很慢,时常打不开。ufoaq.com是Orshu的子论坛,它所在的空间,这两天白天已经彻底不能访问了,早上还能访问一会儿,白天需要用代理才能访问。估计要在3月18日之后,国外的网络才能恢复正常的速度。人为的因素,您懂得。俗话说,“大水冲了龙王庙”,原本都是一家人,何必做这些事情呢? Orshu论坛和帐号的程序要做新的修改,工作量同样很大,这一次是拆分,估计同样至少要30天的全天工作日,因为是使用不同的多个服务器上的空间,所以这次必须开始大规模地使用远程数据库。我没想到日子来得这么快,原本计划也许要在一两年后才需要拆分。这一次拆分之后,流量较大的子论坛可以随时拆分出去,流量小的子论坛的数据可以合并在一起。比如ufoaq.com现在不能访问的问题,如果是在已经拆分的情况下,现在直接转移到另一个空间即可访问。可是因为它现在所在的空间还有其它的域名,不能单独拆分出去。 整个论坛都是我从零独自完成的,经历过几次大的修改,程序也做了很多次的修正和改进,一部分的进程记录在zj7.com的《Orshu论坛程序最新进度》系列,http://www.zj7.com/category/community/。其进程是:2008年完成了第一个ASP列表式论坛程序,现在看来ASP语言太繁琐,当时是花了很多时间艰苦完成的;2009年4月底完成了第一个PHP列表式论坛程序,还是以前的程序结构,但是程序都需要重新编写为PHP语言,PHP程序比ASP程序简化很多,当时是单域名、单版块儿、单语言,整个网站只能有一个论坛;后来调整了一次程序和数据库,使帖子能够支持无限回复;后来改为多版块儿程序,但仍然是单域名、单语言,要么只支持中文,要么只支持英文;2010年7~8月,这个多版块论坛程序再做一次大的修改,改为采用多域名、泛域名解析、预留了中英文的论坛页面,能够直接支持多语言;2010年底新开发了认证论坛。数据结构也做了几次调整,这是也最麻烦的事情之一。 现在需要做的是程序和数据库拆分到各自的域名当中,是一个较大的工程。这次完成之后,论坛帖子暂不采用远程数据库,但这可能不是理想的状态。比较理想的状态是最新的数据使用站内数据库,老数据可以使用远程数据库,这样改起来和测试相当相当地繁琐,如果使用起来效果不理想还需要改回原来的站内数据库。远程数据库的优点是便于分配服务器的资源,也便于网站随时搬家。 每一次大修改,都需要经历大量的规划,其中包含程序和数据结构的规划,有时候是在原来的基础上规划,有时候是做新的规划。更多的是要经历海量、无数次的测试,最后才能完成。咬紧牙关……1个月之后我才能休息。唉,现在不改,以后更麻烦,加油。
2011年02月28日 09:46
每写这个标题的文章,就需要先重复声明一下,使用全能空间是不得已,因为国内支持PHP的空间目前绝大多数都是全能空间,这是很可悲的现实,这篇文章并不是鼓励读者使用全能空间,而是相反地鼓励读者使用Linux+PHP空间,因为Linux+Apache+PHP的空间,几乎都是支持.htaccess文件的,使用.htaccess可以直接实现网址静态化。全能空间运行ASP,速度不会受影响;但全能空间运行PHP,在流量大的时候会有很大的瓶颈,全能空间是使用Windows+IIS+PHP,正如前面在本机的实际测试,有HTML代码或文本输出的时候,循环100万次,都是在Windows XP系统下,IIS+PHP运行31秒完成,Apache+PHP使用1秒完成,速度差别如此之大。 对于使用全能空间的PHP用户,只要阅读《全能空间能够实现静态化》第1篇即可,不用阅读第2篇,PHP的实现较容易;对于使用全能空间的ASP用户,如果想实现静态化,需要阅读第1篇和第2篇。并且,需要认真通读,一定要阅读“说明”的部分。阅读这一两篇文章,是否值得?很值得,因为这项功能的重要性大家都知道,这里用一两篇的篇幅免费分享给读者。过去很少人能够在全能空间下实现静态化,因为全能空间不支持.htaccess文件;也可能有人通过.config文件在Windows下实现了静态化。但是国内的主机商可能有很多人不会做.config文件的相关的设置,我也没有成功过。也许你在这一家主机商支持.config文件,当换到另一家时,他们又不支持,而且又无法配置,这样就会相当的麻烦,要么再换一家主机商,要么放弃静态化,把整个站点的超链接改为动态地址,工作量相当大。并且,国内大多数的Windows主机商,可能不支持.config文件。 利用IIS的404错误页,是一个不错的解决方案,因为多数主机商都能够支持。在建立第1篇、第2篇的404.php之前,需要做这2个步骤的测试: 1、404.php这个文件先不要写入程序,随便写入一段文章,然后通过http://www.yourdomain.com/abc/或http://www.yourdomain.com/abc/1234等方式,测试一下能否访问。如果能够访问,说明404.php已经生效。 2、404.php需要先写入这句来测试,这是决定能否成功的关键: 然后通过http://www.yourdomain.com/abc/或http://www.yourdomain.com/abc/1234等方式来访问,这时候输出的结果是地址栏。在本机或服务器的Apache环境下输出的值是以/开头的,如/abc/1234。IIS环境下可能是很长的路径,如果是这种情况,需要把第1篇、或第2篇404.php的程序中的$j[1].php,改为$j[4].php或者其它的值,逐一在服务器测试,一定可以成功,这是因为在不同的Windows服务器环境下$_SERVER['REQUEST_URI']输出的值不同造成的,而Apache环境下则不会出现这个问题。另外,404.php程序中的$j[1].php,是我在本机建立虚拟主机的环境下测试,如果你没有在本机建立虚拟主机,而是虚拟目录的方式,用http://localhost/site/的方式访问,则要把$j[1].php改为$j[2].php、或$j[3].php等值,依次测试;上传到服务器后仍然要依次测试。
<?=$_SERVER['REQUEST_URI']?>
2011年02月26日 16:03
在前面一篇的404.php这个文件,是我编写的程序实例,这段程序是一个主要的原理,你也可以根据需要来编写或者改进程序。由于时间的关系,当中没有写ASP实现静态化的程序。首先使用全能空间是迫不得已,这2篇文章并不是鼓励读者使用全能空间,而是鼓励读者、以及服务商使用Linux空间,转向PHP,国外很多的网站,都是使用PHP语言开发,甚至也有很多的主机服务商只有使用Linux系统的PHP主机,而不提供Windows主机。PHP的确有很多的优势、优点,是ASP无法媲美的,最显而易见的优点是程序简洁、函数丰富。程序简洁是因为其语句每句都以分号结束,而ASP必须回行,对于常用的程序,PHP可以把它们放在一行,这样在视觉上能大量地减少程序的复杂程度,这也是PHP比ASP开发速度快很多倍的原因之一。学习编程,并不需要精通,因为无论是大型的项目,还是小型的项目,实际的开发中,使用到的编程知识可能不到千分之一,虽然程序总是很复杂(实际上就是麻烦),复杂是因为有大量的问题需要处理,使程序经常是处于凌乱的状态。由于凌乱、以及大量语句的堆积,使其变得复杂。并且有时编程工作越做越多,永远都有做不完的事,永无止境。 这2篇文章的出发点是如果不得不用全能空间,还是可以实现网址静态化的。我不知道之前有没有人用过这种方法,但我也发现了这种方法,于是写了这2篇文章。虽然篇幅稍长了一点,初次使用本方法需要做大量的测试,但是当理解了此方法的原理、熟悉了它的使用步骤,此方法确实是比较简单的。 上一篇的404.php程序,http://www.auiou.com/relevant/00000657.jsp,对于使用全能空间的PHP程序适用。但ASP不能用同样的程序原理,因为PHP的include()函数中可以使用参数,而ASP的include则不能使用参数,由于这一点的差别,使ASP十分不方便。经过测试,PHP与ASP也不能混用,例如写一个测试页404.php,写入包含语句:include("aa.asp"),访问404.php时,仍然会将aa.asp识别为是PHP程序,而不是ASP程序。 经过多次的测试,只能用file_get_contents()函数外部调用的办法。由于ASP语言的include不能使用参数,所以只能借助PHP平台,你还需要掌握一定的PHP知识。全能空间ASP语言实现网址静态化的步骤如下: 1、如果你的网站有控制面板,可以设置404错误页,或者让服务商帮助设置404错误页,此404错误页是根目录的404.php。(而不是404.asp) 2、404.php写入如下程序,实现的原理从下面的程序也可以看出来: 3、把要实现静态化的ASP程序,全部放在根目录的au文件夹中。例如把abc.asp放在au文件夹中,实际路径即是/au/abc.asp,实现静态化后的效果是http://www.yourdomain.com/abc/或http://www.yourdomain.com/abc/1234或http://www.yourdomain.com/abc/1234.html或http://www.yourdomain.com/abc/def/1234.asp等等任意你喜欢的效果,然后在abc.asp写相关的程序获取地址栏信息。 说明:首先要了解的是使用file_get_contents()函数是用来调用远程数据,可能会在一定程度上影响速度;但是由于调用的数据与404.php文件是在同一台服务器,所以可能对速度的影响不大。上述的程序中,为什么一定要用http://www.yourdomain.com……的方式,而不用$i=@file_get_contents("au/$a1");这样的方式?因为我用$i=@file_get_contents("au/$a1");这样的方式测试过,也成功了,但是ASP程序不执行。理论上ASP是可以正常执行的,但是它不执行,所以只能暂时用http://外部调用的方式。使用外部调用的方法,可能并不太适合大型的网站,博客只能凑合用这种方法。因为博客的流量较大,可以算是中型、或中小型的网站。用此方法,静态化后的地址同样不能用GET或POST。 需要特别注意的是$j[1].asp,与前面第1篇的说明一样,由于不同空间,配置环境不一样,需要先在网站的根目录建立一个测试页,查看=$_SERVER['REQUEST_URI']?>返回地址栏的值,在Apache环境下测试返回的值是以/开头的,IIS环境下可能是很长的路径,如果是这种情况,需要把上述程序中的$j[1].asp,改为$j[4].asp或者其它的值,逐一测试。否则,会导致无法成功,因为这是十分关键的一步。 关于404.php这个文件的编码问题。使用默认的ANSI编码即可,如果被它包含的文件、或者被它远程调用的文件是UTF-8编码,经过我长期的测试,并不会影响使用。 除了ASP语言,其它语言,都可以用本篇的方法,也就是404错误页一律使用404.php,在404.php中写入PHP程序,借助PHP平台,然后用file_get_contents()远程调用。如果你所使用的编程语言的include函数(方法)能像PHP一样能够使用参数,404错误页则需要用你所使用的语言,按照第1篇的404.php的程序,改为相应的语言即可。
<?$j=explode("/",$_SERVER['REQUEST_URI']);$a1="$j[1].asp";$i="au/$a1";
if (file_exists($i)){header("HTTP/1.1 200 OK");$i=@file_get_contents("http://www.yourdomain.com/au/$a1");echo $i;$i="";}
else header("HTTP/1.1 404 Not Found");?>
2011年02月25日 12:08
全能空间是中国的主机商广泛使用的,在国外相对成熟的主机商几乎是没有全能空间的。如前的测试:http://s.orshu.com/#45,在有HTML代码或文本输出的时候,循环100万次,都是在Windows XP系统下,IIS+PHP运行31秒完成,Apache+PHP使用1秒完成,速度差别如此之大。当时之所以做这个测试,是因为当时有一个循环几十次的页面,在IIS+PHP下数据是逐行显示,后来安装了Apache+PHP是一瞬间全部显示。 除了在大流量的情况下,IIS+PHP的速度远不如Apache+PHP之外,使用IIS+PHP的全能空间,不支持.htaccess文件。当然,在小流量的情况下,速度差别可能不是很大。如果不得不使用全能空间(因为国内的Linux主机实在是太少了),可喜的是,大多数使用IIS平台的服务器商,都支持自定义404错误页。Apache可以使用一个.htaccess文件可以为整个网站自定义404错误页,也可以每个文件夹单独使用一个.htaccess文件。但IIS,服务商可能一个站点只允许设置一个404错误页,所以本文的方法是使用根目录的404.asp或404.php,用这个文件来判断、自动包含相关的程序文件。总的来说,IIS+PHP有很多功能还是不如Apache+PHP那样方便的。今天经过测试,全能空间也能够使用用错误页,所以写了本文。由于本文是使用IIS的错误页实现静态化,所以不需要配置其它的文件如.htaccess文件、.config文件、也不需要配置Rewrite模块,是比较简单的。 IIS下要实现静态化(伪静态),如果你的网站有控制面板,可以设置404错误,一般服务商是让404错误页放在根目录,ASP语言为404.asp,PHP语言为404.php。如果没有控制面板,可以让服务器商手动设置一下。要实现静态化,需要学习一定的编程知识,在本机调试成功后,再上传,因为需要有大量的调试才会成功。本文的方法可能是书上没有的,也是我很常用的方法,这里举例说明如何实现: 以PHP为例: 将自定义错误页设置为根目录的404.php。404.php写入如下的程序: 说明:在本机测试中,我安装了IIS+PHP,因为IIS下为虚拟目录设置错误页为404.php,但没有成功,所以本机不使用IIS+PHP测试。在本机测试中使用Apache+PHP,并且在本机设置了虚拟主机。在PHP方面,Apache对于PHP要比IIS简化许多,IIS相对更麻烦一些。 第一行$j=explode("/",$_SERVER['REQUEST_URI']);用于获取地址栏,$j[1]是根目录下的第1个层目录名,同理,$j[2]是第2个目录名、$j[3]是第3个目录名,等等,这也是我很常用的读取地址栏的方法。由于不同空间,配置环境不一样,需要先在网站的根目录建立一个测试页,查看<?=$_SERVER['REQUEST_URI']?>返回地址栏的值,Apache环境下返回的值是以/开头的,IIS环境下可能是很长的路径,如果是这种情况,需要把上述程序中的$j[1].php,改为$j[4].php或者其它的值,逐一测试。否则,会导致无法成功,因为这是十分关键的一步。au/$j[1].php,其中au需要在根目录建立一个au的文件夹,需要实现静态化的程序文件全部放在au文件夹。从第2行,可以看出其原理,就是判断au文件夹中的文件是否存在,如果存在,则包含调用;如果不存在,则返回404代码。其中最后一行让不存在时返回404代码,是不可省略的,因为我经过测试,很多全能主机,当设置了404错误页后,访问不存在的文件时,返回的是200正常代码,这会导致搜索引擎错误收录,而降低网站的权重。 要特别注意的是,网页上传到服务器后,如果静态化的网页可以显示,要测试一下网页的状态码,如果返回的不是200页,要修改header("HTTP/1.1 ……")的语句,例如header("Status: 200 OK");以及header("Status: 404 Not Found");。国外的Linux主机较多地可以使用header("Status: 200 OK");语句,国内主机则较多地可以使用header("HTTP/1.1 200 OK");语句。 把所有需要实现静态化的程序文件全部放在au文件夹,如下图: /au/abc.php程序的在本机的预览效果如下图,上传到IIS+PHP的服务器也是这样的效果: /au/defer.php程序在本机的预览的效果如下图: ASP与上面PHP的方法是类似的,步骤和原理大致相同,只要把PHP语句转化为ASP语句。因为测试和转化要比PHP复杂一些,本文暂省略这部分程序,如果有网友需要,我再测试ASP下的静态化。(附:ASP的实现方法,已写在这里:http://www.auiou.com/relevant/00000658.jsp)因为404.asp在IIS下可执行,所以IIS+ASP一定可以实现地址栏静态化。在此也顺便提一下,我从事了6年多的ASP编程,2002年~2009年,后来转向PHP。ASP比PHP繁琐许多,祝大家早日投入PHP的怀抱,因为PHP比ASP容易很多。 如前面的实际测试:Rewrite与404页的区别,http://www.auiou.com/relevant/00000525.jsp,使用404页的页面,既不能获得地址栏的GET,也不能接收POST,但Apache的Rewrite页既可以用GET,也可以用POST。使用本文的方法,如果需要使用GET或POST,只能建立一个实际路径的PHP页或ASP页。 Apache+PHP实现静态化,建立.htaccess文件,编写相关的程序语句即可直接实现。
<?$j=explode("/",$_SERVER['REQUEST_URI']);$i="au/$j[1].php";
if (file_exists($i)){header("HTTP/1.1 200 OK");include($i);}
else header("HTTP/1.1 404 Not Found");?>
本机使用Apache+PHP+本机虚拟主机来测试,并不影响上传到服务器的效果,效果是一样的,服务器的配置是IIS+PHP+远程虚拟主机。在PHP编程中,在本机设置虚拟主机是很必要的,可以减少很多不必要的麻烦,Apache在本机设置虚拟主机很简单,前面已写过,如http://www.auiou.com/relevant/00000576.jsp。


2011年02月05日 09:49
Alexa是网站访问量的世界排名,可以在alexa.com查询每个域名的访问量排名。过年前我开始编写了一个访问统计的程序,使用JavaScript包含调用远程的程序,最初使用file_get_contents()调用远程数据库,测试使用了几天,由于是不同空间服务商的远程数据库,经过测试,速度会慢好几秒,如果是同一空间服务商、同一地区的远程数据库,一般不会影响速度。于是使用<img src=…….php>来激活远程的程序,这样不会影响速度,并且这个img元素使用CSS设置为隐藏,例如将图片高度设置为0,使用position:absolute将这个元素的位置设置为负值,如top:-99;left:-99。使用远程数据库来编写计数器的程序,一是网站访问统计的程序相对于论坛、博客的程序的编写要简单很多,便于程序的设计、练习、调试,二是便于数据的管理,三是程序与数据库可以用不同的空间,甚至可以使用GD强劲的免费空间作为远程数据库。远程数据库的很多优点,如前所述:http://www.auiou.com/relevant/00000633.jsp。 计数器对于访问量小的站点,是很有作用的,因为除此之外再没有别的好办法了,查看服务器的访问日志是一件十分麻烦的事情。这些年来,访问量小的站点我都没有做过访问统计,这是很可惜的。访问量稍大一点的站点,我曾用AdSense作为访问量统计,但是如果多站点都用AdSense,则不能统计出每个站点的访问情况,不知道是哪个站点、哪个页面被访问。如果每个人自己写一个访问统计的程序,就可以评估站点的实际访问情况。如果是多站点、任意的页面,最好的办法就是使用JavaScript包含<script src=……></script>来调用远程的程序,并且这句要放在网页的最后才不会影响网页的打开速度,因为远程的JavaScript包含必须等远程文件加载完毕之后,在这个包含之后的父网页之后的HTML代码才会显示。 网站的总访问量统计对我来说意义不是很大,前几天对我的一些站点做了抽查。下列数据中,我在程序中屏蔽了自己IP,自己的IP不统计。由于一周前是国内的春运高峰,很多网友都是在旅途中,网站的访问量可能会有所下降。半个月~一周前做了抽查,auiou.com的访问量IP数约为500人/天,估计超过2/3的访问量是来自搜索引擎,其中来自百度多于来自Google,估计6:4的比例,还有一些是来自RSS、友情链接,当时的Alexa三个月平均排名为39万多;zj7.com的访问量约为50~100人/天,估计有1/3的访问量来自搜索引擎,其它的访问量是来自auiou.com的链接引用(Trackback)、以及来自ufoaq.com,还有一小部分是来自友情链接,zj7.com的Alexa当时三个月平均排名为145万多;ufoaq.com的访问量约为80~150人以上/天,估计有1/3的访问量来自搜索引擎,其它的访问量也是来自auiou.com和zj7.com的链接、文章内的指向某篇文章的链接,也有不小的一部分访问量是来自友情链接,ufoaq.com的Alexa当时三个月平均排名为310多万。 上述的3个站点中,auiou.com的实际访问量约是zj7.com的5~10倍,auiou.com的Alexa排名为39万多,zj7.com的排名为145万多;ufoaq.com的实际访问量约是zj7.com的1.5~2倍,可是ufoaq.com的Alexa排名却比zj7.com低很多,ufoaq.com的排名为310多万。 访问量低的站点。auciou.com的实际访问量约为5~20人/天,Alexa排名为344万;salusa.net现在的实际访问量约为20~30人以上/天,Alexa排名为1600多万。还有一个每周不超过10 IP的站点,Alexa排名也是1600多万。还有一个曾经很长时间维持在20~30 IP/天的站点,Alexa排名一直为0。 从上面的数据,可以看出Alexa排名与实际访问量不成正比,差距很大。曾有很多人说只有安装Alexa工具条,Alexa才会统计,如果真的是这样,那么Alexa数据就没有意义了,因为相信安装Alexa工具条的用户会很少。只有对每次访问进行统计,Alexa排名才会有意义。从上面的同样访问量的站点,Alexa排名却相距甚远;或者同样的Alexa排名,访问量却相差几十倍;访问量大的站点,Alexa排名却不如访问量小的站点,可以看出Alexa排名的统计并不准确。如果需要统计,自己编写访问量统计的程序,来评估哪个网页访问量大、重要比较有意义。
2011年01月29日 17:16
前些天朋友的企业网站被攻击了,被人挂了木马、修改了首页。原因是他们的企业网站的程序不是自己开发的,而是使用别人开发的公用程序。本来使用这些公用程序应该不会有太多安全的问题,但如果因为使用公用程序而发生了这样网站被黑的事情,原因一是没有修改默认的一些参数和密码,二是或者专门从事做坏事的人熟悉这些公用程序的漏洞。一个公用程序的漏洞如果被做坏事的知道,他们会在网上搜索同样使用这个程序的站点来攻击、修改网页,来获得利益。 如何知道这些漏洞在哪里?一般只有程序开发者自己知道,或者用户在使用中无意中发现的漏洞,或者专门从事干坏事的人熟悉各种漏洞。如果不是程序的原作者,一般人想查找研究程序的漏洞并修补,是相当困难的。很多时候查找别人的程序中潜在的漏洞,比猜银行密码还要难很多倍。一旦被攻击了,也找不出原因。 为什么网页程序中总是会有漏洞?因为扩展名为PHP、ASP等类型的网页,自己本身就是可执行文件,任何一个扩展名为.php或.asp的文件,都可以执行、操作服务器上的任何文件,例如删除文件、修改文件等等。我们经常说“程序”,就是指可执行文件。例如一段遍历文件夹的删除程序,可以在1分钟内删除整个网站的所有文件,或者修改整个网站内所有的文件。由此可见,网站如果稍微有些致命的漏洞,就会被攻击。 是不是自己开发的网站会不安全,其实恰恰相反,自己开发的程序会更安全。因为不是使用公用程序,别人无法知道你开发的程序中的漏洞。 除了安全的问题,自己开发程序还有这些重要的优点:便于改进、功能的扩展。因为使用公用程序再进行开发,实际上相当困难,几乎是不可能的,要比自己从零开始开发要困难很多倍,付出的成本更多。 当然,如果是因为服务器安全的问题,不在本文的讨论之中。
2011年01月21日 22:53
PHP的确是一种十分优秀的网页的程序语言,优秀之处有很多,当你经常使用PHP开发,会发现PHP的创造者对PHP下的功夫,以至于让原本很难实现的功能,PHP直接就能实现,所以PHP是一种相对更为简单易用的语言。使用PHP的另2个原因是国外主机有很多是PHP主机,ASP主机相对较少,如果你想使用国外主机,就必须使用PHP的程序;原因2是国内外使用PHP开发程序的人多,网上能搜索到更多的参考资料。 PHP对于远程数据库方面,有很多种方法可以让我们使用远程数据库。既然PHP在远程数据库方面能够实现,那么就应该适当地使用起来。在什么情况下需要使用远程数据库?对于数据量较大,或者数据量庞大的站点,或者程序项目较多的站点,使用远程数据库便于数据的管理。数据量庞大的站点,如果主站点和数据库的服务器分开,不在同一个域名,或者不在同一个机房,便于站点的转移,或者流量的拆分。程序项目较多的站点,如果项目太多,主站点会越来越凌乱,这时候必须使用子域名来拆分管理,相应的数据库使用远程数据库会比较方便。 例如主站点是A,主要数据存放在服务器B,用户资料存放在服务器C。我是这样分配的,最新的几十条数据存放在主站点A,大量的数据存放在服务器B。用户每次登录时,从服务器C复制相应资料到服务器A中,服务器A的用户资料修改时,再从服务器A复制到服务器C,这样也能实现跨域名的操作。 PHP有一个重要的函数file_get_contents(),用来抓取远程页,也使用这个函数来直接获得远程数据;还有一个重要的函数copy(),可以复制远程文件或者远程网页。使用这2个程序,可以调用或者激活远程的程序,或者向远程服务器发送数据。当然,有时候使用file_get_contents()函数会影响主站点的性能,有时候网页打开会变得很慢,我解决的办法是使用JavaScript的JS文件包含,或者使用AJAX来调用远程的文件,这样可以节省主站点的负担。 从原有的同站点数据库,改为远程数据库,需要编写相应的程序,也是一个很大的工程,但是远程数据库有利于网站的发展。数据库需要实际测试一下速度,如果速度慢,更换一下空间就可以了。比如国内的空间调用国外的远程数据库,速度会很慢,大约需要3~5秒钟以上。我使用IX Web Hosting空间调用Go Daddy的远程数据,速度很快,几乎与站内数据库差不多,一直很稳定,IX空间与GD空间的时差相差3小时。而我使用另一个与GD空间时差相差1小时的空间,调用远程数据库则很慢,需要2~5秒。
2011年01月13日 17:27
过去有很多人是使用修改本机hosts文件的方法,这种方法虽然十分好,但还有更好一些的方法。因为修改本机hosts文件的不方便之处在于,等域名生效之后,需要删除hosts文件中添加的域名。另一方面,我的电脑中保存了3个hosts文件,也就是3个不同的版本,需要用到的时候,执行.bat文件将其替换。你也可以建立很多个hosts文件,用的时候将其替换。由于这3个文件中没有写入要使新修改的域名解析在本机生效,所以每次替换一下,本机C:\WINDOWS\system32\drivers\etc\hosts文件中的记录就会被清除,有些不方便。 于是最近无意中摸索到不用修改hosts文件的方法而使修改的域名解析在本机立即生效。方法就是先在网上搜索各地的DNS,例如你的宽带是广州电信,能否使用湖北的DNS服务器,经过测试,是可以的,全国各地的都可以。如果你的ADSL是电信,就在Google搜索“电信 DNS”,网通则搜索“网通 DNS”,会有很多全国各地的DNS,然后分别ping这些DNS,点击“开始→运行”,输入“ping ***.***.***.** -t”,应该使用与自己的宽带同省,或者邻近省份的DNS,ping值在50ms以内是最佳的,70ms左右也可以,如果没有返回ping值,则不能用。 然后打开域名的控制面板,修改DNS,或者修改A记录,或者修改CNAME,保存,约5分钟后执行下列的步骤: 点击“开始→网络连接”,双击“本地连接”,双击最后一项“TCP/IP”,在最下方选择“使用下面的DNS服务器地址”,“首选DNS服务器”输入一个有效的DNS地址(也就是刚才搜索到的ping较快的DNS),“备用DNS服务器”输入8.8.8.8,或者固定使用其它的,为了方便起见,“备用DNS服务器”一直保持固定不要变,这样会省很多的麻烦,如下图: 然后再点击“开始→网络连接”,双击“本地连接”,点击“断开”,再双击“本地连接”,会再次连接。这个操作因为很常用,直接把“本地连接”设置一个快捷方式比较方便。这时ping一下域名,正常就应该生效了。如果不能生效,“首选DNS服务器”再换一个。3小时后,再将“TCP/IP”的DNS服务器设置为原来的。 无论是修改域名的DNS,还是修改A记录,用上述修改本机使用的DNS服务器的方法,都会立即生效。这是因为域名解析的原理,域名解析是先调用宽带所在的DNS服务器,如果此DNS服务器没有此域名,则会直接从域名所在的服务器中读取。域名的TTL建议设置为3600秒比较好,不要太长也不要太短。如果你在一天内对同一域名修改多次解析,可以多收集省内、邻近省份有效的DNS服务器,循环使用。估计5~10个左右就够用了,把它们妥善地保存起来;如果还是不够用,收集20多个应该足够用了。 本文的作用是需要使域名在本机的DNS、或者域名解析生效,例如对于网站转移、修改域名解析的时候会用到。此方法的优点是本机真正立即生效,还可以用来检查域名的DNS、或者A记录等的设置是否正确。此方法能否立即生效,取决于本机使用的DNS服务器中是否有域名的缓存,而此方法与TTL的时间长短无关。过去我都是需要等几个小时生效,现在用了这种方法,可以立即生效,而不需要等了,这也是我之前有几次突然修改DNS会立即生效的原因,http://www.auiou.com/relevant/00000614.jsp。当然,要使域名的新解析在全国生效,要等浏览者的宽带所在的DNS服务器中此域名的解析缓存结束后才会生效,也就是TTL设置的时间。也有时会遇到域名解析在全国生效的时间会远大于TTL的值,可能另有原因。 当然,如果你的域名流量较大、是全国各地很多网友常在访问,则不适于使用此法,只能用修改本机hosts文件的方法。因为全国的DNS服务器是有限的,在你测试的时候,那些DNS服务器中恰好有这个域名的缓存,则此方法不能奏效。
2011年01月07日 17:32
本文的话题并不是cPanel与泛域名解析之间的关系,而是分别再谈这2个话题。我用的主机使用cPanel的程序版本有一个bug,添加域名有时候会显示“***.com is already configured”,但这时域名并不在Addon Domains栏目里,只能联系客服手动删除,这很明显是程序设计中的一个遗漏而导致的失误,修补这一bug对于程序开发者并不困难,只要发现问题,就能够修复。bug是由于编写程序的过程中,在测试的时候不是每种情况都会想到去测试,用户却出现了这种情况,而在程序中恰好缺少这一种条件,于是出现了bug,程序设计者如果及时收到用户反馈,就可以迅速修正此bug。当然,这类bug通常出现的机率也比较小,合格的程序员,这类bug应该不会超过10%。因为测试的过程中,很多的条件也会考虑到,同一个小程序测试十几次、几十次是很平常的事情,这也是开发程序特别花时间的原因之一,例如用户重复提交信息、或者重复刷新某页面,或者没有完成提交信息而出现的错误等等,很多情况都需要在程序中进行判断,如果判断的条件不足,会导致出错。或者多个程序文件对同一个数据库进行操作,如果其中一个程序文件忘记了编写对此数据库进行处理的程序,这时候就会出现bug。世界上没有完美的程序,没有无漏洞的程序。 泛域名解析对于稍微大一点的网站,是特别重要的。因为使用泛域名解析的二级域名、三级域名、甚至四级域名,可以预留为未来的网站服务器分流,流量不大的时候,这些泛域名解析可以放在同一台服务器,流量大的时候,就可以单独分出来。当网页从原来的域名分离出来之后,由于原来是使用子域名,所以原来的链接并不会改变,只要修改子域名的解析,然后修改相关的程序,使网页从原来的服务器中分离而保存地址不变。 泛域名解析与.htaccess相结合,实现网址静态化,可以更方便地运用,例如一篇文章的地址在过去带查询符?的动态地址是http://www.zj7.com/strive/index.php?id=152&category=internet&year=2011,经过泛域名解析与.htaccess相结合,可以改变为http://strive.internet.zj7.com/2011/152,甚至是http://strive.internet.2011.zj7.com/152,或者流量大的一篇文章单独作为一个域名http://152.strive.internet.2011.zj7.com,这是使用泛域名解析的方式。最后的这一种形式,子域名可以设置为*.zj7.com,也可以设置为*.2011.zj7.com,或者*.internet.2011.zj7.com等等。但是*号必须在最前面,不能是strive.*.zj7.com的形式,这种情况我试过,无法添加。Apache提供的.htaccess十分方便、强大,网址可以以你喜欢的任何形式进行设计,例如我开发的Orshu论坛新版程序是使用泛域名解析与.htaccess相结合实现网址静态化的方式,如 http://www.zj7.com/category/community/。 以http://152.strive.internet.2011.zj7.com域名为例,如果把泛域名解析*.zj7.com指向某一个IP即可实现,域名不需要再作任何设置。在程序中读取地址栏,而http://152.strive.internet.2011.zj7.com这个链接实际上是动态生成的,它的作用完全等价于原来的http://www.zj7.com/strive/index.php?id=152&category=internet&year=2011,所不同的是在程序上做一些改动,同样还可以产生任意的子域名。 以cPanel为控制面板的Linux主机,可以轻松支持泛域名解析。
2011年01月01日 10:12
CP是cPanel的简称,是cPanel公司开发的产品。CP十分强大,目前最为珍贵的功能是它支持泛域名解析,这样不需要独立IP也能实现泛域名解析,我购买独立IP仅仅是为了实现泛域名解析。最近购买了3个使用cPanel的主机控制面板的国外空间,3个空间都是不同的服务商。经过测试,这3个空间都能支持泛域名解析,添加的办法是先在Addon Domains添加主域名如abc.com,然后再在Subdomains添加二级域名,子域名的名称输入*号即可。 泛域名解析的原理很容易理解,Apache可以轻松在本机或者服务器建立泛域名解析,原理和步骤如前所述:http://www.auiou.com/relevant/00000573.jsp。由这个原理和步骤可以看出,Apache建立泛域名解析和普通的域名解析是一样容易的,只是很多的主机商关闭了此权限,不允许添加名称为*的二级域名。 Go Daddy、IX Web Hosting等各大主机商,可能是他们自己开发的面板,都不允许泛域名解析,关闭了泛域名解析的权限,在添加的二级域名中不允许含有*号。DA面板可能不允许泛域名解析,我以前好像试过,现在不记得了。因此,对于需要使用泛域名解析的用户,使用cPanel作为控制面板的主机,是优先考虑的。 当然,CP也不是完美的,还存在着一些问题,比如添加域名时会强制添加一个FTP,因为JavaScript程序设计的原因,添加域名时输入FTP密码,总是会提示Password strength must be at least 1,需要把密码删除几次,再重新输入或者复制才能添加域名。
2010年12月21日 13:24
现在国内很多大的网站,都使用三级域名。例如一级域名是abc.com,二级域名是news.abc.com,三级域名是aa.news.abc.com。子域名与网站目录的排列顺序正好是相反的,子域名是倒着排列。例如通常认为news.abc.com是abc.com的子域名,aa.news.abc.com是news.abc.com的子域名。事实上如果有需要的话,我们也可以设定为news.aa.abc.com,将news与aa互换。如果服务器同一个目录里有多个站点,修改相关的程序,使news与aa互换。 在域名的DNS功能控制面板里,添加二级域名和三级域名、四级域名、甚至更多级的方法是完全一样的,所不同的是二级域名添加的名称中不含“.”(点)这个符号。在这个意义上,二级域名和三级域名、四级域名其实都是一级域名的子域名,也就是news.abc.com和aa.news.abc.com实际上是并列的关系,这个“.”(点)既可以当作是是无实际意义的分隔符,也可以当作是有意义的从属关系,在这个意义上无需区分是二级域名和三级域名、四级域名;也可以认为是子子域名、子子子域名的关系。增加了一个“.”(点)的符号,既可以扩展新的子域名的子域名、子子域名、子子子域名,也可以将它们认为是并列的关系。 举一个实际的例子。例如一个http://1234567890.abc.com的二级域名(域名1),将它拆分为http://1234567.890.abc.com(域名2),或者http://1234.567.890.abc.com(域名3),http://12.34.567.890.abc.com(域名4)。这4个域名,既可以认为都是并列的abc.com的子域名,而不区分是几级域名,当不区分是几级域名时,这4个域名的子域名的名称分别是:1234567890、1234567.890、1234.567.890、12.34.567.890,在这时候,这些“.”(点)可以没有实际意义,也可以有实际意义,这些分隔符可用,也可不用,在于网站程序的调整。这些域名,也可以认为是从属关系,例如域名2是http://890.abc.com的子域名。 使用二级域名和三级域名、四级域名,而不使用网站目录,作用在于为了网站拆分、使用多台服务器做了预留。当子域名很多的时候,有的DNS提供商,提供子域名、或子子域名的DNS服务。假设abc.com的DNS服务器是A,打开A的域名控制面板,添加一个news.abc.com的NS,使其指向B。然后,添加aa.news.abc.com的三级域名时则需要在服务器B的域名控制面板添加,这样节省了DNS服务器A的负担。根据这个原理,abc.com可以更轻松地实现无限个子域名、无限个子子域名、子子子域名,可以指向无限个服务器。 泛域名解析是为了节省服务器成本,因为泛域名解析的域名指向的都是同一个IP,使用同一台服务器,当资金有限而泛域名解析的子域名流量不大时,不可能一个子域名就用一个IP,这时候使用泛域名解析会节省成本。当泛域名中的一个域名流量大时,可以单独把它解析到另一个IP。泛域名解析同样可以使用二级域名、三级域名,等等,例如*.abc.com,*.news.abc.com。
2009年11月29日 08:24
经过这段时间的持续努力,这项工作终于快完成了。2005年~2008年4月做的一个网站,断断续续做了3年的时间才完成。因为程序结构不够理想,有些部分现在觉得有些繁琐,很阻碍新的开发。今年整个删除,重新编写程序。 当全力以赴地写程序的时候,使用的时间似乎是非常“精确”的,不多不少,就是那些时间,总是有一个极限。这个极限时间无法突破,不能再快了。需要半年的时间,就是半年;需要300小时,就是300小时。假如每天编程10小时,连续30天可以编完;如果换成每天编程2小时,实际上可能不是150天完成,每天的有效编程时间可能不到半小时,所以可能需要600天才完成。因为程序有很强的连续性,持续不休息地工作,能够记住前面的思路,间断的时间越长,忘得越多。我在2006年写的一段搜索程序,2年后用了3天的时间才能回忆起来当时的思路,那段程序看了3天,所以现在养成了记笔记的习惯。 编程中总是会遇到很多的难题,什么时候才能实现,完成这个功能?每次稍微咬一下牙,坚持一下,就能完成了,困难的事情也渐渐变得容易了,一回生二回熟。
2009年10月20日 21:07
如果博客地址是http://www.auiou.com/blog/,对外公布或者制作超链接时,使用http://www.auiou.com/blog/较好,最后的一个斜杠最好不要省略。如果网站内部的链接指向一个含有默认文档的文件夹,同样最后的一个斜杠也最好不要省略。 因为http://www.auiou.com/blog与http://www.auiou.com/blog/不同的是,前者是一个并不存在的文件,后者是一个文件夹。无论是Windows主机,还是Linux主机,访问前者,都会返回301代码(重定向),然后浏览器再迅速找到http://www.auiou.com/blog/。 如果你使用Apache在本地建立了虚拟主机,如之前的例子,http://www.auiou.com/relevant/00000572.jsp。例如使用http://ww2.auciou.com访问本机硬盘的网站,网站导航条的超链接、图片连接、背景图片的路径,都可以在href=,src=等后面的值的前面加一个斜杠,表示网站根目录,十分方便,避免了很多路径的问题,例如<a href="/blog/">博客首页</a>,<src="/image/3.jpg">。如果使用“http://localhost/别名”的方式访问本机的网站,将无法实现这种便利。
固定链接 | 发表评论(12) | Trackback(1)
2009年10月18日 20:04
下列测试都是在Windows XP系统SP3/IE 6.0/3G CPU/1G内存,Apache+PHP的环境中,如下程序: <?$j=0; 上述程序循环1亿次,运行结果:100000000,使用18秒完成。 <?$j=0; 上述程序循环1亿次,使用21秒完成。 <?$j=0; 上述程序循环100000001次,使用21秒完成。 上述的第1个和第2个程序中,不同的是“循环到”的方式不一样,第1个程序是直接循环到1亿,第2个程序则是在“循环到”做了一个运算,慢了3秒钟。如果是循环1000万次或以内,差别不大。因此,经过上述程序的测试,在“循环到”做运算,对程序的速度是有轻微影响的,尽可能避免在“循环到”这里做运算。
$au=100000000;
for ($i=1; $i<=$au; $i++) $j++;
echo $j;?>
$au=99999999;
for ($i=1; $i<=$au+1; $i++) $j++;
echo $j;?>
$au=100000000;
for ($i=1; $i<=$au+1; $i++) $j++;
echo $j;?>
2009年10月12日 18:37
防spam的规则,通常不会冲突,规则越多,越减少spam。如果你有时间,一个博客可以设置几条,几十条规则。如之前的规则,http://www.auiou.com/relevant/00000564.jsp,已经可以很有效地防止spam。因为博客是个人博客,再加上判断的程序仅在用户发送表单时才会生效,只要规则不是很多,可能不会影响博客的速度。如果你的博客或者论坛访问量很大,留言数很多,可以将多条规则用include()函数将程序分开,当符合条件时才会调用相应的程序,这是PHP的一大优点,不符合条件不会调用,可有效地大大提高程序的速度。 网友的绝大多数留言都是友好的。如果博客中偶尔出现一条陌生人的恶意留言,可能会影响博主的心情,如果在意,会与这些发布恶意留言的网友的命运发生牵连,与他们的业力发生牵连。留言者,没有权利审判别人。如上面的链接中的方法,可以直接封闭IP。 可以给博客建立留言的安全级别分类,建立信任级别列表,在程序上实现起来较容易。信任级别列表如下: 上述一共有6个列表,分别是好友的用户名列表、好友的URL列表、spam的用户名列表、URL列表、封IP的用户名列表、IP列表。建立的方法是整个列表作为一个字符串,用“|”符号可巧妙地判断用户的关键字是否在其中,这样不用循环程序,用strpos()函数就可以一次判断完成。例如好友的URL列表是: |www.abc.com|wwww.auiou.com|www.cctv.com|www.ad.com| 其它的列表都是如法炮制,注意最前面和最后的“|”不要省略。然后,使用strpos()函数判断www.abc.com是否在$ac的方法是: <$url="www.abc.com"; 这里在$url左右两边各加了一个“|”的符号,就可以准确判断。其它列表的建立和判断方法,都是一样的。http://www.abc.com去掉http://的方法如这里的2、3楼的回复,http://www.auiou.com/relevant/00000466.jsp。 附:这里有一种很特殊的情况,使用strpos()直接使用if (strpos($ac,$ur5)){}的形式,而无需使用if (strpos($ac,$ur5)!==false){},程序不会出错,是因为从第2个字符开始是URL列表。假如用户的URL如www.abc.com位于URL列表的第1个网址,那么strpos($ac,$ur5)的值是1。
假设上面这一行的值是$ac,用户留言时的URL是http://www.abc.com。
$ur5="|".$url."|";
if (strpos($ac,$ur5)){} //此语句表示$url是否在$ac其中。
?>
2009年10月11日 09:26
在本地建立虚拟主机,可以模拟远程,便于调试,之前已经写过几篇,本文介绍的方法与之前的这篇基本上是一样的,阅读这篇也可以实现,http://www.auiou.com/relevant/00000572.jsp。本文介绍的语句是直接用ServerAlias,而不使用ServerName来建立虚拟主机。经过测试,ServerName可以用ServerAlias代替。ServerAlias的使用更为强大方便,ServerAlias可以同一空间绑定多个域名,同一空间泛域名解析,同一空间多个域名的泛域名解析。 在Apache的conf/httpd.conf文件原来的基础上,写入如下4行,就在本地建立了虚拟主机: <VirtualHost *:80> 重启Apache。在C:\WINDOWS\system32\drivers\etc\hosts文件中,添加如下一行: 127.0.0.1 blo2.auciou.com 然后就可以用http://blo2.auciou.com在本地测试博客了。如果你想用http://blog.auciou.com在本地做测试,也是可以的,如上面相同的步骤。但经常需要更改hosts文件的IP,不方便。使用blo2,或者其它4位数的二级域名,是为了与“blog”的4个字母的位数保持一致,便于调试。此方法较易成功,成功后如下截图: Apache+PHP的简便安装,请见我写的这篇http://www.auiou.com/relevant/00000453.jsp。
ServerAlias blo2.auciou.com
DocumentRoot F:/site/auciou
</VirtualHost>
2009年10月10日 11:28
因为xml的Trackback方式,时常会收到批量的spam,并且xml有时会发送失败,所以我放弃这种方式很久了。取而代之的是类似于发表评论的方式,直接在网页上发表Trackback。事实上,评论程序与这里要谈的直接发送Trackback的程序,95%以上是一样的。因为程序大致相同,所以我现在将评论程序、Trackback程序的公共部分写在另外的文件如gr.php,然后gr.php被这2个程序用include()函数调用。 因为www.auciou.com整个Blog都是最近重新编写的,所以Trackback程序也需要重新编写。我的评论程序与Trackback程序的表单名称相同的是:用户名、留言内容;不同的是URL代表的含义不同,Trackback程序有文章标题。相同的表单,可以做相同的处理。 因为我的评论采用审核的方式,所以每个帖都有单独的序号,以便于在后台处理时能够直接找到这个帖子,Trackback在序号后面加个字母“t”。例如3楼帖子的序号是3,4楼正好发了一条Trackback,4楼的序号为4t,5楼评论的序号是5。有了字母“t”,程序就能识别是评论,还是Trackback。 批量审核一篇博客的评论时,$tn值为含有“t”的序号数量,可以计算出本篇博客共有多少个Trackback待审核,$ne计算出共有本篇博客多少个评论(包含Trackback数,因为评论和Trackback都是写在同一组数据库),$ne2=$ne-$tn,$ne2计算出本篇博客有多少个非Trackback的评论。 这样计算$tn的值,假设$ac是帖子的序号: <?$tn=0; 在数据统计中,需要实现的功能是当审核Trackback时,网站的Trackback总数统计加一,评论总数不变;单篇博客的Trackback数和评论数的统计,各加一。 用了4个多小时,程序重新调整完毕,是在原有的评论程序comments.php上,以及审核程序上做的调整,已含有多条规则的防spam功能,与原有功能整合起来很方便。实例:http://www.auciou.com/commence/trackback/79
if (strpos($ac,"t")) $tn++; //此语句用于循环程序中
?>
2009年10月10日 09:46
如之前的方法《Apache在本地建立泛域名虚拟主机简法》,http://www.auiou.com/relevant/00000573.jsp,正文已列出能够实现的步骤,实现起来是比较容易的。主要是归功于Apache强大简便的别名功能ServerAlias和强大简便的泛域名解析功能。 如上面文章中的代码实例,在Apache的conf/httpd.conf文件原来的基础上,再加入一行ServerAlias *.aucgra.com,如下代码: <VirtualHost *:80> 上述代码省略了 ServerAlias aucgra.com这样一行,如果读者需要用如http://aucgra.com在本地测试,可以添加这一行。然后在C:\WINDOWS\system32\drivers\etc\hosts这个hosts文件中,添加需要在本地测试的二级域名,例如: 127.0.0.1 ww2.aucgra.com 之前在hosts添加的域名保留,这样就可以在本地同时实现2个域名的泛域名解析来访问同一个空间,同时使用ww2.auciou.com,ww2.aucgra.com,auciou.com,aucgra.com等等任意域名来访问这个空间。 如果需要添加单独的一个域名,再加入一行ServerAlias www5.webshu.com,如下代码: <VirtualHost *:80> 最后不要忘记重启Apache。Apache+PHP的简便安装,请见我写的这篇http://www.auiou.com/relevant/00000453.jsp。
ServerName auciou.com
ServerAlias *.auciou.com
ServerAlias *.aucgra.com
DocumentRoot F:/site/auciou
</VirtualHost>
127.0.0.1 ww3.aucgra.com
ServerName auciou.com
ServerAlias *.auciou.com
ServerAlias *.aucgra.com
ServerAlias www5.webshu.com
DocumentRoot F:/site/auciou
</VirtualHost>
2009年10月08日 08:55
在本地建立泛域名虚拟主机,可以修改Apache的安装目录下的conf/httpd.conf,如下: <VirtualHost *:80> 重启Apache,就可以在本地同时使用auciou.com和xxx.auciou.com在本地访问,xxx为任意的二级域名,实现了泛域名解析。用此方法,也可以在本地建立多个不同域名的泛域名解析的虚拟主机。 在本地测试时,需要修改hosts文件,打开C:\WINDOWS\system32\drivers\etc\hosts,写入这样的句子: 127.0.0.1 ww2.auciou.com 因为hosts本身没有泛域名解析,所以在本地做测试时,二级域名需要在本地的hosts文件一个一个添加。然后手动备份hosts文件,重装系统之后,覆盖此文件即可。 有关泛域名解析,也可以参考我之前写的2篇:
ServerName auciou.com
ServerAlias *.auciou.com
DocumentRoot F:/site/auciou
</VirtualHost>
127.0.0.1 ww3.auciou.com
127.0.0.1 ww4.auciou.com
127.0.0.1 wwa.auciou.com
127.0.0.1 user.auciou.com
127.0.0.1 blog.auciou.com
http://www.auiou.com/relevant/00000519.jsp
http://www.auiou.com/relevant/00000432.jsp
http://www.auiou.com/relevant/00000453.jsp (Apache+PHP的简便安装)
固定链接 | 发表评论(11) | Trackback(4)
2009年10月07日 21:23
Apache的虚拟目录,或者虚拟主机建立很方便。在Apache里,虚拟主机实际上是一个虚拟目录,所以Apache建立虚拟目录、虚拟主机的方法是完全一样的。如下图,是默认的http://localhost在httpd.conf中的设置方法, 如法炮制,如果我想用http://ww2.auciou.com在本地浏览测试我的博客,将上图的4行复制一遍,然后修改第2行的ServerName和第3行的DocumentRoot的值。修改后如下图: 即: <VirtualHost *:80> 然后重启Apache。你也可以在本地同时建立多个虚拟主机。 打开C:\WINDOWS\system32\drivers\etc\hosts,写入这样的一行: 然后就可以将Apache作为本地虚拟主机预览自己的博客,如下图: Apache+PHP的简便安装,请见我写的这篇http://www.auiou.com/relevant/00000453.jsp。我现在的开发环境,都是基于这个Apache+PHP后台,重装系统后不需要再重新安装Apache+PHP。

ServerName ww2.auciou.com
DocumentRoot F:/site/auciou
</VirtualHost>
127.0.0.1 ww2.auciou.com

2009年09月28日 12:18
我的博客评论设置为不分页,超过500回复,或者一个网页内的评论字数超过200K,设置为关闭此篇评论。本博客也有一篇超过500回复。有网友曾经提问,为什么我不设置为评论分页?主要是为了某种主流风格,将帖子集中在一起,有某一种用户体验。例如MOP,PCPOP的论坛帖子分页,每页是100条或50条帖子,而天涯每页的帖子特别多,他们都保持一定的风格。分页可以节省服务器资源,论坛因为在线人数多,分页可以大大降低服务器的CPU,内存资源。博客因为在线人数相对少,不分页可使内容集中,便于读者浏览。用户体验、程序的效率设计,在于访问量的多少来取舍和设计。 当你的博客评论因为回复太多时,你可以在最后回复,给大家发一个网址,指向一个论坛的帖子,让大家继续在那里讨论,然后关闭这篇博客的评论。 我第一个独立开发的博客程序auiou.com是在2006年完成;3年后,2009年重新编写了另一个博客程序,auciou.com。后者auciou.com已经是一个较为完美,结构简单而效率高,功能简单而实用的程序。2009年独立开发完成了ufoaq.com的论坛程序,这个论坛程序结构简单而容量大,每篇帖子是30个回复为一个分页,每篇帖子均可无限回复。经过测试,这3个程序很稳定,路遥知马力,要感谢PHP!:)估计至少可以用几十年,因为在程序结构上已经有了预留,不需要再大调整。我第一个论坛程序是2002年开发的webshu.com的ASP论坛,那个程序虽然速度也比较快,但是不够完美,2004年关闭了。那时候Webshu论坛的旧帖,需要手工一页一页地转化为静态页,以减小数据库,现在已经不需要转为静态了。 我觉得比较好的模式是用博客+论坛的方式,如第1段提到的方式,当超过500回复,通知网友在论坛继续讨论。当然,气氛可能会不一样了。ufoaq.com是我编写的全新的单版块论坛程序,整个网站仅一个论坛,此程序有防spam的很多功能,如之前提到的 http://www.auiou.com/relevant/00000564.jsp,http://www.auiou.com/relevant/00000524.jsp,http://www.auiou.com/relevant/00000515.jsp,但还有图片上传功能有待处理。目前,我已经完成将此论坛程序设计为多版块论坛程序,可能在不久,会应用于webshu.com。 很多由ASP转向PHP的程序开发者,都不再开发ASP。因为PHP有很多反复无数次用的核心程序更简洁,我已经用ASP独立编写完成过大型的论坛程序,以及博客程序;也用PHP独立编写完成过大型的论坛程序,博客程序。对我个人来说,PHP的开发速度是ASP的2~3倍以上,更简单,节省很多的时间。ASP的程序,则比较复杂,在做一个大型项目的时候,PHP可以节省很多脑力。所以PHP是比较理想的网页编程语言,网上的PHP资源也很丰富。我开发的这些程序的数据库存储原理,都是相同的,这将近7年来,基本上没有变过。 我们仍然不要放弃论坛模式。因为博客只能博主发布主帖,论坛大家都可以发布。博客与论坛两者互补,就更理想了。
2009年09月24日 12:52
博客存档文件的命名我使用数字的方式,假设http://www.auciou.com/spark/72,也有很多Blogger使用英文的方式,假设http://www.auciou.com/spark/make-an-easy-audio-converter。 使用数字的方式好处在于: 使用英文的方式的好处在于: 防止批量spam的方法也很多,例如这里 http://www.auiou.com/relevant/00000564.jsp。
2009年09月24日 12:24
我的博客已使用这些规则。
2009年09月15日 20:20
auciou.com已经重新调整完毕。cutegd.com是我的第一个Blog,在2005年的过年开通。后来域名改为auciou.com,cutegd不再使用。 auciou.com的程序与auiou.com的程序不一样。前几天重新编写和修改了auciou.com的程序,有很多都是新写的程序。还有Trackback和URL认证功能有待处理,现在此博客已经编写了防灌水的程序。 这一次把空间转移到ixwebhosting,经过测试,效果满意。ixwebhosting空间从今年2月开始使用,至今已经7个多月。ixwebhosting的空间使用中国网通访问,速度较好,在280多~300多ms。使用中国电信访问,ixwebhosting的速度不如GoDaddy的空间。
2009年07月26日 17:04
Rewrite与404错误页面各有优势。它们的一些区别:
如果您希望产生的虚拟路径如305.php被POST和GET,使用Rewrite可解决。
Rewrite是否需要写语句,我还没有测试过。
2009年07月25日 23:38
我设计的防灌水程序和封IP程序,已经在ufoaq.com实施了一个多月,效果很好,既简单又高效,比我在2006年设计的封IP程序又简单了一些。防灌水程序主要是通过写入Cookies,封IP程序是通过写入Cookies兼直接从数据库读封IP的列表,本文以PHP为例。因为本程序需要写入Cookies,请在最外层的程序如post.php、reply.php、submit.php等等的最开头写入<?ob_start();?>这句,否则会报错。 防灌水程序的原理如下,本程序写在一个留言判别的公用组件如judge.php,此文件被其它文件使用include()函数包含引用: <?$te=30; //可在每个需要引用此公用组件的程序如post.php中声明30秒内只能发一次帖,如果省略$te=30;,那么在如下的一行会将其默认为60。 然后在post.php中写入Cookies,如下: 封IP程序的原理如下: <?$ip=$_SERVER["REMOTE_ADDR"]; 倒数第2行是封闭IP 9天,如果需要让封闭IP为其它的天数,可以修改86400*9为其它值,例如86400*30是封闭IP 30天。本程序的思路是由if ($j) $kx.=$h;这一行判断,如果$_COOKIE[pe]的值不为空,则直接提示IP已被封闭;如果$_COOKIE[pe]为空,则用if (strpos($i,$ip)!==false)判断用户的IP是否在列表当中,如果在列表当中,则提示IP已被封闭,并且写入Cookies。使用Cookies和IP列表双重判断,增加了判断的条件和准确性。
if (!$te) $te=60;
$t9=time();
if ($t9-$_COOKIE[te]<$te) $kx.="您的两次发帖时间不能少于".$te."秒。";
if ($kx) {……} //给网友端(用户端)提示错误,并且程序不运行
?>
<?if (!$kx) setcookie("te",$t9,$t9+$te,"/");?>
$i=…… //$i是从数据库中提取的封IP列表,例如$i的值为"125.33.125.255,133.134.99.1",多个IP用逗号隔开,此值可以在网站后台修改。因为网站后台的结构不同,本文中没有说明修改此值的程序,请程序员自行编写程序。因为下面的程序使用strpos()函数,而不是用循环程序来判断用户的IP是否存在于此$i的值当中,所以可以设置很多个需要封闭的IP,几百个也不会很影响程序的效率。当用户端写入Cookies后,用户已经被完全封闭IP,$i的值也可以全部删除。
$j=$_COOKIE[pe];
$h="您的IP地址已经被锁定。";
if ($j) $kx.=$h;
elseif (strpos($i,$ip)!==false){$kx.=$h;
if (!$j) setcookie("pe","50",time()+86400*9,"/");}
if ($kx) {……} //给网友端(用户端)提示错误,并且程序不运行
?>
2009年07月17日 12:06
“文本替换专家”是一款优秀的批量文本文件的替换/查找工具,体积小,运行速度快。批量文件的查找功能十分便捷,可以从批量的文本文件中找出有搜索的关键词的文件。例如您编写的程序中,需要查找以前写过的程序中是否使用过某个变量名,可以点击该软件的“查找文件”,“查找内容”处输入要查找的如关键词$aa=,$bb=,以这样的方法。变量名后面加一个“=”号,查找更准确一些,“包含子文件夹”前面的勾需要打上。 因为编写程序的过程中,经常需要包含文件,为了不使全局变量名重名,需要批量查找相关的文件,“文本替换专家”会很快地找到,比手动一个一个文件去查找,节省很多的时间。另外,编写程序的过程中,也经常需要复制程序、复制代码,从这个程序文件复制到另一个文件,所以整个程序的所有文件的变量名尽量不要重名,使用该软件可以检验变量名是否使用过。 “文本替换专家”的最新版本是v2.6,这款软件还不支持UTF-8编码文件中的全角字符。批量替换后,最后一行会产生一个回车符。因此,我在编程中不使用这款软件的批量替换功能,而是使用这款软件强大的批量查找功能,这是一款必不可少的编程工具。
| (点击申请) |
文章分类 Category:
Blog的发展 Development
为什么写博客 W-do we Blog
互联网 Internet
社会 Society
教育 Education
BBS社区研究 Community
编程 Program
友人 Younet
QQ研究 QQ Research
公告 Announcement
最新的评论 Comments:
» 毁谤别人的匿名者
» 一家门户网站的博客管理
» Entropay(欧贝
» 又一位不可思议的扮音天
» Google搜索结果在
» 声卡无声硬件排除一例
» 如何关闭ixwebho
» 今天值得纪念的数字
近期的主题:
2012-01-26:多了解一些信息没有坏处
日益低效的快递
关于香港地铁吃东西事件的翻译
2012-01-15:怜悯和爱
惨不忍睹的网站空间(人为造成)
QQ空间不能发表日志/说说/微博解决一例
新年的钟声敲响了
惠州之印象
2011-10-20:最近4个不好的用户体验
女童遭辗压无人帮助视频之感想
网络才是真实的,现实一切都是幻象
本博客的程序有发布的计划
真正的神曲和一些圣乐分享和回顾
Go Daddy的97.74 IP段又被大规模killed
时间过得很快
国外的域名查询也不安全
祝我31周岁生日快乐
有关国内近两年史无前例的清晰的UFO
Android(安卓)平板电脑的使用体验
2011-08-24:经验 & 近期动态
2011-08-03 养花
2011-06-18
2011-06-02:同龄人年轻程度却相差10岁
2011-05-28:随谈(浅谈)中英文输入速度
Go Daddy空间切换系统更换IP时现在需要慎选4GH主机
2011-05-18:随谈现实与理想(8)
随谈:2011-05-18 贴吧与新闻评论的管理
随谈:2011-05-13 心情很沉重很沉重
随谈:2011-05-08 有良知的人会提升
博客不应大量转载
随谈:2011-04-28 通过网络调查真相当中的一个途径之一
有关UFO与2012的谦卑交流与解答(1)
cPanel的主机网页长时间500错误解决一例
版权声明:本博客所有文章,均符合原创和创作共用的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
和平海底2 | Auciou | 自由勇专栏
公益:UFO与真相研究交流区
Gratitude | Time
Blog存档 Archives
2012年01月(N)
2011年10月(8)
2011年09月(4)
2011年08月(2)
2011年06月(2)
2011年05月(6)
2011年04月(10)
2011年03月(16)
2011年02月(16)
2011年01月(15)
2010年12月(12)
2010年11月(9)
2010年10月(3)
2010年05月(4)
2010年01月(7)
2009年12月(10)
2009年11月(4)
2009年10月(8)
2009年09月(24)
2009年08月(20)
2009年07月(6)
2009年06月(11)
2009年05月(16)
2009年04月(20)
2009年03月(29)
2009年02月(18)
2009年01月(15)
2008年12月(17)
2008年11月(10)
2008年10月(13)
2008年09月(8)
2008年08月(4)
2008年07月(5)
2008年06月(9)
2008年05月(12)
2008年04月(15)
2008年03月(26)
2008年02月(22)
2008年01月(29)
2007年12月(30)
2007年11月(28)
2007年10月(30)
2007年09月(8)
2007年08月(8)
2007年07月(21)
2007年06月(23)
2007年05月(31)
2007年04月(34)
2007年03月(29)
2007年02月(18)
2007年01月(41)
2006年12月(23)
2006年11月(10)
2006年10月(10)
2006年09月(29)
2006年08月(33)
2006年07月(17)
2006年06月(30)
2006年05月(4)
2006年01月(3)
2005年09月(4)