Author Archive

如何识别物理cpu个数,几个核,是超线程还是多核心

判断依据:
1.具有相同core id的cpu是同一个core的超线程。
2.具有相同physical id的cpu是同一颗cpu封装的线程或者cores。

英文版:
1.Physical id and core id are not necessarily consecutive but they are unique. Any cpu with the same core id are hyperthreads in the same core.
2.Any cpu with the same physical id are threads or cores in the same physical socket.

实例:

LunarPages的CPU信息:

processor        : 0
vendor_id        : GenuineIntel
cpu family        : 15
model                : 4
model name        : Intel(R) Xeon(TM) CPU 3.00GHz
stepping        : 3
cpu MHz                : 3000.881
cache size        : 2048 KB
physical id        : 0
siblings        : 2
core id                : 0
cpu cores        : 1
fdiv_bug        : no
hlt_bug                : no
f00f_bug        : no
coma_bug        : no
fpu                : yes
fpu_exception        : yes
cpuid level        : 5
wp                : yes
flags                : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl cid xtpr
bogomips        : 6006.73

processor        : 1
vendor_id        : GenuineIntel
cpu family        : 15
model                : 4
model name        : Intel(R) Xeon(TM) CPU 3.00GHz
stepping        : 3
cpu MHz                : 3000.881
cache size        : 2048 KB
physical id        : 0
siblings        : 2
core id                : 0
cpu cores        : 1
fdiv_bug        : no
hlt_bug                : no
f00f_bug        : no
coma_bug        : no
fpu                : yes
fpu_exception        : yes
cpuid level        : 5
wp                : yes
flags                : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl cid xtpr
bogomips        : 5999.40

processor        : 2
vendor_id        : GenuineIntel
cpu family        : 15
model                : 4
model name        : Intel(R) Xeon(TM) CPU 3.00GHz
stepping        : 3
cpu MHz                : 3000.881
cache size        : 2048 KB
physical id        : 3
siblings        : 2
core id                : 3
cpu cores        : 1
fdiv_bug        : no
hlt_bug                : no
f00f_bug        : no
coma_bug        : no
fpu                : yes
fpu_exception        : yes
cpuid level        : 5
wp                : yes
flags                : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl cid xtpr
bogomips        : 5999.08

processor        : 3
vendor_id        : GenuineIntel
cpu family        : 15
model                : 4
model name        : Intel(R) Xeon(TM) CPU 3.00GHz
stepping        : 3
cpu MHz                : 3000.881
cache size        : 2048 KB
physical id        : 3
siblings        : 2
core id                : 3
cpu cores        : 1
fdiv_bug        : no
hlt_bug                : no
f00f_bug        : no
coma_bug        : no
fpu                : yes
fpu_exception        : yes
cpuid level        : 5
wp                : yes
flags                : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl cid xtpr
bogomips        : 5999.55

显示4个逻辑CPU,通过physical id  ,前面两个逻辑cpu的相同,后面两个的相同,所以有两个物理CPU。前面两个的 core id相同,后面的两个core ID相同,说明这两个CPU都是单核。也就是说两个单核cpu,启用了超线程技术。
通过intel的cpu的参数可以初步判断 使用的是两个 Xeon奔腾4CPU ,有点差。。。。
如何获得CPU的详细信息:

linux命令:cat /proc/cpuinfo

用命令判断几个物理CPU,几个核等:

逻辑CPU个数:
# cat /proc/cpuinfo | grep “processor” | wc -l

物理CPU个数:
# cat /proc/cpuinfo | grep “physical id” | sort | uniq | wc -l

每个物理CPU中Core的个数:
# cat /proc/cpuinfo | grep “cpu cores” | wc -l

是否为超线程?
如果有两个逻辑CPU具有相同的”core id”,那么超线程是打开的。

每个物理CPU中逻辑CPU(可能是core, threads或both)的个数:
# cat /proc/cpuinfo | grep “siblings”
其他特征:

目前intel新的多核心cpu都会在后面显示具体的型号数字,例如:

model name        : Intel(R) Xeon(R) CPU           X3230  @ 2.66GHz

说明是 Xeon 3230的cpu,而不显示型号的具体数字的,大部分都是奔腾的CPU

