Linux 修改 IP DNS 参数 配置

Tagged Under : ,

一、修改 IP 地址

[leakon@linux]$ vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=static

IPADDR=219.236.108.199

NETMASK=255.255.255.192

GATEWAY=219.236.108.254

二、修改 GATEWAY

vim /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=leakon.com

GATEWAY=192.168.10.128

三、修改 DNS

[leakon@linux]$ vim /etc/resolv.conf

nameserver 202.99.160.68

nameserver 202.99.168.8

四、重新加载网络配置

/etc/init.d/network restart

修改 IP 地址

  • 即时生效
    # ifconfig eth0 192.168.10.108 netmask 255.255.255.0
  • 启动生效
    vim /etc/sysconfig/network-scripts/ifcfg-eth0

修改 Default Gateway

  • 即时生效
    # route add default gw 192.168.10.192
  • 启动生效
    vim /etc/sysconfig/network-scripts/ifcfg-eth0

修改 DNS

  • vim /etc/resolv.conf
  • 修改后立即生效,启动亦有效

修改 Host Name

  • 即时生效:
    # hostname leakon.com
  • 启动生效:
    vim /etc/sysconfig/network

MySQLi vs MySQL

Tagged Under :

Background
Between participating in a MySQLi group and telling others about PHP5’s new MySQLi (MySQL improved) extension, there always seems to be a redundant (though valid) question, “Why?” Simple enough right? Maybe not, so I attempted to come up with some good benchmarks. Now note, just because of the pure nature of PHP extensions, this is easier and harder in some ways than doing let’s say, “ATI X800 vs Nvidia 6800″ type benchmarks. 

With that said, I tried my best to keep the test scripts used identical down to the variables. There will obviously be some differences as conceptually some things are different between the two extensions.

The Environment 
The benchmark hardware/software configuration is as follows:
     Processor - Intel Pentium 4 (HT) 2.6 gHz/800mHz FSB 
     Memory - 1236836K (~1.2GB) PC3200 DDR 
     Hard Drive - Seagate 250GB (7200 RPM) SATA150
     Operating System - FreeBSD
     PHP - mod_php5 with Apache2 and Zend Optimizer 
     MySQL - mysql-server4.1.11

Hardware wise, it’s not the fastest server on the face of the planet, nor is it the slowest. In fact, I think it’s a mid-level system which makes it perfect for benchmarking. I used Apache2, as I believe more people are starting to use it. I may do a future benchmark with Apache1.3.x as I do have the binaries in place. Apache will not be accepting external connections. The MySQL server has networking off. FreeBSD is running with soft updates on.

The tests 
I spent some time trying figuring out what would be a good suite of tests to run. Without saying, they’d all obviously have to be PHP scripts of some sort interacting with MySQL through the traditional MySQL extension and the new MySQLi extension. The real question was, how these scripts would be setup. I decided to take the procedural approach (though I recommend using MySQLi in the OO way), since the traditional MySQL has no OO support. Below is my attempt at it.

The MySQL table
Query caching is off.
The table structure is as follows:

DESCRIBE benchmark;
+------------+--------------+-----+----------------+
| Field      | Type         | Key | Extra          |
+------------+--------------+-----+----------------+
| PRIMARY_ID | int(11)      | PRI | auto_increment |
| FOO        | varchar(255) |     |                |
| DUMMY1     | text         |     |                |
| DUMMY2     | text         |     |                |
| DUMMY3     | char(1)      |     |                |
+------------+--------------+-----+----------------+

 

Note, the MySQL table structure should not matter for our benchmark, as we are simply executing SQL queries through different mediums.

The PHP scripts
The focus of the scripts will be around the INSERT clause. Why not SELECT you might say. Well it doesn’t matter quite frankly. We are here to benchmark the functions with identical SQL, the key phrase is “identical SQL”.

Insert SQL test - Executes an INSERT query 100,000 times on the `benchmark` table with a for loop. mysql_query and mysqli_query will be used.
Insert SQL test 2 - Builds 100,000 INSERT SQL queries into one string. mysqli_multi_query will be used.

`benchmark` is truncated after each test script runs.

