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。
ServerName ww2.auiou.com
DocumentRoot F:/site/auiou
</VirtualHost>
ServerAlias *.auiou.com
DocumentRoot F:/site/auiou
</VirtualHost>
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系统。
循环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秒的时候浏览器死机,无法完成。
固定链接 | 发表评论(14) | Trackback(3)
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://e.orshu.com/send/5001。 我在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!
固定链接 | 发表评论(15) | Trackback(0)
2009年05月18日 22:26
我们的网站,用户在密码重置的时候,会自动发送临时的密码到用户的邮箱,如这里http://e.orshu.com/m/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的时候,出现错误提示。
注:{}的程序内容为密码重置,以及发送邮件。
……
end if%>
注:end if之前的程序内容为密码重置,以及发送邮件。
if ((time()-$auf)/60<15) $k1="报错提示:请在15分钟之后再次重置。";
if ($k1) $c5=2;
if ($c5==1){
//密码重置的程序,以及发送邮件。
}?>
2009年05月16日 23:25
2008年的时候,我用了一个多月的时间,从零编写,开发了一个论坛,与ufoaq.com的功能完全一样。当时开发用了很多的时间,是因为当时第一次编写用户帐号的注册程序,用户的数据库的字段琢磨了好久。一旦字段数量决定了,以后尽量不再改变,所以要花很多的心思去构思好。 我去年开发的论坛程序,是多版块程序,也就是可以增加无数个分版块,所以预留了一些数据库字段。那个论坛程序,增加一个新版块是比较容易的,只需在后台操作一下。而那个网站实际上只需要一个版块,后来也没有增加新版块。 ufoaq.com改用PHP,因为一些思路和去年的程序有些不一样,再加上阅读去年的程序要花好几天的时间才能熟悉当初的思路,于是再次从零编写了一遍,用了大约3~4天的时间,每天工作10多个小时,新的论坛程序一口气完成,大约用了40多个小时。TGF是我前3个月开发的论坛程序,当时用了40多天完成,大约用了400多个小时。原本设想的TGF和我去年开发的论坛程序会比较简单,工作量会比较小,实际上工作量很大,越编写就觉得越有新的功能要实现,一边编写程序一边写新的工作计划。以开发时间计算,TGF的工作量大约是我编写的单用户博客程序auiou.com的10多倍~20多倍,虽然估算工作量的倍数误差很大。ufoaq.com的用户注册程序,与TGF一样,于是使用我编写过的程序,复制过去,然后删去一些不必要的部分,所以大大缩短了程序的开发时间,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兆多。
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。
固定链接 | 发表评论(20) | Trackback(0)
2009年04月10日 18:38
创建一个扩展名为.jsp的文件,在这个.jsp文件中,开头写入如下这句,JSP文件格式即可转化为XML格式: <%@page contentType="text/xml;charset=utf-8"%> 然后可以参考别人的RSS文件的编写方式。
实例:http://www.auiou.com/feed/,http://www.zj7.com/feed/。
2009年04月09日 12:15
把<title>标题</title>写在网页较前的位置,在<title>标题</title>之前尽量不要加载数据库,也就是数据库的调用尽量写在<title>标题</title>之后。这样可以优先加载title,用户端也可以更快地看到网页标题。 如果加载title之后,网页也较快地加载,说明程序、服务器、网速都快;
如果网页打开较慢,在服务器做一个简单的html页测试网速。如果测试页打开慢的话,说明服务器的带宽资源不足或者服务器慢,或者自己这边的网速慢。如果测试页打开快的话,如果程序加载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结构,也是从左到右读取。左边的内容,优先读取。 如果侧导航栏的内容不是很多,或者不考虑优先加载正文的因素,侧导航栏放在左右均可。
固定链接 | 发表评论(17) | Trackback(0)
2009年03月25日 10:56
EmEditor软件,先打开任意一个PHP文件,按Alt+回车,选择“文件”的标签,在“打开时的字符码”,选择“UTF-8”,然后关闭EmEditor。以后打开任何PHP文件,只要按Ctrl+S,或者Ctrl+E,就可以保存为UTF-8编码的无BOM文件,十分方便。 UltraEdit可以点击“文件→另存为”,格式选择“UTF-8无BOM”,英文网页每次都需要这个操作。否则,在按Ctrl+S时,会被保存为ANSI格式。中文网页,在第一次另存为之后,以后只要按Ctrl+S即可。 EmEditor也可以用同样的方法,“文件→另存为”,字符码选择“UTF-8”,去掉“加入 Unicode 署名”前面的勾,英文网页每次都需要这个操作。同样,中文网页,在第一次另存为之后,以后只要按Ctrl+S即可。EmEditor建议按照第一段文字的方法设置,以后无需每次都使用“另存为”。
2009年03月25日 10:38
实例:http://www.zj7.com/feed/,实际路径:http://www.zj7.com/feed/index.php。创建一个扩展名为.php的文件,在这个.php文件中,开头写入如下这句,PHP文件格式即可转化为XML格式: <?header("Content-type: text/xml; charset=utf-8");?> 然后可以参考别人的RSS文件的编写方式,如果已经可以正常运行,后面的文字无需阅读。RSS文件唯一要注意的是<pubDate>标签,对发布时间的格式有严格要求,否则用户第一次订阅您的RSS时,文章无法按发布时间来排列(发布时间的格式仅对用户第一次订阅RSS时有影响,如果格式不正确也不要紧)。 有的网友问,为什么写入这句仍无效?
2009年03月18日 11:25
例如用户发送的网址是http://www.auiou.com/,将它转化为www.auiou.com,去掉http://,以及最后的/。以PHP为例,可以这样做: <?$url=stripslashes($_POST["url"]); 运行结果: 说明:
$j=str_replace("/", "", $url);
$i=strlen($url);
if ($i-strlen($j)==3 && substr($url, $i-1)=="/") $url=substr($url, 0, $i-1);
if (strtolower(substr($url, 0, 7))=="http://") $url=substr($url, 7);?>
2009年03月11日 17:55
3天前有网友问我如何学习PHP,同时也给学习PHP的朋友一点参考。学习编程的方法,就是直接先去做。出现报错,可以查找原因,或在Google和Baidu搜索是否有同样的情况,在测试程序、开发中学习。习惯了,难度并不大。先学习文本数据库、MySQL数据库的写入、读取,这是最核心的部分。对于已经有编程经验的朋友,从原有语言转移到PHP,大约需要1周的时间就可以适应PHP编程。当然,这个时间也因为个人的各种习惯而有差别,不存在聪明与否的原因。在Google搜索“PHP 旧语言的函数”,或者搜索“PHP 要实现的功能或遇到的问题”,就可以找到相应的PHP函数。 没有编程经验的朋友,可以尝试查看别人的程序。事实上,别人的程序是很难读懂的。对于专业的程序员,也是往往很难完全读懂别人的程序,因为一些程序中不容易发现程序员的思路。 思路需要经验,需要灵感,还需要测试。我从2001年开始学习ASP,厚厚的一本书,学了一年,基本上一无所获。2002年~2003年开发留言板和论坛程序,ASP才算学会了。2003年的时候学习PHP,直到2009年,6年的时间,一直没有学会。直到2009年的过年,突然间就学会PHP了。那6年的时间没有学会PHP,很大的原因是我并不那么需要PHP。 不需要精通PHP就可以做项目,一个项目里,用到的知识不到千分之一。在本地建立一个文本文件,把常用的PHP语句、函数,小段的程序,都复制在这里。平时需要用到的时候,从这里复制程序,建立一个自己的“PHP手册”。PHP的开发工具,个人推荐EmEditor,我使用的是2002年的3.28版本。EmEditor的3.28版本,对于PHP编程有十分好的支持,几乎到了完美。EmEditor对于英文的PHP网页中的BOM问题,已经解决。EmEditor最为方便的是查找的时候,相同的关键词会用绿色高亮显示,这个功能对于编程来说是十分重要的。 这儿有个不可思议的体验,很多书都说ASP更简单,PHP的编程难度其实比ASP小一些,PHP更容易一些,功能更强大,有一些程序代码,PHP更简洁。相比较而言,PHP的数组更加方便,PHP的include函数很优秀,可以在include函数中使用变量,直接调用不同的程序文件。
2009年03月11日 10:53
所需软件: 本文的开发环境是WinXP。PHP使用IIS运行,速度很慢。使用Apache运行PHP,速度会相对快很多。MiniApache(2.0.5.2)是一款简化的Apache,只有308K。正如介绍中所说,经常使用的功能并不会少。 经过我很多次的安装和测试,已经比较熟悉这个MiniApache的安装了。为了避免重装系统而重装Apache和PHP,请将它们都安装在D盘上,比如我安装在D:\server。先打造自己的开发环境,安装步骤如: PHPIniDir D:/server/php5 说明:第二行为加载模块,如果没有第三行,PHP无法运行,只显示HTML页。 以后重装系统之后,只要双击D:\server\apache\setup.cmd,选择1,回车,安装,Apache+PHP一步即可完成。
MiniApache(2.0.5.2版本,不是MiniApache for PHP这一款,因为这一款的PHP是PHP4);
php-5.2.8-Win32.zip。
httpd.conf文件必须写入如下这3行:
LoadModule php5_module D:/server/php5/php5apache2.dll
AddType application/x-httpd-php .php
DirectoryIndex index.html这一行是目录的默认文档,改为DirectoryIndex index.php index.html
固定链接 | 发表评论(10) | Trackback(6)
2009年03月02日 00:13
经过大约40天的论坛开发生活,平均每天编程8~10个小时,TGF即将推出。TGF是一个封闭的小型社区,您可以自由创建一个小型的论坛(讨论组)。原先的初衷是可以用于朋友圈,以及专门话题的讨论组,或者亲友论坛,家庭论坛(家庭论坛已取消)。目前设定的是论坛新成员加入均需要审核,将来可以根据用户需要来设定论坛是否需要审核新成员。我感兴趣的《一的法则》中文论坛也将会建立,届时网友们将可以在这里谦卑地交流人生的课程。 基本的功能现在已经差不多完成了,目前还剩下删除功能、回收站、邀请码(认证码,无需审核即可加入成员)、短消息等没有完成,近期即将开通网站。论坛的管理模式如前面所提到的,民主,每个论坛默认状态为最多可设置5名管理员,10名版主,10名贵宾,自愿申请,版主和贵宾谦卑和友好地为大家服务。版主和贵宾的管理权限是一样的,可以审核成员的加入,可以解除成员,可以删除违规帖。参与的用户,楼主可以删除回复中的违规帖。 开发日记如:(为安全起见,有一些文件名在这里做了更改) 2009-01-31 2009-02-01 2009-02-08 2009-02-14 2009-02-17 2009-02-18 2009-02-19 2009-02-20 2009-02-21 2009-02-22 2009-02-25 2009-02-26 2009-02-27 2009-02-28 2009-03-01
rightful.php√
\被替换成\\√
管理后台√
F:\transient\php\post√
Register 验证码√
注册的用户名不能含有特殊字符√
此用户名已存在,请输入其他用户名√
请输入密码√
国家名√
注册新用户√
清除所有的Cookie√
登录√
登录正常写入Cookie√
判别注册论坛时标题中的关键词√
account√
Create a small forum√
用户中心account√
search.php√
用户页面u/√
增加progr.php√
essint.php√
论坛首页√
论坛的欢迎词√
欢迎词改为第2行√
去掉chr(13)√
验证留言中是否有违规内容√
增加验证码√
/user/register/ Email和Website验证非法词语√
增加欢迎词与验证√
字数改为2000字√
tf/undire.php 写入留言√
/group/peace/ aga/oricha.php√
判断留言tf/boonar.php√
论坛翻页√
论坛第二页无法发送√
Post a new topic何时显示√
论坛页面√2
回复帖子√
论坛的关键词回复或者新帖时的验证码√
/group/peace/ 跟帖样式表√
修正回复√
修正Reply (3)数√
论坛带#号报错,去掉来源的#号。√
帖子的编号√
catode1.php√
常用变量名全部变为2位数√
留言页使用<div id=j1>√
回复的页面 10条以后显示√
论坛首页显示更多√
留言禁止HTML√
未发送成功回车符的问题<br>√
第二页回复,跳到第二页√
发帖时,统计网站总数√
发帖时,以及个人统计,论坛统计√
重复发帖改为ID编号与内容相同时,提示为重复发帖√
验证访问权限由Cookies改为目录文件√
注册成功后自动登录√
右侧导航√
运行目录名称改为commence√
管理员/版主后台/commence/manage.php?peace √
bumspr.php√
weavego.php√
管理后台查看新用户√
natail.php超过1000帖自动改名√
新用户名和主页的查看√
新申请论坛的名称和欢迎词的审核harvestinv.php√
applyforafellow.php autur.php 防止重复提交√
申请加入论坛后台提示列表 exceptionalpri.php√
approveafellow.php 审核会员加入√
总管理员可以参与管理√
/commence/apply.php?peace&administrator 检验重复帖√
apply.php√
symbolbum.php√
/commence/approvenewfellows.php?beliefin2012√
在管理后台建立相应的数据库,使其显示审批的记录√
申请加入的重复帖√
注册用户时,防止重新提交√
论坛审核用户√
申请加入论坛√
创建论坛时,防止重复提交√
approveafellow.php防止重复审核√
清除approveafellow.php的统计数√
防止加入申请重复发送√
已经有此权限,无须申请的提示√
论坛/gloh/用户的留言数 统计有误√
approveamanager.php 审核管理员√
申请管理员时,人数已满的提示√
去掉家庭论坛√
审核管理员时,人数已满,无法审核√
审核管理员时,已经审核,提示√
新会员加入,在管理员后台显示√
申请管理员,后台提示√
邀请一名管理员√
管理员人数已满不能增加,如果可以,增加√
rescindamanager.php?peace&administrator 解除后数量减1。√
解除一名管理员√
inviteafellow.php√
解除会员√
如果成员有权限,不能解除会员。√
拒绝加入时,wattc.php同样减1√
统计管理员数量√
在线审核时,无法编辑资料√
Forum profile√
cacia.php 修改欢迎词√
修改标题√
不能解除比自己级别高或者同级别的管理人员√
修改论坛的名称单独审核$nico="&saco=muli&earn=name";√
修改欢迎词单独审核$nico="&saco=mul&earn=salutatory";√
修改论坛的名称和欢迎词的审核√
语言设置√
注册论坛后跳转的页面√
申请/审核版主和贵宾√
审核增加欢迎词√
避免rescindafellow.php?<?=$gn?>的形式√
Links of forums√
Links on the front page√
b/pulgene.php√
每个论坛的友情链接√
去掉右侧的管理员列表登录后才可以看到√
更改名称时,删除/添加列表√
合并t/g/ adm2.php approveamanager.php√ adm3.php inviteamanager.php√ adm4.php rescindamanager.php adm.php apply.php√ admi.php approvemanagers.php√
自助审核版主√
语言设置√
/commence/approvenewfellows.php?peace√
quwidth.php√
中文版√
中文版的target odeli.php√ group.php √
首页√
中文版申请新用户√
2009年02月25日 19:52
分页是程序永恒的主题,2002年的时候我曾经见过一个留言板的分页程序,但是很难读懂。于是我大约在2005年的时候做了一个很大的改进,推算了另一种简单易读的方法,目前我所有的分页程序都是用此方法,这个算法从来没有出过错,无论是ASP、ASP.net、PHP、JSP,还是CGI,都是可以通用的。例如博客或者论坛程序中,以PHP为例,用此程序可以计算出总页数$p、当前页的起始位置$w1的值和结束位置$w2的值,程序如下: <?$pa=$_GET["page"]; //或者省略查询ID名$pa=$_SERVER['QUERY_STRING']; 说明: 分页时,读取多篇博客文章的方法: for ($i=w1; $i<=w2; $i++){} 这是比较简单易读的算法。在搜索程序中,或者打开多段数据库的时候,分页程序就会复杂很多,我曾经连续做了好几天的演算。
if ($pa) $pa=1;
$w3=10;
$w4=$auf/$w3;
$w5=floor($w4);
$p=$w5+1;
if ($w5==$w4) $p=$w5;
if (!$p) $p=1;
$w1=($pa-1)*$w3+1;
$w2=$w3+$w1-1;
if ($w2>$auf) $w2=$auf;?>
2009年02月22日 12:48
如果一个程序有几十行、几百行,如果程序套用3层以上的大括号,检查某个大括号的开始位置,需要花费很多的时间。可以先在本地硬盘制作一个工具,将{替换为{←←!!!,将}替换为!!!→→},如下图: 然后把输出的带有这些特殊符号的程序复制到桌面的一个文件例如5.php,使用文本工具EmEditor打开。然后查找!!!,因为相同的查找关键词EmEditor会用绿色高亮显示,所以查找起来会方便很多,一目了然,如下图: 然后先将内层的大括号从开始到结束部分删除。如下图,先将其选中,然后删除: 最后可以找到,最外层的大括号的开始处是if ($acf)这句。 当然,即使不使用EmEditor的高亮显示查找功能,将{替换为{■←←!!!,将}替换为!!!→→■},使用黑色的方块,会使程序的大括号位置查找起来更加清晰,如下图:



2009年02月15日 22:37
用户发送的表单域中,例如PHP可以使用$_SERVER['HTTP_REFERER']判断post的来源,如果用户是通过本地硬盘的网页,则来源为False。例如编写: $auf=$_SERVER['HTTP_REFERER']; 或者从$auf的值中提取出某些字符串,使其符合一定的条件,再判断用户留言是否写入数据库。为保险起见,也可以再使用一个隐含的表单域<input>,使其为隐含的“验证码”。双重保险,这样可以减少spam。
if ($auf){
// 用户留言写入数据库
}
2009年02月15日 11:26
在我已经知道的范围内,我编写的程序是希望用更简单的方法去实现。虽然已经是比较简便的方法,运行不会出错,在我贴出程序之后,得到了几位朋友的指正,他们的方法更加简便和高效,感谢朋友们的指正!在此做2点更正: PHP的数字在千分位、百万位等增加逗号只要一句程序:number_format($number); 1000以内,不会产生逗号。 PHP的strpos()函数很重要,可以用来实现搜索功能,或者判别一个关键词在某段数据中是否存在等等。如果用strpos()函数来实现此判别的功能,正确的用法应该是使用“全等于”号===,或“不全等于”号!==来判别True或False,例如: if (strpos($ga, $gb)!==false){}
感谢Saturn朋友指出更简便的方法。
例如:
$auf=35080;
$pep=number_format($auf);
$pep的值是35,080。
感谢剪子兄和他的同事,以及一楼的stefyang朋友的指正。
if (strpos($ga, $gb)===false){}
if (strpos($ga, $gb)===True){}
2009年02月11日 09:35
我用过的文本工具主要是EmEditor、EditPlus、UltraEdit这3款,最早不知道这些文本工具的时候我使用记事本,这3款文本工具的功能都比记事本强大、便捷许多。没有一款文本工具是完美的,总是各有各的优点和不足。 EmEditor: 我一直在推荐EmEditor,我也一直使用早期的3.28版本。我大概是从2002年开始使用EmEditor,至今,一直是我的系统必备软件。EmEditor的优点是查找功能十分好,在一个文件里,相同的关键词会用绿色高亮显示,这个功能对于编程来说是十分重要的。EditPlus和UltraEdit均没有相同的关键词高亮显示的功能,在程序里进行查找的时候,我总是需要用到EmEditor。EmEditor 3.28版本没有显示程序的行号,这对我来说并不重要,需要的时候我经常用Ctrl+G来查看行号,它会自动跳到那一行的程序,已经十分习惯了。EditPlus、UltraEdit都有行号显示的功能,我平时较少看左边的行号。每一个回行EmEditor均是用↓表示,在程序里看起来十分方便。 EmEditor和EditPlus的不足是,如果一个网页程序的文件里全部是半角的英文字符,例如英文网页,如果文件是UTF-8编码,去掉了Unicode签名(BOM),使用EmEditor或EditPlus打开,按Ctrl+S直接保存之后文件会变成ANSI编码。必须使用另存为的方式,再选择编码格式为UTF-8,每次都需要这样,很繁琐。EmEditor 3.28版本在另存为的时候,可以去掉Unicode签名,EditPlus 2.11版本不可以去掉Unicode签名。如果一个程序文件是UTF-8编码,当中含有全角字符的话,去掉了Unicode签名(BOM),使用EmEditor或EditPlus直接按Ctrl+S保存,文件格式都是UTF-8编码,都没有问题,同时Unicode签名(BOM)的有无状态也不会改变。因此,不妨尝试将一些完全没有全角字符的英文网页或者include文件文件编码使用ANSI格式,这样不会产生Unicode签名,有全角字符的文件则使用UTF-8编码,并去掉Unicode签名,meta的语言声明仍是UTF-8,不妨一试,很可能不会产生问题。但我还是喜欢meta和文件编码均使用UTF-8,以后不会遇到意外的乱码的问题。 EditPlus: 2003年的时候,剪子兄推荐EditPlus给我。当时我已经很习惯EmEditor,并且EmEditor的功能已经很完美,所以我这几年几乎没有用过EditPlus。EmEditor和EditPlus的共同点是,体积都很小,安装目录只有1兆多,启动很快,一瞬间就可以启动了。 UltraEdit: UltraEdit文本工具的功能很多,安装目录有24兆。制作英文网站,并且是PHP程序的时候,必须用到UltraEdit。因为UltraEdit在保存文件的时候,可以直接保存为没有Unicode签名的UTF-8编码格式。EmEditor每次保存的时候,需要另存为才可以保存为没有BOM的UTF-8编码格式,否则EmEditor直接按Ctrl+S,会保存为ANSI格式。因为当UTF-8文件没有BOM的时候,EmEditor或EditPlus会认为是ANSI格式,以ANSI格式打开文件(当文件中有全角字符,EmEditor或EditPlus均没有这个问题)。UltraEdit比较遗憾的是,不能像EmEditor一样打开多个独立的窗口。 这3款软件里,感觉EmEditor已经很顺手了,使用了约7年的时间。制作英文网页的时候,我使用UltraEdit+EmEditor。使用UltraEdit来编辑,使用EmEditor来查找关键词。
2009年02月09日 14:25
我很喜欢把输出的HTML代码或者文字部分,以直接输出的方式,而不是作为一个字符串使用echo输出。因为当有大片区域的HTML代码的时候,echo的程序写起来比较繁琐,可以简化为<?if (){?>HTML代码<?}?>的形式,这种形式有很大的灵活性,因为在这当中大片区域的HTML代码当中,还可以再包含PHP程序、Javascript等任何代码。例如: <?if ($aa=="2") 可以简化为: <?if ($aa=="2") 如果大片区域的HTML代码较多,PHP可以使用include()函数的方法来节省服务器资源。ASP中也可以用到这种方法来避免大片区域的Response.Write,方法是<%if aa="50" then%>HTML代码<%end if%>,例如: <%if aa="50" then 循环语句也是类似的方法,如<?for (){?>HTML代码或PHP程序<?}?>和<%for i=1 to ac%>HTML代码或ASP程序<%next%>。
{echo "abcd……(大片区域的HTML代码)".$tg;
$iou=20;}
else
{echo "1234567890……(大片区域的HTML代码)".$tg;
$iou=25;}?>
{?>abcd……(大片区域的HTML代码)<?=$tg?>
<?$iou=20;}
else{?>1234567890……(大片区域的HTML代码)<?=$tg?><?$iou=25?><?}?>
iou=20%>大片区域的HTML代码<%=tg%><%end if%>
2009年02月08日 11:41
UltraEdit是一款功能强大的文本工具,可以用于编程。安装UltraEdit之后,默认的设置没有自动换行。设置的方法是,点击菜单栏的“高级→配置”,找到“编辑器→自动换行/制表符设置”,如下图的左边。然后,把“默认为每个文件启用自动换行”,如下图的画红圈部分,设置完成。 如果按Ctrl+W,只能临时切换,下次再启动UltraEdit,就需要再切换,幸好有“配置”这里能够做设置。另外,UltraEdit最大的优点是打开没有Unicode签名(BOM)的UTF-8格式半角英文文件,仍以UTF-8方式打开,也就是不需要BOM,UltraEdit也能够辨别文件编码。
固定链接 | 发表评论(10) | Trackback(0)
2009年02月08日 08:35
一点拙见,如有不正确,欢迎指正,谢谢。中文网站使用ANSI(GB2312)编码,是最理想的编码。因为ANSI编码,半角字符占用一个字节,全角字符占用2个字节。Unicode则是无论半角,还是全角,都占用2个字节。UTF-8编码,半角字符占用1个字节,全角字符占用3个字节,如这里做的对比:http://www.auiou.com/relevant/00001188.jsp。 20楼和21楼的朋友说得很好。ANSI编码不支持韩国语字符,在ANSI编码下韩国语字符会转化成한국어的形式(한국어),一个韩国语字符在ANSI编码中需要占用8个字节,而一个韩国语字符在Unicode编码中占用2个字节,在UTF-8编码中占用3个字节。但愿如20楼朋友所说,希望UTF-16能够解决这一问题。 因此,如果是英文网站,因为都是半角字符,所以网页文件使用ANSI编码,或者UTF-8编码,所占用的服务器资源是一样的。然而中文网站使用ANSI(GB2312)编码,显然会比UTF-8节省10%~30%的硬盘和CPU资源,如上述文章的对比,因为有半角和全角混合,所以会产生10%~30%不等的百分比。好比是ANSI编码的汉字文件占用10兆的空间,UTF-8编码的汉字文件则占用15兆的空间,Unicode编码的汉字文件与ANSI编码同样占用10兆的空间。如果字符均是半角的英文,假如UTF-8格式的文本数据库文件总共是10兆,ANSI编码同样是10兆,Unicode编码则是20兆。所以西方人在开发网页的时候,不使用Unicode编码。 中文网站,无论数据库是使用ANSI编码,或者UTF-8编码,或者Unicode编码,当被用户端页面提取的时候,GB2312语言总是会比UTF-8语言更节省资源,从而提高速度。
2009年02月06日 13:36
如果你的网站有一个独立IP(假设是123.23.55.10),服务器无需任何设置,只要在域名管理和网站程序做一下设置。例如要给webshu.com做泛域名解析,方法是,1、在域名管理面板的A记录增加一个*(也就是*.webshu.com),我试了一下,即时生效。如果A记录不能增加*的子域名,则在别名(CNAME)处增加。2、网站程序里,ASP用Request.ServerVariables("server_name")获得地址栏的域名,PHP用$_SERVER['SERVER_NAME']获得地址栏的域名,然后ASP通过replace()或者mid()和Left()函数,PHP通过str_replace()或者substr()或者explode()来获得二级域名第一个“点”前面的值(假设是hhh)。例如访问http://namsa.webshu.com时,hhh的值是namsa。 需要注意的是,因为别名(CNAME)不能直接指向IP地址,可以用任何已经有的域名如wang.auiou.com来解析这个IP地址123.23.55.10,然后添加的别名*对应的地址是wang.auiou.com。 虽然都是解析到同一个服务器,但是因为二级域名不同,二级域名相当于网站的get查询参数的值,也就是前面提到的hhh。这个值相当重要,假设这个值是auiou,我可以在123.23.55.10的服务器上建立或者让程序自动建立一个目录ck/auiou,在每个网页的include文件建立一个变量,让它的值是ck/auiou(ASP程序如"ck/"&hhh,PHP程序如"ck/".$hhh),使ck/auiou这个目录变成当前泛域名的根目录,每个泛域名的根目录相对路径都用这种方法。访问http://namsa.webshu.com就可以直接访问namsa帐号的首页,访问http://auiou.webshu.com就可以直接访问auiou帐号的首页,等等,无任何跳转定向。至此,轻松地实现了完美的泛域名解析,网站服务器无需任何设置和配置。 在本地测试的时候,可以先把wang.auiou.com解析到127.0.0.1的本地IP地址。 用同样的方法,网站可以绑定无数个顶级域名或者子域名,这不是跳转或者框架嵌入,而是真正地“绑定”,只要网站有独立IP。同样,网站服务器无需任何设置和配置。
2009年02月01日 21:02
在注册程序,或者留言程序中,判别用户发送的数据中是否有非法的关键词,可以用strpos()函数。用法是strpos("abc", "b"),运行的结果是1。如果是strpos("abc", "a"),运行的结果是0;如果是strpos("abc", "d"),运行的结果是空。如下程序: if (strpos($ga, $gb)!=0) {} 或者省略为 大括号里,是根据数据中是否有关键词,来决定是否要执行的程序。我做了一下测试,这里的strpos($ga, $gb),$gb是用户发送的数据,$ga是我们设定的关键词。当如strpos("abc", "a")运行结果为0的时候,与strpos("abc", "d")运行结果为空的时候,上述的if判断都列为同一种情况,导致这个判断会产生失误,使大括号的程序不能正常运行。 解决的办法是,让strpos("abc", "a")运行结果为0的时候,使其变为1,方法是strpos("a".$ga, $gb),也就是在变量$ga前面加任意一个字符,if (strpos("a".$ga, $gb)!=0) {} 或者省略为 if (strpos("a".$ga, $gb)) {}。这样一来,当运行结果为空的时候,结果仍然是空。不再是被判为同一种情况,问题解决。
if (strpos($ga, $gb)) {}
| (点击申请) |
文章分类 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)