很多主机商都骗人,用奔腾的cpu,却说是多核心的CPU。

探针看到的数据

类型:Intel(R) Xeon(TM) CPU 2.80GHz 缓存:1024 KB
类型:Intel(R) Xeon(TM) CPU 2.80GHz 缓存:1024 KB
类型:Intel(R) Xeon(TM) CPU 2.80GHz 缓存:1024 KB
类型:Intel(R) Xeon(TM) CPU 2.80GHz 缓存:1024 KB

没有具体的型号,缓存1M,一般都是奔腾系列的cpu,或者是intel假双核的cpu,具体要根据上面说的去判断。新的多核心cpu都能看到具体的型号。
另外多核心的xeon的CPU,一般主频都不高,达到2.8和3.0的只有很少的几个高端CPU型号,一般主机商不会用这么好的
大漠孤狼整理,首发站长百科论坛http://bbs.zzbaike.com)转载请注明。

June 4th, 2009  in 服务器技术 4 Comments »

Twiki安装笔记

开始是安装在启用 suEXEC的系统上,安装很容易,基本按照以下几步就完成了:

  1. 下载TWiki,国内下载地址:http://down.zzbaike.com/download/TWiki-476.html
  2. 如果服务器支持在线解压缩就上传压缩包到服务器,不支持就在本地解压以后上传文件到服务器。
  3. /bin/LocalLib.cfg.txt 改名(复制)为/bin/LocalLib.cfg,$twikiLibPath 设置成服务器上lib目录的物理路径,例如cPanel面板的主机一般是 /home/xxxx/public_html/lib
  4. 配置httpd.conf文件,如果没有权限修改这个文件就使用.htaccess.编辑pub-htaccess.txt、root-htaccess.txt、subdir-htaccess.txt,它们是TWiki为pub目录、根目录和其他子目录准备的.htaccess文件范本,你可以编辑它们,然后另存为对应目录下的.htaccess,通过它们可以避免子目录下的文件被直接读取等一系列可能存在的危险.
  5. 运行配置文件 http://yourdomain/twiki/bin/configure ,如果服务器需要后缀才能运行,把文件改名为 configure.pl 或 configure.cgi 再运行。
  6. 如果要支持中文,配置的时候做如下设置:在configure中的Localisation设置需要特别注意,需要选中 {UserInterfaceInternationalisation}、{Languages}{‘zh-cn’} {Enabled}、{UseLocale}这几项设置的复选框,并设置{Site}{Locale}为“zh_CN.UTF-8”,设置{Site} {CharSet}为“UTF-8”,{Site}{Lang}和{Site}{FullLang}为“zh-CN”,这样保存设置之后,打开Wiki就会是中文,并且能够正常的使用和编辑中文了。
  7. 设置好之后,通过bin目录下的view打开Wiki,例如http://drler.com/bin/view ,接下来你就可以按照“INSTALL.html”文件的介绍,尝试一下外观设置、插件安装之类的工作了。

配置的时候要先把bin目录下的.htaccess禁用掉(改个名),要么该目录被保护装不了。我的系统识别不了没有后缀的,所以加一个后缀.pl就可以配置了。

配置之后发现模板显示不正常,版面是乱的,原因是pub目录下的 .htaccess文件有问题,注释掉 php_flag engine off   就可以了,因为我的php是以CGI方式运行的。

这样就完成安装了,管理员帐号就是admin,密码就是你配置的时候输入的那个密码。在suEXEC上运行一切正常。

之后又安装在了一个以DSO方式运行PHP的环境上,安装没什么问题,运行的时候很多文件夹的权限要改成777,但是遇到一个问题,就是删除一个站点是报错,无法删除站点,还没找到具体是什么原因。

大漠孤狼(www.83blog.com)原创,转载请注明

April 24th, 2009  in 网站程序 3 Comments »

cPanel主机(WHM面板)设置指南之概要