How performance is guaged
Deciding how to guage performance was undoubtely the hardest part of this benchmark. I had really only 2 options. The first, to setup a simple timer in between the functions where the queries took place and calculate the difference. The other option, was to use a full out profiler. I decided to go with a profiler, as it would give me execution times for surrounding PHP code (for example, the for loop).

My two (considered) choices in the profiler category are xdebug and Zend Studio Debugger. Let me say right now, I use Zend Studio for all my PHP work and so I had a certain bias to use it’s debugger, but alas…this benchmark must do without bias! This is about performance! So I hit Google to try to make an unbias decision about this. I found that Zend Debugger had won the best debugger award from PHP Magazin and so I decided to use it for this benchmark. Now note, all profilers are pretty much the same, in that conceptually they do the same thing. So choosing one over the other for this benchmark would not have a made a difference.

Running of the tests 
So with all the formalities out of the way, it’s finally time run the test scripts. Getting anxious are you? Don’t worry, so am I :-)

  • Insert SQL test (insertsql_mysqli.php)
    Here is the run of the first profile

    A list of 9 subsequent runs and the DoInsert() function’s “own time” results (in microseconds) 

     
    DoInsert() own time
    Total execution time
      24,670.14 26,075.74
      25,132.45 26,569.09
      25,232.18 26,547.64
      25,006.92 26,289.18
      25,401.54 26,710.59
      27,792.51 29,136.76
      25,386.73 26,814.82
      25,279.91 26,575.78
    Average 25,504.32 26,859.87
    Standard Deviation 849.09 846.19


    The standard deviation is an acceptable figure, on average give or take 1 second between those runs. Then on average, DoInsert() takes about 25 seconds to run with mysqli_query. Now let’s try mysql_query.

     

  • Insert SQL test (insertsql_mysql.php)
    Here is the run of the first profile

    A list of 9 subsequent runs and the DoInsert() function’s “own time” results (in microseconds) 

     
    DoInsert() own time
    Total execution time
      24,799.11 26,134.51
      25,075.20 26,426.23
      24,685.38 26,048.15
      24,891.70 26,245.90
      25,091.64 26,299.66
      24,713.04 26,138.62
      24,741.54 26,125.89
      24,596.36 25,970.21
    Average 24,885.75 26,007.04
    Standard Deviation 229.16 489.50

    The standard deviation with mysql_query is much less. In fact, mysql_query is able to do our task about 1 second faster than with mysqli_query. Let’s try to do the same task withmysqli_multi_query.

     

  • Insert SQL test (insertsql_mysqli_multi_query.php)
    Here is the run of the profile

    53 seconds, mysqli_multi_query definately is not the best choice here. 

     

  • Insert SQL test with MySQLi statements (insertsql_mysqli_stmt.php)
    In this test, there is a source code change conceptually, so make sure you take a look.
    Here is run of the first profile

    A list of 9 subsequent runs and the DoInsert() function’s “own time” results (in microseconds)
     

     
    DoInsert() own time
    Total execution time
      24,077.77 25,179.06
      24,535.49 25,687.64
      25,232.18 26,547.64
      24,476.72 25,552.14
      24,445.86 25,551.81
      24,586.98 25,703.18
      24,582.58 25,675.57
      24,783.44 25,931.73
    Average 24,589.72 25,760.13
    Standard Deviation 318.49 376.39


    The standard deviation is an acceptable figure, on average give or take half a second between those runs. Then on average, DoInsert() takes about 24 seconds to run withmysqli_stmt. I think we have enough for now that we can come to a conclusion.

 

Conclusions
The data showed that mysql_query outperforms mysqli_query head to head. For the specific task of inserting 100,000 rows into a table, using mysqli_multi_query more than doubled our script execution time. At this point, you may start wondering what the point of using MySQLi is if the traditional MySQL extension is getting the upper hand on MySQLi.

However, using MySQLi statements we got better results, in fact it outperformed mysql_query by as much as mysql_query outperformed mysqli_query. Though this might not be enough reason for you to change existing code, remember that MySQLi statements are “pre-escaped”, meaning that there is no need for you to do mysql_real_escape_string on any of the variables. It’s apparent that given this fact about MySQLi statements, if we had made the extra function call of mysql_real_escape_string to the four inserted values, we would have greatly increased our execution time (good for character escaping user input and stopping SQL injection).

