|
与此相关的链接
和平海底2 | Auciou | 自由勇专栏
公益:UFO问答与2012年升华
郝相国先生外星人接触官方网站
呼叫星际联邦/祈祷/许愿
我们看不见外星人的原因
郝相国先生与外星人接触进展(6)
郝相国先生与外星人接触进展(5)
Blog存档 Archives
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)
| 分类文档:编程 87篇: |
快完成了 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/别名”的方式访问本机的网站,将无法实现这种便利。 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万次或以内,差别不大。因此,经过上述程序的测试,在“循环到”做运算,对程序的速度是有轻微影响的,尽可能避免在“循环到”这里做运算。 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。 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。 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 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。 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篇: 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。 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错误页面各有优势。它们的一些区别: 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列表双重判断,增加了判断的条件和准确性。 2009年07月17日 12:06 “文本替换专家”是一款优秀的批量文本文件的替换/查找工具,体积小,运行速度快。批量文件的查找功能十分便捷,可以从批量的文本文件中找出有搜索的关键词的文件。例如您编写的程序中,需要查找以前写过的程序中是否使用过某个变量名,可以点击该软件的“查找文件”,“查找内容”处输入要查找的如关键词$aa=,$bb=,以这样的方法。变量名后面加一个“=”号,查找更准确一些,“包含子文件夹”前面的勾需要打上。 因为编写程序的过程中,经常需要包含文件,为了不使全局变量名重名,需要批量查找相关的文件,“文本替换专家”会很快地找到,比手动一个一个文件去查找,节省很多的时间。另外,编写程序的过程中,也经常需要复制程序、复制代码,从这个程序文件复制到另一个文件,所以整个程序的所有文件的变量名尽量不要重名,使用该软件可以检验变量名是否使用过。 “文本替换专家”的最新版本是v2.6,这款软件还不支持UTF-8编码文件中的全角字符。批量替换后,最后一行会产生一个回车符。因此,我在编程中不使用这款软件的批量替换功能,而是使用这款软件强大的批量查找功能,这是一款必不可少的编程工具。 2009年06月25日 09:14 泛域名解析至少有2种方法可以实现。一种是服务器有独立的IP,则服务器不用做任何设置,只在域名管理面板增加*.abc.com的A记录,指向服务器的IP地址。如果A记录不能增加*的子域名,则在别名(CNAME)处增加,详细步骤请见http://www.auiou.com/relevant/00000432.jsp。 另一种方法是不需要独立的IP,需要服务器中您的虚拟目录允许泛域名解析,在网站空间的管理面板设置,或者让空间服务商帮助修改Apache的httpd.conf文件,或者修改IIS设置。然后与上面同样的方法,添加*.abc.com的A记录,就实现了泛域名解析。 在本地测试时,Apache可以很方便地设置虚拟主机,例如以http://ww2.auiou.com的形式在本地测试。本地虚拟主机的设置步骤请见我写的这篇:http://www.auiou.com/relevant/00000457.jsp,第2步。 在本地设置虚拟主机的方法是修改Apache的httpd.conf文件,添加如下代码: <VirtualHost *:80> 添加泛域名解析,将ServerName ww2.auiou.com这一行删除,改为ServerAlias *.auiou.com,如下: <VirtualHost *:80> 重启Apache。之后,你可以使用http://ww2.auiou.com,或者http://ww3.auiou.com,或者http://abcd.auiou.com来访问,均是指向这一目录。在这之前需要修改本地的C:\WINDOWS\system32\drivers\etc\hosts文件,将这些二级域名的IP都指向127.0.0.1。 2009年06月10日 19:25 国内的很多虚拟主机,支持PHP的空间目前有90%以上都是使用Windows主机。也有很多Windows主机支持全能空间,同时支持ASP,PHP,ASP.net等等。PHP空间使用IIS会很慢,应该使用Apache作为服务器程序,最好选用Linux系统,因为Windows系统+Apache虽然速度快,但可能不支持PHP的mail()函数,IIS也一定不支持.htaccess。 下列测试环境都是在Windows XP系统SP3/IE 6.0/3G CPU/1G内存的环境下,只做循环程序和文本输出测试,其它函数未测试。Windows+IIS+PHP和Windows+Apache+PHP的测试结果,分别如下: 从以上的测试中可以看出,循环程序在后台服务器的速度是一样的,输出文本到浏览器的时间不同。在PHP程序方面,Apache从服务器输出文本的速度非常快,IIS输出文本的速度很慢。我编写的程序中,曾使用IIS+PHP,只有几K的页面一个循环100次的程序,IIS的文本输出速度很慢。使用Apache+PHP,在本地测试则以闪电的速度处理完毕。 如果你的网站的博客程序、论坛程序使用PHP,如果出现较慢的情况,不妨检查是否使用了IIS作为后台。如果已经使用IIS作为PHP的服务器后台,不要再使用IIS。全能空间之所以现在很盛行,是因为有需求。如果是流量不大的企业网站,暂时使用全能空间也无妨。流量大的网站,应该选用Apache或Ngnix的服务器后台,最好选用Linux系统。 2009年06月09日 10:30 2008年,2009年这两年,我编写了很多全新的程序,以前从来没有过的结构。这些结构已经实现了高效率,将来在结构上基本上不用大调整。2008年几乎一整年,都是在编写行业网站的程序。2009年,重新编写了2套不同的全新的论坛程序,一个是多版块儿封闭论坛程序(发帖不需要审核),一个是单版块儿的公开论坛程序(发帖需要审核);重新编写了一套全新的多用户的博客程序;重新编写了一套全新的多版块留言板程序;重新编写了一套站内短消息程序;重新编写了注册/登录程序,用户资料管理程序,用户留言公共处理和判断的模块,相应的后台管理程序等等,都是使用PHP编写。 www.ufoaq.com是上述提到的单版块论坛程序。这个网站在今年4月底做了一个较大规模的全新开发,用集中开发的方式。最近做了两三次小规模的修正和开发,还有很多次的小修改,现在已经是一组比较完美的论坛程序。(ufoaq.com使用国外的服务器。) http://www.ufoaq.com/cast/wish/这个留言板程序,是全新的多版块留言板程序,前天集中精力用了大约8个小时完成。这两天做了2次修正,大约各用了3个小时。这个留言板程序的结构,和我以往写的论坛、留言板程序不同。与站内短消息程序的程序结构是完全一样的,所不同的是站内短消息程序不需要审核,此留言板程序的留言需要审核。这个留言板程序的优点是容量无限,随着数据的增加,以及审核后台的数据的增加,访问速度、对服务器CPU、内存的占用率,几乎不会变。所以不用担心维护的问题,审核者可以放心地做其它的事情,或者出去旅行,几个月,几年不进行审核都不会有安全问题,访问速度也不会减慢。由于前两天十分劳累的原因,有一些问题没有处理完毕,比如当审核后台的帖子很多时,审核之后帖子按时间排列的顺序会不正确,今天这个问题已经处理完毕。 这里的单版块程序指的是不能增加功能相同的新栏目,多版块程序可以较方便地增加。 2009年05月27日 20:53 这是我编写的站内短消息程序http://www.szfor.com/user/send/5003。 我在2007年开发完成了第一个站内短消息的程序,用于一个行业的网站,当时开发这个程序大约用了半个月。那个功能做得比较细,比如可以查找好友,添加/删除好友,好友列表调序,允许未注册用户发送短消息,信息回复,单条/全部删除信息,防止重复发送。 前天使用PHP重新编写了这个程序,把以前用户不常用的功能都去除,仅保留重要的功能。用了大约一天的时间,这个站内短消息程序完成。PHP的程序比较简化,自己编写的程序清晰可见,更简单易用,所以大大提高了开发速度,我觉得PHP的开发速度至少是ASP的2~3倍。PHP最主要的优势是程序简化,include()函数很强大,很多网站都是使用PHP开发,服务器租用价格低。 PHP的include()函数的优秀之处在于,include的括号中可使用参数,例如include("../$auf/cg.php");,当include在条件语句中,不符合条件时,不会调用该包含文件,例如测试时把cg.php文件删除,当不符合if的条件时,程序不会报错。例如if ($auf==3) include("../iou/cg.php");,当$auf不为3时,不会调用cg.php。 include()函数使用参数,以及使用if语句来判断是否调用的好处在于,当一个程序页面的访问量大时,可以节省服务器资源。也就是节省了母程序页面的字节,将一个大片的if判断区域写成一个.php文件,然后被判断语句调用是否包含。 祝你早日掌握PHP! 2009年05月18日 22:26 我们的网站,用户在密码重置的时候,会自动发送临时的密码到用户的邮箱,如这里http://www.szfor.com/user/forget/。为了防止用户多次重置而频繁发送邮件,可以设定为15分钟之内只允许发送一次邮件。方法是记录用户上次密码重置的最后时间,PHP使用time()记录最后相对时间即可,ASP使用now记录最后时间。然后调用上次密码重置的最后时间,以变量$auf为例: PHP算出时间差的方法: <?if ((time()-$auf)/60>14){}?> ASP算出时间差的方法: <%if DateDiff("s", auf, now)/60>14 then PHP也可以改成这样: <?$c5=1; 当$c5等于1的时候,程序运行;当$c5不等于1的时候,出现错误提示。 2009年05月16日 23:25 2008年的时候,我用了一个多月的时间,从零编写,开发了一个论坛,与ufoaq.com的功能完全一样。当时开发用了很多的时间,是因为当时第一次编写用户帐号的注册程序,用户的数据库的字段琢磨了好久。一旦字段数量决定了,以后尽量不再改变,所以要花很多的心思去构思好。 我去年开发的论坛程序,是多版块程序,也就是可以增加无数个分版块,所以预留了一些数据库字段。那个论坛程序,增加一个新版块是比较容易的,只需在后台操作一下。而那个网站实际上只需要一个版块,后来也没有增加新版块。 ufoaq.com改用PHP,因为一些思路和去年的程序有些不一样,再加上阅读去年的程序要花好几天的时间才能熟悉当初的思路,于是再次从零编写了一遍,用了大约3~4天的时间,每天工作10多个小时,新的论坛程序一口气完成,大约用了40多个小时。tgfor.com是我前3个月开发的论坛程序,当时用了40多天完成,大约用了400多个小时。原本设想的tgfor.com和我去年开发的论坛程序会比较简单,工作量会比较小,实际上工作量很大,越编写就觉得越有新的功能要实现,一边编写程序一边写新的工作计划。以开发时间计算,tgfor.com的工作量大约是我编写的单用户博客程序auiou.com的10多倍~20多倍,虽然估算工作量的倍数误差很大。ufoaq.com的用户注册程序,与tgfor.com一样,于是使用我编写过的程序,复制过去,然后删去一些不必要的部分,所以大大缩短了程序的开发时间,ufoaq.com几乎没有一行多余的程序。 集中精力连续开发程序,可以缩短开发时间。比如开发一个网站的程序连续不休息用100个小时可以完成,假如分为每天开发2小时,白天要上班做单位的事情,会慢很多。每天开发2小时,实际上真正能够投入高效率开发程序不超过1个小时,也许只有10分钟,因为需要先回忆起昨天的思路才能继续下去。假如以半个小时计算的话,需要200天才可以完成。 ufoaq.com是我理想中的论坛程序。这里对它的功能做一简介: 此论坛的程序没有太多瓶颈,一次把它设计好,今后不用做太多改进。auiou.com测试了将近3年,很稳定。这两个程序的结构,是一样的。较遗憾的是ufoaq.com使用国外服务器,访问速度会比国内服务器慢一些。我原来对UFO并不感兴趣,直到2007年,2008年阅读了新时代的书和信息,知道了外星高智慧生命是广泛存在的,高智慧意味着和平友好,也知道了我们看不见外星人的原因http://www.ufoaq.com/feast/4。于是建立了这个论坛,大家共同讨论,学习,真正地让大家了解地球家园正在发生的变化,了解外星人,改善我们的生活。 2009年05月02日 10:13 在打开多段数据的时候,对于分页的处理会复杂很多。通常情况下,只打开一段数据库,分页程序比较容易实现,如这里http://www.auiou.com/relevant/00000445.jsp。 打开2段,或者3段以上的数据库,然后实现分页,就复杂很多了。2006年的时候,我大约用了3天,更多天的时间,实现打开2段,多段数据库的分页。在纸上演算分页后的结果,然后推算出当前页提取数据的条件语句和算式。2个月前,需要再次编写打开2段数据库的程序,看2年多以前的这段程序,已经看不懂了。因为当时是在纸上演算,根据数据的规律而写出算式。如果没有看到草稿纸上的数字,是根本不会知道算式为什么要这样写。我昨天用了几个小时,重新推算了一遍。虽然实现的结果一样,但是方法不一样,昨天推算了一个新方法。 因为信息量大,大约一个月以上,就会把一些事情忘得干干净净。所以,趁热打铁,赶快记笔记,一定要把思路过程记在笔记上。人所花费的精力是很宝贵的,减少不必要的重复劳动,记笔记是编程的好习惯。笔记给自己看,如果是自己已经很熟悉的程序,就不用记笔记了。 小学五、六年级的数学的综合算式,以及初一的数学中的一元一次方程,对于编程十分重要,编程主要就是使用小学五、六年级、初一这些知识。 2009年04月30日 23:00 如果PHP程序中有错误,有时候后面的语句会接着往下运行,而不是运行到错误的地方停止(PHP程序中如果有严重的错误,会停止之后的程序)。如果在报错的后面有跳转页面语句如Header("Location: http://www.auiou.com");或Header("Location: auf.php");或Header("Location: $cg.php");,或者<meta http-equiv=refresh content=0;url=http://www.auiou.com>,往往会直接跳转,不会提示报错。 即使是有经验的老程序员,在程序调试当中,报错也是十分频繁的。比如少写一个大括号,少一个分号,运算符号误写,或者误增加其它字符,都会出现报错。或者因为程序的算法不恰当,出现报错。 调试时为了检查程序中的错误,应该将PHP中的跳转页面语句删除或屏蔽。发布网页时,再将跳转语句开启。例如我这样屏蔽: <?if ($auf) Header("Location: http://www.auiou.com");?> 临时开启的方法: <?if (!$auf) Header("Location: http://www.auiou.com");?> 发布网页时再删除if ($auf)或者if (!$auf)语句,变为<?Header("Location: http://www.auiou.com");?>。 2009年04月14日 12:22 我从事了6年多的编程工作,在这之前做了将近2年的纯HTML+CSS的网页制作和设计。本博客很多次提到的EmEditor,是一款简洁实用的文本工具。对于PHP编程有十分好的支持,几乎到了完美。我的PHP首选编程工具是EmEditor,使用EmEditor做PHP编程,几乎不用再用其它的文本工具。对于PHP编程,EmEditor有这些优点: 我使用的EmEditor是2002年早期的3.28版本,一直使用到现在。2001年的3.17版本,我当时也使用了很长时间。现在最新的版本是8.04,有网友问我为什么使用早期的版本,因为早期的版本可以打开多个软件窗口,现在的新版本不可以,所有用新版本的EmEditor打开的文件,都是在同一个软件窗口里。还是老版本好用。 总之,EmEditor是一款相当好的适于PHP编程的文本工具,它的安装文件和安装目录只有1兆多~3兆多。 2009年04月10日 18:38 创建一个扩展名为.jsp的文件,在这个.jsp文件中,开头写入如下这句,JSP文件格式即可转化为XML格式: <%@page contentType="text/xml;charset=utf-8"%> 然后可以参考别人的RSS文件的编写方式。 2009年04月09日 12:15 把<title>标题</title>写在网页较前的位置,在<title>标题</title>之前尽量不要加载数据库,也就是数据库的调用尽量写在<title>标题</title>之后。这样可以优先加载title,用户端也可以更快地看到网页标题。 如果加载title之后,网页也较快地加载,说明程序、服务器、网速都快; 2009年04月09日 11:23 去年和Xiaoxiao兄见面的时候,他谈起了我的博客程序。谈到我的博客页面是不是静态的,我说是动态的。博客的正文和评论,都是重新读取数据库。我从2000年底开始学做网页,2006年5月底完成了自己的第一个博客程序。这个博客程序是我正式走向全站动态页的开始,从静态走向全站动态,经历了5年半的时间。我从2001年的冬季开始学习ASP,2002年10月份才学会,在当时写了自己的第一个留言板程序,几个月后把留言板程序改为论坛程序。 在2006年5月以前,我的网页都是静态的扩展名.htm的网页。经历了这5年半的时间,静态页的维护很繁琐,那时候觉得工作量好大。虽然现在的动态页工作量也大,但是动态页可以根据需要自己建立管理后台,对数据进行处理,十分方便。静态页只要稍微有一点改动,很多相关的html页面都要修改,然后用FTP上传。动态页只要修改相关的数据即可。 如何将静态页转为动态页?很简单。只要将原来的.htm或.html的扩展名,改为动态页的扩展名如.php、.asp、.aspx、.jsp,网页的页眉导航条、侧导航条、页脚导航信息这3部分,都用include的方式调用。这样,也很方便搜索引擎对重要的导航页进行索引。 我的Webshu专栏,也由过去的全静态,改为全动态。经过这几年对动态页的访问测试,对服务器的CPU、内存资源的使用,以及访问速度,与静态页差不多。(我现在所有网站使用的服务器空间对CPU的限制是严格的。) 2009年04月07日 18:18 在编程中,有经验的程序员,真正应用于一个项目的技术,不到所有的基本知识的千分之一。同样,在CSS中,也是这样,实际应用中,需要用到的知识不到千分之一。初期的程序员,学习基础知识,基本的原理,核心的技术。中期的程序员,学习和运用更复杂一些的技术。后期的老程序员,回归到最简单的原理,将这些最简单的原理累加起来,实现一个高效率的项目。技术就是这样的一回事儿,一切的努力都是为了实际的应用服务。 简单与复杂并无分别。 2009年03月27日 09:01 如果网页使用了DIV+CSS结构,正文放在左边,侧导航栏放在右边,是更为理想的布局。因为在用户端浏览网页的时候,程序和HTML代码,都是从上到下加载。相应的DIV+CSS结构,也是从左到右读取。左边的内容,优先读取。 如果侧导航栏的内容不是很多,或者不考虑优先加载正文的因素,侧导航栏放在左右均可。
固定链接 | 发表评论(12) | Trackback(1)
$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;?>
假设上面这一行的值是$ac,用户留言时的URL是http://www.abc.com。
$ur5="|".$url."|";
if (strpos($ac,$ur5)){} //此语句表示$url是否在$ac其中。
?>
ServerAlias blo2.auciou.com
DocumentRoot F:/site/auciou
</VirtualHost>
if (strpos($ac,"t")) $tn++; //此语句用于循环程序中
?>
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>
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的简便安装)

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