这里讲的是cpanel主机的服务器端面板,也就是whm的设置指南。这个是第一部分,主要讲一下cpanel主机的设置步骤。每一个步骤我们会给出对应 于whm面板使用手册中的详细的使用说明。暂时只写这个设置步骤部分和初始化设置的图片教程,其他部分的详细内容以后再写,在没有写好之前可以参考我们翻 译的使用手册。因为时间问题,这个说明一拖再拖,本来半年之前就准备写的,结果直到今天才正式开始。whm详细的使用教程准备做成视频发布,具体时间未 定。

首先推荐本站翻译的官方教程:WebHost Manager 11使用手册

下面来说明拿到一个cpanel主机(租用)或者是安装好cpanel之后需要做哪些工作:

1.初始化设置  这里设置的内容以后还可以修改,见:http://bbs.idcspy.org/thread-43130-1-1.html

2.Tweak Settings  这部分很重要,涉及到服务器的很多设置,如果是对外销售的主机,设置好之后尽量不要改动,具体设置请参考:http://www.idcspy.org/server-config-tweaksettings.html

3.设置服务器的时区,请根据自己的需要设置,对外销售的主机这项设置好也最好别更改 http://www.idcspy.org/server-config-servertime.html

4.在服务器初始化的时候已经设置过 mysql的root密码,确认此密码不要留空。更改服务器的root密码,足够复杂,此密码最好定期修改http://www.idcspy.org/server-config-change-root-pass.html

5.cpanel和whm的升级设置  ,推荐使用稳定版本  http://www.idcspy.org/server-config-updateconfig.html

6.安全设置 这部分很重要,具体要根据服务器的用途来设置,例如是出售的还是自己使用的。推荐做以下几项设置:禁止除自己ip外的ssh连接 设置方法见 http://www.idcspy.org/security-hac.html 关闭普通用户的c和C++编译器,如果是自己用可以不设置 http://www.idcspy.org/security-compilers.html cPHulk Brute Force保护 http://www.idcspy.org/security-hulk.html

7.设置备份  见 http://www.idcspy.org/backup-config.html

8.重新编译apache PHP,把自己需要的模块编译进去。这个根据自己的实际需求选择,需要什么就编译什么,一般 zend optimizer,GD,Gettext,MySQL “Improved” extension等经常用到。推荐apache版本使用2.2,php版本使用5.2以上的,如果是自己使用推荐开启 deflate,EAccelerator for PHP。这部分的设置见:http://www.idcspy.org/software-update-apache.html 里面的内容以后我们还会重点讲解。

到现在,这台服务器就可以投入使用了。现在看到的这个面板只是服务器的面板,还不能用来建网站,所以还需要新建一个cpanel账户才可以。
新建cpanel账户:http://www.idcspy.org/account-functions-creatnewacct.html
建好账户以后,用你填写的信息登录cpanel面板就可以使用了,和使用一个cpanel的虚拟主机没有什么区别,教程请参考:http://kb.idcspy.org/CPanel

关于账户的设置有两部分,都是很重要的,以后经常会遇到,请大家仔细阅读使用手册中的相关内容:
http://www.idcspy.org/account-info.html
http://www.idcspy.org/account-functions.html

大漠孤狼原创,首发于 美国主机侦探 (www.idcspy.org) 转载请注明

March 20th, 2009  in 虚拟主机, 服务器技术 5 Comments »

mediawiki升级教程

mediawiki升级需要shell权限,也就是要ssh登录执行升级脚本。本教程讲的就是利用shell来升级的,除此之外还有一些其他方法,如果您没有ssh权限,不具备此种升级条件,请使用其他方法。因为其他方法我没有测试过,这里就不写了,请参考mediawiki官方的说明:http://www.mediawiki.org/wiki/Manual:Upgrading

升级步骤:

1.备份原来的文件,包括数据库和网页文件。可以在安装目录下建立一个backup的文件夹,将就文件都移动过去,有些文件升级的时候还要用到,这样操作比上传下载要方便。

2.下载mediawiki的新版本。国内请到这里下载,速度快一些:http://down.zzbaike.com/download/mediawiki-676.html

3.把下载的文件上传到服务器(也可以直接从服务器下载),然后解压缩。如果不支持解压缩的,就在本地解压缩之后上传。

4.把AdminSetting.sample修改为 AdminSetting.php,编辑该文件,写上数据库的用户和密码。