While the above may not be enough reason to change existing code to use MySQLi statements, they might be good reasons to use them in the future, for both security and performance. 

[11/16/2005] Also just to mention, mysqli also implements ssh like security measures to make logins between the client and server much more secure.

In summary,

mysqli_stmt > mysql_query > mysqli_query > mysqli_multi_query

DIV POSITION LEFT TOP

Tagged Under : ,

网页可见区域宽: document.body.clientWidth;
网页可见区域高: document.body.clientHeight;
网页可见区域宽: document.body.offsetWidth   (包括边线的宽);
网页可见区域高: document.body.offsetHeight  (包括边线的宽);
网页正文全文宽: document.body.scrollWidth;
网页正文全文高: document.body.scrollHeight;
网页被卷去的高: document.body.scrollTop;
网页被卷去的左: document.body.scrollLeft;
网页正文部分上: window.screenTop;
网页正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的宽: window.screen.width;
屏幕可用工作区高度: window.screen.availHeight;
屏幕可用工作区宽度:window.screen.availWidth;

这么多属性,不如一张图看得直观,很老的图了,不过很实用。

Javascript 字符串 数字 浏览器 性能差别

Tagged Under : ,

我在做一个 Javascript 版的公历农历转换程序,功能完成后,需要对性能做优化。计算算法是在网上找的,原作者对历法的转换很精通,但对程序性能没有仔细考虑,当计算量大的时候,会给用户的浏览器造成很大压力,给用户的感觉就好像浏览器假死一样。

我花了2天时间在性能优化上,并在不同的浏览器下做对比测试,发现一个比较重要的差别,IE、Firefox 和 Chrome 之间的区别很大。

通常,生成一个月的日历,最多需要计算42天(可参考Google Calendar,每行代表一周7天,最多可能有6行)。

性能测试的时候,我让程序连续计算3年,共36个月,1000多天。

总的运行时间是:

IE7: 2.828 s
Safari3: 1.016 s
Firefox3: 0.885 s 
Opera9: 0.765 s
Chrome: 0.281 s

这下终于见识了 Chrome 采用的 Javascript V8 引擎的强大实力! 

以上统计结果都是测试3次取结果平均值。

程序运行到这个时间量级,已经是我优化过了的,最开始的程序,完成2年的计算,也就是上述运算量的三分之二,Firefox3用了8秒左右,Chrome很棒,用了2秒,而IE,30秒过后,浏览器直接问我是否要强制停止脚本运行,实际上我还从来没有在IE上成功执行过!

关于浏览器性能的差别,你可以用IE和Chrome打开淘宝的同一个比较复杂的页面,感受一下拖拉机与飞机的区别。

上面是浏览器的差别,下面我再给一些 Javascript 程序上的差别。

我的农历转换算法,有一个关键函数,需要多次调用,这个正是性能的瓶颈所在。

观察了调用方式和次数,这个函数运行了33000多次,而总共参数的变化只有1000次左右,如果加入缓存,可以减少97%的运算量!!!

我采用hash表的方式对每个输入的key做缓存,由于函数的参数是年月日,共3个,所以需要把这3个参数拼接成一个key。

最开始,我用字符串拼接,y m d 之间用 “_” 下划线连接起来,但仅仅是一个这样的字符串操作,程序运行时间就从0.8秒增加到1.1秒,增加了将近40%的时间!!

这是不能接受的,这将使我的缓存优化方式变得毫无意义。

农历算法的大部分关键代码,都是数字上的计算,代码很多,但好像没有产生性能瓶颈,这给了我启发。

我改用数字索引,把 y m d 用加法和乘法算出类似于 20081026 这样的整数,这样运行时间从0.789 s增加到0.853 s,只有不到10%的增加。

我的缓存,只能把运行时间降低20%到30%,所以用整数索引,可以达到优化的目的。

http://leakon.googlecode.com/svn/trunk/leakon/javascript/wannianli/nice/

很愿意与大家一起分享,一起分析,一起应用~~

原创文章,请尊重我对互联网的贡献,谢谢!

position static 屏幕滚动

这个黄色背景的提示框,样式定义中 position 设置为 static,因此可以精确地定位到输入框的下方,并且覆盖住原有的内容。达到这样的效果,static 值是必须的,他使该元素脱离于原有的元素布局,可以浮动到父层容器内的任何位置。