如果您希望产生的虚拟路径如305.php被POST和GET,使用Rewrite可解决。
Rewrite是否需要写语句,我还没有测试过。
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) {……} //给网友端(用户端)提示错误,并且程序不运行
?>
ServerName ww2.auiou.com
DocumentRoot F:/site/auiou
</VirtualHost>
ServerAlias *.auiou.com
DocumentRoot F:/site/auiou
</VirtualHost>
循环1亿次,IIS+PHP和Apache+PHP都是14秒完成。
循环1000次,使用GB2312/ANSI编码格式,输出的网页体积为5K,IIS+PHP和Apache+PHP都是不到1秒完成,IIS+PHP会慢一些。
循环10万次,输出的网页体积为500K,IIS+PHP运行30秒完成,Apache+PHP只用了不到1秒。
循环100万次,输出的网页体积为5兆,IIS+PHP运行31秒完成,Apache+PHP使用1秒完成。
循环1亿次,IIS+PHP运行31秒完成,Apache+PHP运行到50秒的时候浏览器死机,无法完成。
固定链接 | 发表评论(13) | Trackback(2)
固定链接 | 发表评论(15) | Trackback(0)
注:{}的程序内容为密码重置,以及发送邮件。
……
end if%>
注:end if之前的程序内容为密码重置,以及发送邮件。
if ((time()-$auf)/60<15) $k1="报错提示:请在15分钟之后再次重置。";
if ($k1) $c5=2;
if ($c5==1){
//密码重置的程序,以及发送邮件。
}?>
EmEditor去掉BOM的方法,十分容易,甚至比UltraEdit还要容易。以较新版本的UltraEdit 14.20.1.1000为例,如果你的PHP文件是UTF-8格式,使用UltraEdit另存为、去掉BOM之后,下次再打开这个PHP文件,是以ANSI格式打开,如果这时候在UltraEdit按Ctrl+S,文件格式则会变为ANSI格式。(如果此PHP文件中含有一个或以上的全角字符,则不存在此问题。)
EmEditor则容易很多,只要按Alt+回车,选择“文件”的标签,在“打开时的字符码”,选择“UTF-8”,然后关闭EmEditor。以后打开任何PHP文件,只要按Ctrl+S,或者Ctrl+E,就可以保存为UTF-8编码的无BOM文件。去掉UTF-8文件的BOM的方法详细请见我写的这篇http://www.auiou.com/relevant/00000470.jsp。
固定链接 | 发表评论(18) | Trackback(0)
实例:http://www.auiou.com/feed/,http://www.aufor.com/feed/。
如果网页打开较慢,在服务器做一个简单的html页测试网速。如果测试页打开慢的话,说明服务器的带宽资源不足或者服务器慢,或者自己这边的网速慢。如果测试页打开快的话,如果程序加载title之后,网页加载较慢,说明程序慢,或者服务器慢,或者带宽不足。
最新的评论 Comments:
» 近期的论坛开发日记
» QQ群需要黑名单功能
» 有可能是这样
» 严肃地了解2012
» 祝大家五一快乐
» QQ2010的年龄资料
» ANSI和UTF-8文
» 日记:2010-01-
近期的主题:
有可能是这样
QQ2010的年龄资料很不方便
QQ群需要黑名单功能
祝大家五一快乐
严肃地了解2012
日记:2010-01-17
祈祷website存活
获知真相
日记:2010-01-04
制作了新的博客风格
感受30岁的第1天
日记:2009-12-30
“蛇娃”的病是有希望治愈的
悲剧的原因
为他们的贝岸工作说句公道话
年底的感言
金山词霸与美式英语
有关斜视治疗的研究讨论
感动,回味中……
2个网站挂了
恭喜新博客开通!
快完成了
显卡与显示器“不兼容”偏色解决一例
寻1987年出生,我的被拐走的弟弟王志生(左手通观手,即断掌)
最近
网页中的路径/
循环程序的写法与速度对比
博客防spam/陌生人恶意留言另一方案
二级域名的博客在本地建立虚拟主机
重新编写了Trackback程序
Apache实现多域名解析同一空间简法
Apache在本地建立泛域名虚拟主机简法
使用Apache作为本地虚拟主机预览博客
ixwebhosting更换了服务器
博客+论坛的方式
如何关闭ixwebhosting的访问日志
一张原理图的绘制过程
祝我29周岁生日快乐
Photoshop,CorelDRAW,Word的选用
|