$wgDBadminuser      = ‘user’;   //填写数据库用户
$wgDBadminpassword  = ‘password’;  //数据库密码

5.将原来的LocalSettings.php复制到安装目录,设置可以写入

6.ssh登录服务器,进入maintenance目录,执行:

$ php update.php --aconf ../AdminSettings.php

等运行完成就升级好了。

7.网站logo .htaccess文件 images文件夹从备份目录移动到mediawiki的安装目录

8.登录网站检查是否有错误,没有错误就升级成功了。
有问题请到 http://bbs.zzbaike.com/forum-23-1.html 提出,附上错误的详细信息,最好包含error log中的错误信息。

本文由大漠孤狼( www.83blog.com )原创,转载请注明。
February 11th, 2009  in 网站程序 2 Comments »

WordPress主题制作电子书下载(PDF)

本文档是WordPress主题制作的入门指导,详细分析了WordPress主题的每个文件,并对常用的函数使用参数做了详细的介绍。只要您具有基本的html及css知识,通过学习本文档就可以掌握WordPress主题的制作了

为了方便大家阅读,制作了详细的目录及书签。对于PDF电子书来说,我认为书签使用起来更方便一些,希望大家能够习惯电子书的阅读方式。

本电子书由WordPress啦!的小雯子写作,我调整了一下版面并制作成本电子书,获取WordPress的更多信息请大家访问WordPress啦( www.wordpress.la ),上面有WordPress使用手册,评论,主题,以及关于WordPress的最新新闻。

电子书地址: http://doc.zzbaike.com/wordpress/book/wordpress-themes.pdf
点击就可以阅读,如果要下载单击右键选择 另存为。

阅读pdf电子书需要安装adobe reader,如果没有请到这里下载: http://down.zzbaike.com/download/adobe-reader-1605.html

February 2nd, 2009  in 网站程序 4 Comments »

IIS,连接数,进程数

国内卖虚拟主机的基本都有一项参数IIS数,而大部分人买虚拟主机的时候也会问主机商,你们的iis数是多少。而且IIS数被作为虚拟主机的一个非常重要的参数。但是奇怪的是,几乎所有的主机商的网站都没有解释IIS数是什么东西。网上流传着一篇很常见的讲解IIS数的文章,几乎和在线人数等同起来(只是框架会多占IIS数),还解释了你的论坛的在线人数为什么达不到虚拟主机的IIS数。正式因为广泛的误解,还有就是很多新手不明白在线人数是怎么回事,甚至很多人就把discuz论坛看到的在线人数和iis等同起来。如果有这样的误解,买空间的时候就会很郁闷了,例如很多空间的iis是50,但是我的论坛可是1000人在线啊,那怎么办啊!可能是出于无奈,主机商的iis越来越大,甚至出来很多不限制iis数的虚拟主机。

要消除误解就要从头说起,结果发现麻烦来了,IIS是什么东西?IIS不就是微软发布的服务器吗,那IIS数是什么,装了多少了IIS服务器?经过查询微软的技术文档,确切的说法应该是IIS并发连接数。但是很多卖虚拟主机的,服务器是apache,怎么也写着IIS数多少,是不是应该写Apache数呢?哈哈,很多人都被搞晕掉了吧,其实站长们就是这样被主机商给搞晕了。。。

这种说法的根源还是来自于windows和iis,iis的并发连接数估计说起来太烦,干脆简称IIS数甚至iis了。关于IIS的并发数,前一段时间看过一些微软的文档,但是因为我不用IIS,也没记住多少,就不继续讨论了,大家到这里只要知道iis数是什么东西就可以了。

web服务器不只是IIS,或者可以这样说,web服务器里IIS算不上主流,国内之所以这么多人卖的服务器都是iis的,我想原因有几个,一个是盗版用习惯了,还有一个更重要的,懂linux和apache的人太少了,所以在早期,国内的虚拟主机市场想找个apache服务器的都难。记得当年,遍地都是ASP的建站程序,到处都是asp空间,找个php的难啊,不过现在已经有很大改观了。