请注意这个父层容器,通常 static 元素只能在父层元素的容器内显示,具体位置用 left 和 top 属性决定。

这本来没什么问题,不过,当浏览器的窗口不能完整容纳整个页面,而出现滚动条时,就会出现问题。

如果提示框定义在 body 元素内,那么当滚动页面时,提示框会保持与浏览器窗口的位置不变。但此时提示框与页面元素的相对位置会发生变化,也就是相对位置不同步了。

就拿图示的例子来说,向下拖拽滚动条,文字输入框会向屏幕上方移动,但黄色提示框则保持不动,因为他的 position 相对位置的参照物是浏览器,而不是页面顶部。

如果想让输入框和提示框保持同步,则需要把提示框定义在与输入框相同的父层容器内。

这时 position 的 left 和 top 的参照物就是父层容器了,拖拽滚动条,输入框和提示框的相对位置会保持不变。

从合理的角度来说,如果整个页面有多处需要提示框,则应该在 body 下面定义一个全局的 div,在需要显示的位置,通过绝对定位调整提示框的 left 和 top。

但这样没法保证页面滚动时提示框与预期位置同步。

在每个需要提示框的地方,都定义一个独立的输入框,则可以避免同步的问题,但页面会存在过多的 dom 节点,容易造成浏览器内存泄露,或者导致浏览器打开页面速度缓慢。

殊死抵抗 wga 解决微软盗版黑屏问题 Wgalogon 黑屏修复工具

Tagged Under : , , , ,

互联网的万恶之源微软,据说今天就要下黑手向广大的中国人民开战了!

作为长时间受美帝国资本主义疯狂欺压的勤劳善良的中国人民的一员,我有责任,有义务,有必要,有能力为大家收集一些用来反抗的武器!

按照微软的计划,从今天起,验证用户是否使用正版的两个程序就将发出,一旦用户升级,盗版者将接收到微软最直接明显的提醒:每小时黑屏一次。

这还只是庞大的“提醒”计划中的一部分,根据微软公布的消息,这些“提醒”措施针对WindowsXP专业版用户,以及办公软件OfficeXP、Office2003和Office2007的用户。

一旦被验证为“盗版”,用户的电脑桌面将变为黑色,并出现对话框,提示用户“是盗版软件的受害者”,与此同时,用户的办公软件界面上也将出现“盗版”相关标识。

我收集到的几个个工具,可以帮助大家迅速破解这个”提醒“。

关闭自动更新

1、我的电脑-属性-自动更新-关闭自动更新 
2、开始-运行(输入services.msc)— 禁用Office Source Engine和Automatic Updates 

 

使用批处理文件

@echo off
sfc /purgecache
reg delete “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\Wgalogon” /f
taskkill /f /im WgaTray.exe /T
del c:\Windows\system32\WgaTray.exe /f /q
taskkill /f /im WgaTray.exe /T
del c:\Windows\system32\WgaTray.exe /f /q
taskkill /f /im WgaTray.exe /T
del c:\Windows\system32\WgaTray.exe /f /q
taskkill /f /im WgaTray.exe /T
del c:\Windows\system32\WgaTray.exe /f /q
taskkill /f /im WgaTray.exe /T
del c:\WINNT\system32\WgaTray.exe /f /q
taskkill /f /im WgaTray.exe /T
del c:\WINNT\system32\WgaTray.exe /f /q
taskkill /f /im WgaTray.exe /T
del c:\WINNT\system32\WgaTray.exe /f /q
echo. & pause

把上面的复制到记事本里保存,把记事本的后缀 txt 改成 bat,然后运行。

我已经给大家做好了这个批处理文件,大家可以直接下载:

http://down.leakon.com/software/2008/10/RemoveWGA_20081020.bat

 

清理注册表

开始-运行-输入REGEDIT回车,在左边栏中找到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\WgaLogon项

将整个WgaLogon项删除即可。

以上为经过测试的最简便方法。

同样,我也准备好了这个文件,供大家下载:

http://down.leakon.com/software/2008/10/RemoveWGA_20081020.reg

下载完成后,只写双击运行这个注册表文件即可。

 

修复小工具