接着说我们的正题,对于apache服务器,再说他的iis数是多少,是不是不伦不类呢?那么应该叫什么呢?我发现,不少主机商现在不写IIS数了,写成并发连接数了,但是因为误解,很多人就把并发连接数和IIS数等同起来,然后和在线人数扯上关系。下面我们分析下apache下这个到底是什么东西?

说起来还要搞清楚两个名词才好继续说,一个是连接数,一个是进程数。准确的定义我也说不好,但是连接数一般指的是tcp连接,这个是linux操作系统的限制,apache没找到对这个的限制,所以我们重点说apache进程数(httpd进程数),其实主机商限制的就是这个,大部分人说的连接数指的也是这个,但是容易让人误解。

首先简单说一下过程,当你访问一个页面的时候,你的浏览器就和服务器建立一个tcp连接,然后apache的一个进程来处理你的请求。访问一个页面可能有多个请求,一般来说页面里的每个文件都对应一个请求,例如一个图片,css文件,js文件。所以访问一个页面会发出多个请求。如果服务器支持持久连接,那么一个连接就可以处理所有请求(在超时时间之内),如果服务器不支持持久连接,那么每一个请求都需要建立一个新的tcp连接。对于前一种情况,apache有一个进程来处理,但是这个进程处理完之后要保留一段时间,以便处理其他请求,直到连接断开;对于后面一种情况,apache完成一个请求之后就终止进程,新的请求建立新的进程。(实际上根据配置,一般有一些闲置的进程,不过我们为了方便的说明问题,不考虑那么多情况)

一般的服务器设置都是支持持久连接的,也就是参数KeepAlive处于启用状态。影响最大进程数的主要配置有:

MaxClient (为了不把大家搞晕,我们只考虑非线程型的MPM(也就是prefork),MaxClients表示可以用于伺服客户端请求的最大子进程数量)

KeepAliveTimeout Apache在关闭持久连接前等待下一个请求的秒数

第一个参数就是进程数的限制,第二个参数表示你的浏览器和apache建立持久连接以后,等待多久断开连接,一般默认的是5s,也就是说,如果5s钟你的浏览器没有发新的请求,服务器就断开与你的持久连接了。而一个持久连接占用一个进程,至于框架会不会占用额外的进程,没搞明白。

进程数可以用下面的公式计算: 总Apache进程数 = KeepAliveTimeout * 每秒种HTTP请求数 / 平均KeepAlive请求

而HTTP请求数就对应日志文件中的请求数(点击数)。

下面我们来做一个估算,假设一种极端的访问情况:浏览器打开一个页面以后不再继续访问其他页面,一直等到服务器断开连接。也就是说一个持久连接对应一个pv,等待5秒钟。对于大部分的页面,服务器执行时间是可以忽略的,也就是近似于一个pv占用5s时间。假设服务器的进程数限制是50个,那么5s可以有50个pv,一天可以有多少pv呢?计算很容易,结果是86万次,每个小时36000.也就是说,进程数限制50,对于大部分的普通网站应用都足够了。

当然实际情况会很复杂,主要有几方面,可能连续访问页面,也就是一个持久连接产生多个pv,这个会增加可承受的pv量;访问量分布不均匀,某些时间段大;一个请求花费的时间很长,例如在线看电影,下载软件;同时发起多个连接,这个影响多大正在查资料和实际观察。

最后总结一下,iis数或者更准确的说apache进程数和在线人数相关性不大,如果要找一个准确的参数,应该是日志中的点击数。在线人数最不靠谱,如果关心这个,请查看服务器的活跃连接,这个才是真的“在线”的人;独立IP数次之,也不靠谱,因为不知道每人访问多少页面,每个页面多少请求;PV数已经很接近了,但是不确定性还是很大。

别用discuz的在线人数衡量服务器的负载,尤其是在你都不知道站长设了多久的时间的时候,很多站长为了好看,在线时间有设置一个月的,其实那些人都不知道“死”了多久了。即使是设置的15分钟,看了上面的分析,你也清楚不确定性有多大了。

关于本文:虽然做网站很久,但是真真接触apache服务器的时间不长,文中可能有不少错误,也有不少忽略了其他设置,只关注几个最主要的参数。如果您发现哪里有错误,请告知我。这个不是技术文章,只是想让买空间的站长了解一下,别被误导。IIS我不熟悉,关于IIS的并发连接数等我熟悉之后再说,不过有一点是确定的,不会把超时时间设置为15分钟,这个要是遇到ddos就挂定了。