XP反盗版黑屏修复工具 2.0

新增:新加入绿色免疫功能,适用于还未出现黑屏的用户(也就是还未安装WGA补丁的)。

进行免疫之后,即便开启自动更新或者直接安装反盗版补丁也不会出现异常。

给大家提供下载:

http://down.leakon.com/software/2008/10/RemoveWGA_20081020.exe

 

希望能给大家提供有用的帮助~~

 

十年

昨天参加初中同学聚会,看到了十年没有见到的老同学。大家还都是老样子,变化不大。有些已经结婚了,有的马上要结婚。算上这个,变化就太大了。

迎风中学,初四5班。

我们的学校已经没有了,我们的教室也变样了,不过我们43个同学团结在一起度过的四年初中生活,是我们此生永远不会忘记永远不会改变的回忆。

这四年中,我当了三年班长,可能这是我给大家留下的印象比较深刻的回忆了,虽然我这个班长没有以身作则,没有给大家往好路上带。

记得那会儿,罢课、逃课、打架……,干坏事儿的时候总有我,而且其中大部分都是我带头……

昨天的聚会,我迟到了。当我同时看见12位久未谋面的同学的时候,一种特别亲切的感觉一下子把我带回了十年前。聚会前因害怕好久不见会有些生疏而产生的担心,在那一刻瞬间消失。

是的,我们5班的同学,就算再久没有见面,聚在一起,也不会有生疏的感觉!

初中同学之间的关系,应该是最单纯最真切的,没有勾心斗角,只有嬉笑怒骂。

就像张晶说的那样,我们走进社会后,会接触不同的人,结交不同类型的朋友,但那份感觉,跟初中同学的感觉是完全不同的。初中关系最好的朋友们,在十年后的今天,仍然是关系最好的朋友。我跟几个发小之间的友谊就是在初中时代建立起来的。虽然我们也不是经常见面,但每隔几个月,大家都会找机会在一起聚聚,聊聊,不会让距离淡化感情!

聚会比较有意思的一个环节,是在KTV唱歌,大家玩了一会儿后,都停了下来,每人说说聚会的感言。说着说着,大家就开始复原在回忆中保存了十年的故事,你说一句,我补充一句,让我们有些模糊的记忆又回到了最新鲜的状态~~

想说的话太多太多,积累了十年的感情,无法在几个小时内全部释放。

我离开那间教室,已经十年。

但我每次在梦中延续校园生活时,地点总是定格在那件虽然破旧但干净整齐的教室。

本来这次聚会通知了20多个人(在此表扬一下亚旎和张晶为组织大家聚会付出的努力),但由于各种原因,有些同学没能参加,我们都很遗憾。不过我知道大家都很期盼着下次聚会能见到更多曾经最为熟悉的面孔。今天是征宇举办婚礼的日子,昨天我们聚会的时候,大家都为你举杯庆贺!我也再次祝你新婚快乐!

希望5班的同学们都能身体健康,工作顺利,家庭幸福,班长祝福你们!

Google IP

Tagged Under : ,

Google 的 IP 再次被封!

216.239.32.21 
216.239.34.21 
216.239.36.21 
216.239.38.21

这些是原有Google的IP列表,现在32和36已经被无耻的GFW封了。

我whois查了一下这些IP:

OrgName:    Google Inc. 

OrgID:      GOGL

Address:    1600 Amphitheatre Parkway

City:       Mountain View

StateProv:  CA

PostalCode: 94043

Country:    US

 

NetRange:   216.239.32.0 - 216.239.63.255 

CIDR:       216.239.32.0/19 

NetName:    GOOGLE

NetHandle:  NET-216-239-32-0-1

Parent:     NET-216-0-0-0-0

NetType:    Direct Allocation

NameServer: NS1.GOOGLE.COM

NameServer: NS2.GOOGLE.COM

NameServer: NS3.GOOGLE.COM

NameServer: NS4.GOOGLE.COM

 

比较可喜的是,Google的IP范围还算不少,从32.0到63.255,应该够GFW折腾的了。

如果你想使用Google的绑定域名服务,那你必须把你的域名CNAME到ghs.google.com。

但这个域名的IP早就被封了,你只能自己添加一个A记录,把IP改为上述范围中的一个能用的值。

然后再把你的二级域名CNAME到你刚添加的A记录上。

如果你嫌麻烦,我可以给你提供一个免费的Google域名主机:

google-host-00.leakon.com

我会写程序定期检查这个IP是否能ping通,如果失败,我会立刻更换这个域名的IP。

你需要把域名指向Google的话,可以CNAME到我这个域名,以后就可以不用再担心被封的问题。

如果IP被封,我这边可以在24小时内保证新IP生效,对你的应用来说,这一切都是透明的。

万恶的GFW,不干缺德事,你就会死吗?

Thinkpad 打开 IE7 标签 很慢 解决方法

Tagged Under : ,

使用 Thinkpad 笔记本在运行 IE7 浏览器,打开新窗口或标签页的时候,经常需要等待好几秒才有反应。
这主要是由于lenovo的2个加载项造成的:

CPwmIEBrowserHelper Object
ThinkVantage Password Manager

把这 2 项禁用后,效果就会改变很多。

修改方法如下:

IE7下 工具 -> 管理加载项 -> 启用或禁止加载项。

打开后,你会看到有很多加载项,远不止这 2 个。

每一项后面都有说明,把没用的都去掉,再试试,快多了~~

如图:

flash wmode 参数详解 解决 flash 覆盖问题

Tagged Under : , , ,

转自:http://www.neoy.cn/?p=158  多谢博主的文章,帮我解决了大问题~~

在做web开发中可能会遇到flash遮挡页面中元素的情况,无论怎么设置flash容器和层的深度(z-index)也无济于事,现有的解决方案是在插入flash的embed或object标签中加入”wmode”属性并设置为wmode=“transparent”或”opaque”,但wmode属性到底是什么意义,为什么可以解决这个问题呢?

window mode(wmode)

wmode即窗口模式总共有三种,看看当年Macromedia官方的说法:

  • Window: Use the Window value to play a Flash Player movie in its own rectangular window on a web page. This is the default value for wmode and it works the way the classic Flash Player works. This normally provides the fastest animation performance.
  • Opaque: By using the Opaque value you can use JavaScript to move or resize movies that don’t need a transparent background. Opaque mode makes the movie hide everything behind it on the page. Additionally, opaque mode moves elements behind Flash movies (for example, with dynamic HTML) to prevent them from showing through.
  • Transparent: Transparent mode allows the background of the HTML page, or the DHTML layer underneath the Flash movie or layer, to show through all the transparent portions of the movie. This allows you to overlap the movie with other elements of the HTML page. Animation performance might be slower when you use this value.

window 模式

默认情况下的显示模式,在这种模式下flash player有自己的窗口句柄,这就意味着flash影片是存在于Windows中的一个显示实例,并且是在浏览器核心显示窗口之上的,所以flash只是貌似显示在浏览器中,但这也是flash最快最有效率的渲染模式。由于他是独立于浏览器的HTML渲染表面,这就导致默认显示方式下flash总是会遮住位置与他重合的所有DHTML层。

但是大多数苹果电脑浏览器会允许DHTML层显示在flash之上,但当flash影片播放时会出现比较诡异的现象,比如DHTML层像被flash刮掉一块一样显示异常。

Opaque 模式

这是一种无窗口模式,在这种情况下flash player没有自己的窗口句柄,这就需要浏览器需要告诉flash player在浏览器的渲染表面绘制的时间和位置。这时flash影片就不会在高于浏览器HTML渲染表面而是与其他元素一样在同一个页面上,因此你就可以使用z-index值来控制DHTML元素是遮盖flash或者被遮盖。

Transparent 模式

透明模式,在这种模式下flash player会将stage的背景色alpha值将为0并且只会绘制stage上真实可见的对象,同样你也可以使用z-index来控制flash影片的深度值,但是与Opaque模式不同的是这样做会降低flash影片的回放效果,而且在9.0.115之前的flash player版本设置wmode=”opaque”或”transparent”会导致全屏模式失效。

了解了各种模式的实现方式和意义在以后的开发中就可以按照具体情况选择设置wmode属性的值了。

Google

Google
LAMP-Linux-redhat LAMP-Apache LAMP-MySQL LAMP-Php Leakon-Wiki Leakon-BBS XueBaoBao Xyoyou