大漠孤狼原创(www.83blog.com),转载请注明。

February 2nd, 2009  in 服务器技术 10 Comments »

将WordPress的title(标题)修改为 文章名称-网站名称 的形式

将网站名称放在第一位更有利于搜索引擎排名,对于搜索的用户也更友好。

修改方法:

编辑文件 header.php.(可以用wordpress的主题编辑器编辑,也可以用FTP下载该文件然后编辑。)

找到:

<title><?php bloginfo(‘name’); ?> <?php if ( is_single() ) { ?> » Blog Archive <?php } ?> <?php wp_title(); ?></title>

修改为:

<title> <?php wp_title(”); ?> <?php if ( is_single() ) { ?> – <?php } ?> <?php bloginfo(‘name’); ?></title>

这样就可以了。

大漠孤狼原创,首发于www.83blog.com,转载请注明

January 28th, 2009  in 网站程序 15 Comments »

Drupal多网站设置

维护的网站多了,升级网站是一个很头痛的问题,还好可以利用Drupal的多站点功能,轻松维护多个网站。现在我们来说明如何用drupal建立多个独立的站点。
本论坛之前有一份drupal在windows上设置多站点的说明http://bbs.zzbaike.com/thread-3948-1-1.html,但是重点放在了设置上,很多新手可能理解不了,虚拟主机用户也不知道如何下手。而本文就是要说明Drupal多站点的本质,从而可以让大家根据自己的主机情况自行设置。

首先说明哪些主机环境可以设置多站点,概括一句,只要是能把两个域名指向同一个目录的都可以,主要包括以下一些情况:

1.有服务器控制权限的。。。这个不用说了,随便你怎么折腾

2.有独立IP的主机,只要把域名解析到独立IP就可以访问了

3.可以parked域名的主机,或者addon到同一个目录的主机,这个基本所有的美国主机都可以做到。关于这方面的主机信息请大家参考美国主机侦探的内容(www.idcspy.org)

接下来说明如何设置多站点,非常简单,不要因为很多文章提到的服务器设置部分吓坏了,没那么可怕。具体的服务器设置我们不谈,只要做到一件事情即可,把每个站点的域名都指向(绑定)到同一个目录,也可以换一种更好理解的说法,把其他所有域名都parked一个域名上。方法每个主机都不太一样,不过对于大部分虚拟主机通过面板就可以设置,根本不用动服务器设置。cpanel的设置请大家参考:http://kb.idcspy.org/CPanel

我们以建立两个站点为例来说明:

1.首先将所有文件上传到网站目录下

2.在sites/ 下新建一个目录,文件名称就用第二个网站的域名,例如83blog.com 可以用子域名,不需要带www

3.把sites/default下的文件复制一份到sites/83blog.com (就是新建的那个目录)

4.把sites/default  sites/83blog.com 下的default.settings.php 复制一份到同样的目录,命名为settings.php。(注意:不要删除default.settings.php)将settings.php设置为可写

5.建两个数据库 (几个网站就建几个)

6.访问第一个网站的域名安装Drupal。安装过程见: http://bbs.zzbaike.com/thread-932-1-1.html

7.访问第二个网站的域名,重复上面的安装步骤。

8.如果要安装更多网站就重复2,3,4,5,7步。

几点说明:

1.所有网站只有一份drupal文件,维护方便。所有网站的目录是一样的,统一由index.php来处理

2.如果对每个网站设置不同的模块和主题,就在该网站配置目录(就是前面的83blog.com等目录)下建立themes modules目录,把主题,模块安装在这些目录即可。如果是给所有网站共享的主题和模块就安装在根目录下的themes modules目录

3.也可以把其他网站放在子目录里(其实就是url用子目录的形式,例如83blog.com/drupal),那么配置目录的名称为 83blog.com.drupal即可。

大漠孤狼原创,首发于http://bbs.zzbaike.com/thread-7345-1-1.html ,转载请注明。

January 27th, 2009  in 网站程序 No Comments »