Centos selinux不重启关闭

关闭SELinux的方法:
修改/etc/selinux/config文件中的SELINUX=”” 为 disabled ,然后重启。
如果不想重启系统,使用命令setenforce 0
注:
setenforce 1 设置SELinux 成为enforcing模式
setenforce 0 设置SELinux 成为permissive模式
在lilo或者grub的启动参数中增加:selinux=0,也可以关闭selinux

 

#—————————————————————
查看selinux状态:
/usr/bin/setstatus -v
如下:
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   permissive
Mode from config file:          enforcing
Policy version:                 21
Policy from config file:        targeted
 
getenforce/setenforce查看和设置SELinux的当前工作模式
#———————————————————————–

   发现服务一启动,马上停止,在网上查找资料,找到安装时要先禁用SELinux,再安装MySQL,步骤是:

1. 关闭SELinux,重启系统;
2. 安装MySQL(MySQL server应该可以启动了);
3. 启用SELinux,重启系统,之后MySQL server就可以正常启动了。

   启用禁用SELinux的方法是:

   vi /etc/selinux/config(也有人说是/etc/sysconfig/selinux文件,其实两个之间是链接关系,随便改其中一个,另一个也改了)

   SELINUX=disable 禁用SeLinux

   SELINUX=enforcing 启用SeLinux

 

Linux IPv6地址和默认网关的静态设置

Redhat/CentOS/Fedora

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=none
BROADCAST=192.168.0.255
HWADDR=00:A0:D1:E4:03:32
IPADDR=192.168.0.1

# 你的IPv6地址
IPV6ADDR=2001:da8:3000::183
IPV6PREFIX=64
IPV6_AUTOCONF=no
NETMASK=255.255.255.0
NETWORK=192.168.0.0
ONBOOT=yes
TYPE=Ethernet

[root@localhost ~]# vi /etc/sysconfig/network

NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=localhost

# 你的IPv6网关
IPV6_DEFAULTGW=2001:da8:3000::1%eth0

 

Debian/Ubuntu

vi /etc/network/interfaces

# /etc/network/interfaces — configuration file for ifup(8), ifdown(8)
# The loopback interface
# automatically added when upgrading

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet6 static
# 你的IPv6地址
address 2001:da8:3000::181
netmask 64
# 你的IPv6网关
up route -A inet6 add default gw 2001:da8:3000::1 dev $IFACE
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
up route add default gw 192.168.0.1 dev $IFACE

 

QString 与中文问题

首先呢,声明一下,QString 是不存在中文支持问题的,很多人遇到问题,并不是本身 QString 的问题,而是没有将自己希望的字符串正确赋给QString。

很简单的问题,"我是中文"这样写的时候,它是传统的 char 类型的窄字符串,我们需要的只不过是通过某种方式告诉QString 这四个汉字采用的那种编码。而问题一般都出在很多用户对自己当前的编码没太多概念,

于是

一个简 单的 Qt 程序

下面这个小程序,估计大家会感到比较亲切。似乎有相当多的中文用户尝试写过这样的代码:

编码,保存,编译,运行,一切都很顺利,可是结果呢:

  • 多数用户看到

    其他用户看到

    ÎÒÊǺº×Ö

    æˆ‘æ˜¯æ±‰å —

出乎意料,界面上中文没显示出来,出现了不认识字符。 于是开始用搜索引擎搜索,开始上论坛发帖或抱怨

最后被告知,下面的语句之一可以解决问题:

两条指令挨个一试,确实可以解决(多数用户是第一条,其他用户是第二条)。那么,为什么会这样呢?

两种乱码什么时候出现

对这个问题,我想大家可能都有话说。在继续之前,我们先列个表,看看两种乱码分别在那种情况下出现:

我们只列举大家最常用的3个编译器(微软VS的中的cl,Mingw中的g++,Linux下的g++),源代码分别采用 GBK不带BOM的UTF-8  以及 带BOM的UTF-8 这3中编码进行保存。

  • 源代码的编码

    编译器

    结果

    GBK

    cl

    1

    *

    mingw-g++

    1

    *

    g++

    1

    UTF-8(不带BOM)

    cl

    2

    mingw-g++

    2

    g++

    2

    *

    UTF-8(带BOM)

    cl

    1

    mingw-g++

    2

    g++

    编译失败

采用3种不同编码保存的源代码文件,分别用3种不同的编译器编译,形成9种组合,除掉一种不能工作的情况,两种乱码出现的情况各占一半。

从中我们也可以看出,乱码和操作系统原本是没有关系的。但我们在 Windows 一般用的GBK,linux一般用的是不带BOM的UTF-8。如果我们只考虑带*的情况,也可以说两种乱码和系统有关。

QString 为什么会乱码呢

真的是 QString 乱码了吗?我们可以问问自己,我们抱怨的对象是不是搞错了?

继续之前,先明确几个概念:

明确概念0:

  • “我是汉字” 是C语言中的字符串,它是char型的窄字符串。上面的例子可写为

明确概念1:

  • 源文件是有编码的,但是这种纯文本文件却不会记录自己采用的编码

这个是问题的根源,不妨做个试验,将前面的源代码保存成GBK编码,用16进制编辑器能看到引号内是ce d2 ca c7 ba ba d7 d6这样8个字节。

现在将该文件拷贝到正体(繁体)中文的Windows中,用记事本打开会什么样子呢?

那么放到欧美人的Windows系统中,再用记事本打开呢?

同一个文件,未做任何修改,但其中的8个字节ce d2 ca c7 ba ba d7 d6,对用GBK的大陆人,用BIG5的港澳台同胞,以及用Latin-1的欧洲人看来,看到的却是完全不同的文字。

明确概念2:

  • 如同我们都了解的’A’与’\x41’等价一样。

GBK编码下的

等价于

当用UTF-8编码时,等价于

注意:这个说法不全对,比如保存成带BOM的UTF-8,用cl编译器时,汉字本身是UTF-8编码,但程序内保存时却是对应的GBK编码。

明确概念3:

  • QString 内部采用的是Unicode。

QString内部采用的是 Unicode,它可以同时存放GBK中的字符”我是汉字”,BIG5中的字符”扂岆犖趼” 以及Latin-1中的字符”ÎÒÊǺº×Ö”。

一个问题是,源代码中的这8个字节"\xce\xd2\xca\xc7\xba\xba\xd7\xd6",该怎么转换成Unicode并存到 QString 内?按照GBK、BIG5、Latin-1还是其他方式…

在你不告诉它的情况下,它默认选择了Latin-1,于是8个字符”ÎÒÊǺº×Ö”的unicode码被存进了QString中。最终,8个Latin字符出现在你期盼看到4中文字符的地方,所谓的乱码出现了

QString 工作方式

其实很简单的一个问题,当你需要从窄字符串 char* 转成Unicode的QString字符串的,你需要告诉QString你的这串char* 中究竟是什么编码?GBK、BIG5、Latin-1

理想情况就是:将char* 传给QString时,同时告诉QString自己的编码是什么:

就像下面的函数一样,QString的成员函数知道按照何种编码来处理 C 字符串

单QString 只提供了这几个成员函数,远远满足不了大家的需求,比如,在简体中文Windows下,local8Bit是GBK,可是有一个char串是 BIG5 或 Latin-2怎么办?

那就动用强大的QTextCodec吧,首先QTextCodec肯定知道自己所负责的编码的,然后你把一个char串送给它,它就能正确将其转成Unicode了。

可是这个调用太麻烦了,我就想直接

这样用怎么办?

这样一来肯定没办法同时告诉 QString 你的str是何种编码了,只能通过其他方式了。这也就是开头提到的

设置QString默认采用的编码。而究竟采用哪一个,一般来说就是源代码是GBK,就用GBK,源代码是UTF-8就用UTF-8。但有一个例外,如果你保存成了带BOM的UTF-8而且用的微软的cl编译器,此时仍是GBK。

Qt Creator系列教程

 

引用

无欲无求yafeilinux的空间-Qt Creator系列教程

发现了一个学习的地方

检讨一下,今天有个项目验收,可惜啊,自己什么都没干~~~汗啊,丢人了

保存下来,以便备用

http://hi.baidu.com/yafeilinux/blog/item/3446ff0b2c591635b0351d31.htm

连载类:

一、Qt Creator的安装和hello world程序的编写

二、Qt Creator编写多窗口程序

三、Qt Creator登录对话框

四、Qt Creator添加菜单图标

五、Qt Creator布局管理器的使用

六、Qt Creator实现文本编辑

七、Qt Creator实现文本查找

八、Qt Creator实现状态栏显示

九、Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针

十、Qt Creator中实现定时器和产生随机数

十一、Qt 2D绘图(一)绘制简单图形

十二、Qt 2D绘图(二)渐变填充

十三、Qt 2D绘图(三)绘制文字

十四、Qt 2D绘图(四)绘制路径

十五、Qt 2D绘图(五)显示图片

十六、Qt 2D绘图(六)坐标系统

十七、Qt 2D绘图(七)Qt坐标系统深入

十八、Qt 2D绘图(八)涂鸦板

十九、Qt 2D绘图(九)双缓冲绘图简介

二十、Qt 2D绘图(十)图形视图框架简介

二十一、Qt数据库(一)简介

二十二、Qt数据库(二)添加MySQL数据库驱动插件

二十三、Qt数据库(三)利用QSqlQuery类执行SQL语句(一)

二十四、Qt数据库(四)利用QSqlQuery类执行SQL语句(二)

二十五、Qt数据库(五)QSqlQueryModel

二十六、Qt数据库(六)QSqlTableModel

二十七、Qt数据库(七)QSqlRelationalTableModel

二十八、Qt数据库(八)XML(一)

二十九、Qt数据库(九)XML(二)

三十、Qt数据库(十)XML(三)

三十一、Qt 4.7.0及Qt Creator 2.0 beta版安装全程图解

三十二、第一个Qt Quick程序(QML程序)

三十三、体验QML演示程序

PHP 5.3 安装 Zend Guard Loader 说明

PHP 5.3 下,Zend Optimizer 已经被全新的 Zend Guard Loader 取代

————————————————

1. 下载 Zend Guard Loader 压缩包。(官方下载地址:http://www.zend.com/en/products/guard/downloads

2. 解压并提取 ZendGuardLoader.so(Linux)或 ZendLoader.dll(Windows),对应你的PHP版本。

3. 在你的 php.ini 文件添加下面一行,用来加载 Zend Guard Loader:

    Linux 和 Mac OS X: zend_extension = 完整路径/ZendGuardLoader.so
    Windows(非线程安全):  zend_extension = 完整路径/ZendLoader.dll

4. 在 php.ini 额外新增一行,启用 Zend Guard Loader:

    zend_loader.enable = 1

5. 可选:可以在 php.ini 文件添加以下行到 Zend Guard Loader 配置位置:

    ;禁用许可证检查(为了性能的原因)
    zend_loader.disable_licensing = 0

    ;让 Zend Guard Loader 支持混淆级别。级别在 Zend Guard 的官方详细文档。 0 – 不启用混淆
    zend_loader.obfuscation_level_support = 3

    ;从这个路径寻找Zend产品授权的产品许可证。欲了解更多有关如何创建一个许可证文件的信息,请参阅 Zend Guard 用户指南.
    zend_loader.license_path =

6. 如果您使用 Zend debugger,请确保加载 Zend guard Loader。

7. 如果您使用 ioncube loader,请务必在它之前加载 Zend guard Loader。

8. 重新启动Web服务器。

Qt收费吗?

关于Qt的三种协议以及是否收费,有以下引文:

引文一:

    最近一直在学习 Qt。Qt 有两个许可证:LGPL 和商业协议。这两个协议在现在的 Qt 版本中的代码是完全一致的(潜在含义是,Qt 的早期版本,商业版的 Qt 通常包含有一些开源版本所没有的库,比如 QtSingleApplication 这个库)。所以现在对于普通开发人员和部分商业公司来说,使用 LGPL 版本的 Qt 可以节省很大的开销。这两个版本最大的区别在于,前者是免费的,后者是收费的。既然代码都是一致的,所以费用就要是用来购买 Qt 的售后服务和培训等等相关服务。

    现在我们是来说一下版权的问题。LGPL 是一个开源协议,因此,有人会担心 LGPL 能否用于开发闭源程序,能够拿来卖钱。尽管现在国内有些公司不是很重视这方面的问题,不过,如果你违反了协议,某一天被别人发来一纸律师函的时候,真的是 欲哭无泪了哦。所以,我们还是先来研究一下这个协议,LGPL 究竟能不能用于开发闭源程序。

    以下内容是我查找了 N 多网站总结出来的,因为豆子不是律师,所以 LGPL 协议基本看不懂。究竟怎样去理解这个协议,还是希望能够有专业人士说出来。这里就算做是一种抛砖引玉吧!尽管没有十分的确定,但是这里所说的理解基本也是八九不离十的了。

    至于什么是 LGPL 协议,这里就不再多说了,我们关心的是,如果使用 LGPL 协议开发商业程序。请注意,这里所说的闭源程序,是指不以某种形式开放源代码,也就是说,用户(包括其他开发者)不能获取其源代码的程序。首先说明一点,LGPL协议是一个商业友好的协议。这里的含义是,你可以用 LGPL协议开发商业程序,当然也可以是非商业的闭源程序。但是,它是有一些限制的。这就是我们要讨论的重点。

    既然我们已经对其定性,那么我们直接进入主题:使用 LGPL 协议开发闭源程序,如果你使用动态链接的形式,那么,你可以以任何形式发布你的应用程序,商业的、非商业的、开源的、非开源的,随你。如果你因某种原因必须静态链接一个基于 LGPL 协议发布的库(一下我们简称为 LGPL 库),那么,你有义务进行下面的工作:

1.你必须在你的文档中说明,你的程序中使用了 LGPL 库,并且说明这个库是基于 LGPL 发布的;
2.你必须在你的应用程序发布中包含一份 LGPL协议,通常就是那个文本文件;
3.你必须开放使用了 LGPL 库代码的所有代码,例如某些封装器。但是,其他使用这些封装器的代码就不需要开放了;
4.你必须包含你的应用程序的余下部分的目标文件(通常就是我们所说的 .o 等等),或者是其他等价的文件。源代码并不是必须的。

    是不是很难理解呢?我们详细的说一下。

    第一条很容易理解;第二条也很容易理解,你可以在这里找 到 LGPL 协议的内容,复制下来随你的程序一起发布就可以了。第三条就不那么好理解了。简单来说,LGPL协议要求,如果你的类使用了LGPL库的代码,那么必须把 这个类开源。例如,如果你的程序 app.exe 每个源文件都使用了 LGPL 库的代码,那么你的所有源代码都要开源。为了避免这种情况,我们通常编写一个封装器,把 LGPL库的代码封装起来,这样就只需要开放这个封装器的代码,而其他使用了这个封装器的代码就不需要开放。第四条是对第三条的一种补充:那些使用了封装 器的程序不需要开源,但是你必须把你编译的那些中间文件开放出来,Windows 下就是那些 .o 文件。

    你很奇怪,为什么 LGPL协议要这样规定呢?LGPL 所做的工作是,它保证了用户能够有这样一种能力:修改你使用 LGPL 库函数的方式(那些封装器就是你使用 LGPL库的方式,那些已经开源了),重新编译这些代码,然后重新对程序进行连接(连接所需要的目标文件也是包含了的,这是第四条规定的),就可以得到一 个新的可执行程序。

    好了,如果你还不明白如何使用,我们来看一个例子。

    假设我们使用一个名为 Lib 的库,这个库是基于 LGPL协议发布的。如果你使用 Lib.dll 做动态链接(Windows 下),好,一切 OK。无论你的程序怎么样,你都可以做你所做的事情。

    我们主要是来看,如果你要使用静态链接,那么你需要如何组织你的代码。如果你有一个 main.cpp(我们假设所有 Lib 库的函数都是用了 lib_ 前缀):

// main.cpp int main()

   

    lib_init();    

    lib_do_something();    

    lib_done();    

    lib_close();     

    return 0; 

    现在你已经完成了 main.cpp,但是你必须把它开源!因为它使用了 LGPL 库的代码。这是上面第三条规定的。我不想把它开源,怎么办呢?好,我们建一个新的文件 lib_wrapper.cpp:

void my_lib_init() 

{

    lib_init();


void my_lib_do_something()

   

    lib_do_something();


void my_lib_done() {

    lib_done(); 


void my_lib_close()

   

    lib_close(); 

在 main.cpp 中,我们做相应的修改:

int main()

   

    my_lib_init();    

    my_lib_do_something();    

    my_lib_done();    

    my_lib_close();     

    return 0; 

现在,main.cpp 不再是直接使用了 LGPL 库的代码了,因此它不需要开源,而我们的封装器 lib_wrapper.cpp 必须开源。

好,编译一下我们的程序,你会得到 main.o(Windows 下)这个目标文件。

在最终程序的发布中,你需要包含一下文件:

1.一份文档,其中声明:这个程序使用了 Lib库,这个库是基于 LGPL 协议发布的;

2.LGPL.txt;

3.lib_wrapper.cpp;

4.main.o

这样,用户可以通过修改 lib_wrapper.cpp  的内容改变你使用 LGPL 库的方式,例如:

void my_lib_done() 

   

    lib_done();    

    lib_close();


void my_lib_close()

   

    // lib_close(); 

然后编译这个 lib_wrapper.cpp,最终重新链接。一个新的可执行程序诞生啦!


引文二:

    Qt 4.5中提供了三种授权协议,分别是GPL, LGPL和Commercial,可能很多人要问,为什么同样的一个产品要提供三种授权协议,什么情况下使用什么的样的授权协议最合适?在这里我就大致解释一下:

    GPL全称是The GNU General Public License,是目前大多数的GNU程序和超过半数的自由软件使用的许可协议。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免 费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。
GPL协议的主要内容是只要在一个软件中使用(”使用”指类库引用,修改后 的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题, 还可以享受免费的优势。

    回到LGPL,LGPL的全称是 GNU Lesser General Public License,GNU 较宽松公共许可证,也是由协议是由自由软体基金会发布的许可证,是一个主要为类库使用设计的开源协议,和GPL要求任何使用/修改/衍生之GPL类库的的 软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的 开源代码可以被商业软件作为类库引用并发布和销售。

    除了GPL和LGPL两种开源协议之外,Qt还提供了Commercial商业协议,Qt的商业协议是由Nokia定义的,由Nokia和 购买方签 订的,具有法律效应的Qt产品授权协议。 Commercial License相教与GPL和LGPL,对于商业客户提供了更多的灵活性,客户可以任意的修改Qt的源代码,开发商业软件,而不需要公开任何源代码。并 且,在Commercial License中,我们还提供了技术支持服务。当然,商业授权协议是需要费用的。

    到底什么时候需要选择GPL和LGPL呢?一个最显而易见的理由就是他们都是免费的,使用LGPL和GPL版本的Qt是不需要支付任何费用 的,当然 我们也相应的不会提供技术支持。如果你打算开发真正的开源软件,并希望使用者也可以保持开源,那么GPL是更好的选择,因为所有人,不论你自己还是将来基 于你的代码进行再次开发都必须开源。如果你打算开发闭源(不开放源代码)的商业软件,那么LGPL则更适合,但必须满足下面两个条件:
1. 你的应用程序应该动态链接Qt函数库,并使你的应用程序与未做修改的LGPL库分开发布。同时必须确保使用者(接受者)知道应用程序使用了LGPL版本的Qt;
2. 如果你对LGPL版本的Qt进行了任何修改,并发布,则必须遵循LGPL 条款发布。任何使用者有权利得到这些修改(通常情况下是源代码),并且确保使用者可以通过这些修改自己生成相应你修改过的Qt版本。

    相信到这里大家已经对Qt提供的这三种协议有了基本的了解,通常大家还会有一个疑问,就是基于这三种授权协议的Qt产品到底由多少功能上的 区别,是 不是商业版本的会更完整,性能更好一些?这里我可以负责任的说:99%的代码都是一样的,无论是GPL, LGPL还是Commercial,功能,性能都没有区别,唯一的区别就在于授权协议的不同。

    还有一点需要说明的就是,由于LGPL是在Qt4.5这个版本里面才引入的,所以之前的Qt版本,4.4或者3.x的版本,并不提供LGPL协议,是不可逆的。同时未来发布的Qt版本,就一直会提供三种不同的授权协议版本。

    下面有一些链接,有兴趣想深入了解这些授权协议的同学,可以学习学习

GPL协议原文 - http://www.gnu.org/copyleft/gpl.html
GPL协议中文译文 - http://bergwolf.googlepages.com/gplv3_zh
LGPL协议原文 – http://www.gnu.org/copyleft/lesser.html
LGPL协议中文译文 - http://www.thebigfly.com/gnu/lgpl/lgpl-v3.php
58种不同的开源协议 - http://www.fsf.org/licensing/licenses/
什么是动态链接 - http://zh.wikipedia.org/wiki/%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%BA%93
官方声明 - http://www.qtsoftware.com/about/news/lgpl-license-option-added-to-qt
官方Q&A - http://www.qtsoftware.com/about/licensing/frequently-asked-questions

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/changsheng230/archive/2010/07/24/5761519.aspx

如何实现MySQL远程访问?

  以下的文章主要向大家介绍的是实现MySQL程访问的实际操作流程,以及在实现MySQL远程访问的过程中哪些的相关事项是十分重要的,以下就是文章的具体内容讲述,望你浏览之后会对其有更深的了解。

  MySQL远程访问 :

  1、改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称”%”

  mysql -u root -pvmwaremysql>use mysql;

  mysql>update user set host = ‘%’ where user = ‘root’;

  mysql>select host, user from user;

  2、授权法。例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。

  GRANT ALL PRIVILEGES ON *.* TO ‘myuser’@’%’IDENTIFIED BY ‘mypassword’ WI

  TH GRANT OPTION;

  在MySQL远程访问中如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码

  GRANT ALL PRIVILEGES ON *.* TO ‘myuser’@’192.168.1.3’IDENTIFIED BY

  ’mypassword’ WITH GRANT OPTION;

  我用的第一个方法,刚开始发现不行,在网上查了一下,少执行一个语句 mysql>FLUSH RIVILEGES

  使修改生效,就可以了

  另外一种方法:

  在安装mysql的机器上运行:

  1、d:\mysql\bin\>mysql -h localhost -u root

  这样应该可以进入MySQL服务器

  2、mysql>GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’WITH GRANT OPTION

  赋予任何主机访问数据的权限

  3、mysql>FLUSH PRIVILEGES

  修改生效

  4、mysql>EXIT

  退出MySQL服务器

  这样就可以在其它任何的主机上以root身份登录啦。

IPv6之家 – IPv6资源汇总

版权申明:IPv6之家(IPv6Home.cn)版权所有,转载时必须以链接形式注明本帖地址及本声明!
本帖IPv4地址:http://www.ipv6bbs.com/thread-8839-1-1.html
本帖IPv6地址:http://ipv6.ipv6home.cn/bbs/thread-8839-1-1.html
欢迎各位收藏此页,谢谢~~~

常用IPv6网站:
IPv6之家主站:http://www.ipv6home.cn/
IPv6之家镜像:http://ipv6.ipv6home.cn/
IPv6之家论坛:http://www.ipv6bbs.com/
IPv6网址之家:http://web.ipv6home.cn/
IPv6之家软件:http://soft.ipv6home.cn/
IPv6之家空间:http://idc.ipv6home.cn/
IPv6之家邮箱:http://mail.ipv6bbs.com/

六维空间:http://bt.neu6.edu.cn/
晨光BT:http://ipv6.cgbt.cn/
乐乎BT:http://bt.shu6.edu.cn/
我爱威六:http://www.52v6.com/
IPv6中国:http://www.ipv6.net.cn/
VENO:http://www.veno2.com/
六飞:http://www.6fei.com.cn/
IPv6 Google:http://ipv6.google.com/http://ipv6.google.co.jp/
上交IPv6网站搜索:http://search6.sjtu.edu.cn/search/
CNGI高校驻地网:http://www.6rank.edu.cn/
CERNET2:http://www.cernet2.edu.cn/
贴心论坛:http://bbs.tiexinba.com/
射手网:http://edu.shooter.cn/
长春师范学院:http://ipv6.cncnc.edu.cn/
Sixy.ch(国外的IPv6网址之家):http://sixy.ch/
各大高校IPv6网站地址:http://www.ipv6bbs.com/thread-3304-1-1.html

IPv6 PT下载:
IPv6 BT&PT介绍页:http://www.ipv6bbs.com/bt.php
PT建站源码(PT服务器原程序)汇总:http://www.ipv6bbs.com/thread-5152-1-1.html
东北大学 六维空间:http://bt.neu6.edu.cn/
北京邮电大学 北邮人BT:http://bt.byr.edu.cn/
北京交通大学 晨光BT:http://ipv6.cgbt.cn/
上海大学 乐乎BT:http://bt.shu6.edu.cn/
四川农业大学 思可觅:http://bt.sicau.edu.cn/
华中科技大学 HUDBT:http://www.kmgtp.org/
华南农业大学 红满堂PT站:http://tracker.ipv6.scau.edu.cn/
上海交通大学 葡萄PT:http://pt.sjtu.edu.cn/
北京航空航天大学 未来花园BT:http://bt.buaa6.edu.cn/
北京科技大学 我爱威六:http://www.52v6.com/
北京科技大学 贴心吧BT:http://bt.tiexinba.com/
成都医学院 银杏园BT:http://yxybt.cmc6.edu.cn/
华北电力大学 华翔PT:http://ipv6.flypt.org/

IPv6代理:
IPv6之家 – 在线代理:http://www.ipv6bbs.com/proxy.php
SIXXS代理:网址后添加.sixxs.org,如http://www.ipv6bbs.com.sixxs.org/
浙江大学代理:网址后添加.to4.zju6.edu.cn,如http://www.ipv6bbs.com.to4.zju6.edu.cn/
谷歌IPv6代理 http://ipv6.google.com/gwt/n
StudioProxy代理:http://ipv6.studioproxy.com/
ProxyBoxOnline代理:http://www.proxyboxonline.com/
yegle’s glypeproxy代理:http://yegle.net/glype/
成都医学院双栈http代理服务器:地址:proxy.cmc6.edu.cn,端口:80
kangzj免费代理服务器:地址:proxy6.kangzj.net 端口:2468
VPN计划:地址:edu6.zzzcn.info 端口:2012;edu.zzzcn.info 端口:2012;ipv6.haohaizi.us 端口:2012
原德国代理(已失效):地址:proxy.ipv6.uni-leipzig.de,端口:3128

IPv6 IPv4互访:
六飞:(1.0β版 1分钟连上IPv6网络 和现有的IPv4共存、互不干扰 绿色软件)
官方网站:http://www.6fei.com.cn/
论坛地址:http://www.ipv6bbs.com/forum-20-1.html
VENO:(Beta 3.0.5版 无缝融合IPV4、IPV6网络,自由地访问任何IPv4和IPv6网络 )
官方网站:http://www.veno2.com/
论坛地址:http://www.ipv6bbs.com/forum-50-1.html
IPv6直通车:(2.1.0 一个收费的IPv6 VPN)
官方网站:http://www.ipv6vpn.cn/
论坛地址:http://www.ipv6bbs.com/forum-56-1.html

IPv6 FTP:
上海交通大学 渔网搜索:http://ftpun6.sjtu.edu.cn/
GooBye IPv6 FTP搜索:http://www.goobye.net/
SwiftIPV6 FTP的搜索引擎(已关闭):http://www.swift6.com/
[动漫]复旦大学IPV6 ftp://[2001:da8:8001:64:210:5cff:feac:97b9]
[游戏]上交大pcgame6 ftp://sjtu:sjtu@pcgame6.sjtu.edu.cn:5566
[电影]SCAU IPv6 MOVIE_FTP ftp://movie.ipv6.scau.edu.cn
[电影]北邮人ipv6站 ftp://byr:c21e277d@movie.byr.edu.cn
[电视]上交大omtv6 ftp://sjtu:sjtu@omtv6.sjtu.edu.cn:5566
[电视]SCAU IPv6 TV ftp://tv.ipv6.scau.edu.cn
[电视]上交大tv6 ftp://sjtu:sjtu@tv6.sjtu.edu.cn:5566
[电视]北邮人ipv6 ftp://byr:c21e277d@tv.byr.edu.cn
[综合]中国人民大学IPv6站 ftp://[2001:da8:21c:100::94]
[综合]北航IPv6站 ftp://ftp.buaa6.edu.cn
[综合]浙江大学ipv6 ftp://[2001:da8:e000:1000::17]
[综合]第二军医大学IPv6站 ftp://movie:movie@ftp.smmu6.edu.cn
[综合]重庆大学IPV6 ftp://download.cqu6.edu.cn
[软件]SCAU IPv6 SOFT ftp://ftp.ipv6.scau.edu.cn
[软件]东北大学ipv6 ftp://ftp.neu6.edu.cn
[软件]东北大学ipv6 ftp://ftp2.neu6.edu.cn
[音乐]music.gdin.edu.cn ftp://music.gdin.edu.cn
[综合]东北电力 ftp://ftp6.nedu.edu.cn
[动漫]华农动漫 ftp://scau:scau@ftp4.scau.edu.cn:8021
[国外]国外镜像 ftp://ftp.ipv6.uni-muenster.de
[国外]国外GNU linux-ftp ftp://ftp.belnet.be
[国外]日本 BSD music ftp://ftp.ipv6.heanet.ie
[国外]日本 Software ftp://ftp.iij.ad.jp
[国外]日本 BSD misc ftp://ftp.ring.gr.jp
[综合]复旦 ftp://ftp6.fudan.edu.cn
[国外]美国之音 ftp://475.ftp.storage.akadns.net
[电影]北京邮电大学 ftp:// [2001:da8:215:4020:213:72ff:fe4c:37b7]
[综合]南大小百合公共FTP SoFree1 ftp://[2001:da8:1007:54:221:85ff:fe65:a07]
[综合]天地人大 ftp://ruc:ruc@[2001:da8:21c:100::95]
PS:由于个人FTP的资源与有效性难以保证,因此这里列出的仅为较为稳定的FTP。

IPv6 QQ:
wap方式登录QQ:http://www.ipv6bbs.com/thread-6093-1-1.html
web方式登录QQ:http://www.tangyr.cn/read.php/38.htm

IPv6 QQ群:
IPv6 Q群联盟:http://www.ipv6bbs.com/plugin.ph … ;module=QQapplylink
IPv6之家官方会员交流群1:22066871(人数已满)
IPv6之家官方会员交流群2:17079620(人数已满)
IPv6之家官方会员交流群3:105550102(人数已满)
IPv6之家官方会员交流群4:102372458(人数已满)
IPv6之家官方会员交流群5:105550322(人数已满)
IPv6之家官方会员交流群6:115173452(人数已满)
IPv6之家官方会员交流群7:115173591(人数已满)
IPv6之家官方会员交流群8:115173620(加入时请注明论坛ID)

IPv6电话:
CoolSIP或eTone:http://ngmylife.wirelesslan.edu.cn/
eTone使用教程:http://www.tangyr.cn/read.php/38.htm
AGEphone Mobile:http://www.ipv6bbs.com/thread-2315-1-1.html

IPv6邮箱:
IPv6之家邮箱服务:http://mail.ipv6bbs.com/

IPv6 FAQ:
IPv6常见问题集(IPv6 FAQ) :http://www.ipv6bbs.com/thread-3534-1-1.html

IPv6 DNS:
科技网DNS服务器:2001:cc0:2fff:2::6
CNNIC DNS服务器:2001:dc7:1000::1
清华大学DNS服务器:2001:da8:200:ffff::28
上海交大DNS服务器:2001:da8:8000:1:202:120:2:101
北京邮电大学DNS服务器:2001:da8:202:10::36或2001:da8:202:10::37

IPv6主机:
IPv6之家主机:http://idc.ipv6home.cn/
新语网络:http://www.xiaoyu.net/http://www.ongod.org/
he.net:http://www.he.net/
Verio.com:http://www.verio.com/

IPv6测速:
IPv6之家 IPv6地址测试:http://www.ipv6bbs.com/address.php
北交IPv6地址测试:http://media6.njtu.edu.cn/
东大IPv6网速测试:http://speed.neu6.edu.cn/
上交IPv6网速测试:http://video6.sjtu.edu.cn/speed/

IPv6搜索:
谷歌搜索:http://ipv6.google.com/
上海交通大学IPv6网站搜索:http://search6.sjtu.edu.cn/search/
北京大学天网中英文搜索:http://search.pku6.edu.cn/
渔网搜索:http://ftpun6.sjtu.edu.cn/
GooBye搜索:http://www.goobye.net/
Swift6搜索(已关闭):http://www.swift6.com/

支持IPv6的论坛:
北邮人BBS:http://bbs.byr.edu.cn/
瀚海星云BBS:http://bbs6.ustc.edu.cn/
华南木棉BBS:http://bbsweb.gznet.edu.cn/
饮水思源BBS :http://bbs6.sjtu.edu.cn/
白山黑水BBS:http://bbs.neu6.edu.cn/
麓山秋晚BBS:http://bbs.hunnu.edu.cn/
西北望BBS:http://bbs.lzu.edu.cn/
乐乎BBS:http://bbs.shu6.edu.cn/
碧海青天BBS:http://bbs.dlut.edu.cn/
铭传大学BBS:telnet://bbs.csie.mcu.edu.tw/

IPv6电视墙:
IPv6之家 – IPv6电视墙:http://www.ipv6bbs.com/wall.php
IPv6高清影院:http://tv.ipv6.edu.cn/
清华大学:http://iptv.tsinghua.edu.cn/
北京邮电大学:http://iptv.bupt.edu.cn/
北京交通大学:http://media6.njtu.edu.cn/video.html
上海交通大学:http://video6.sjtu.edu.cn/
西南交通大学:http://ipv6.swjtu.edu.cn/ShowNews.jsp?NewsID=463
西安交通大学:http://202.200.142.245/
中国科技大学:http://tv6.ustc.edu.cn/
华南农业大学:http://ipv6.scau.edu.cn/wltp/
大连理工大学:http://ipv6.dlut.edu.cn/video6.htm
北京大学:http://ipv6.pku.edu.cn/
兰州大学:http://tv.lzu.edu.cn/
中国传媒大学:http://ipv6.cuc.edu.cn/tv/tv.htm
东北林业大学:http://iptv.nefu.edu.cn/
南京大学:http://nic.nju.edu.cn/tv.htm
成都医学院:http://www.cmc6.edu.cn/live/
东北大学:http://video.neu6.edu.cn/
吉林大学:http://tv.jlu6.edu.cn/
浙江大学:http://media.zju6.edu.cn/tv.htm
郑州大学:http://media.ha6.edu.cn/
中国石油大学:http://iptv.upc.edu.cn/
河南理工大学:http://www.ipv6.hpu.edu.cn/
广东技术师范学院:http://ipv6.gdin.edu.cn/index.ph … :ipv6&Itemid=41
河西学院:http://202.201.106.8/NIC/html/iptv.htm
平顶山学院:http://211.69.16.42/
IPTV.GE:http://www.iptv.ge/

IPv6在线直播:
IPv6之家 – IPv6电视直播:http://www.ipv6home.cn/bbs/dszb.php
IPv6之家 – 在线影视:http://www.ipv6home.cn/tv.php
教育网酷毙IPV6网络电视:http://www.coolb.net.cn/http://www.ipv6tv.org/
得瑟IPv6网络电视:http://www.derser.cn/tv/
i-tv8.cn 爱·电视吧:http://www.i-tv8.cn/
酷爸爸 – IPv6电视直播:http://www.cool88.cn/tv/
合肥工业大学网络电视:http://tv.hfut.edu.cn/

IPv6网络电视软件:
IPv6TV网络直播电视(2.4beta 20100527更新):
下载地址:http://www.ipv6bbs.com/thread-18035-1-1.html
RabbiTV网络电视(R2.9.7 20100506更新):
官方网站:http://www.rabbisoft.com.cn/
下载地址:http://www.ipv6bbs.com/thread-1820-1-1.html
IPv6TV网络电视 – IPv6之家专版(V1.1 作者:scand 20090922更新):
作者主页:http://hi.baidu.com/JA212
下载地址:http://www.ipv6bbs.com/thread-4389-1-1.html
IPv6专用播放器(贺岁版 作者:cuijiagutong 合肥工业大学)
下载地址:http://www.ipv6bbs.com/thread-11945-1-1.html
IPv6专用播放器(20090518更新 作者:cuijiagutong 合肥工业大学)
作者主页:http://soft.ipv6home.cn/cuijia/
下载地址:http://www.ipv6bbs.com/thread-2807-1-1.html
天湖IPv6网络电视(V2.2 作者:bitghost 华中科技大学):
下载地址:http://www.ipv6bbs.com/thread-15030-1-1.html
天湖IPv6网络电视(V2.0 作者:bitghost 华中科技大学):
下载地址:http://www.ipv6bbs.com/thread-7460-1-1.html
天湖IPv6网络电视(V1.8 作者:bitghost 华中科技大学):
下载地址:http://www.ipv6bbs.com/thread-3937-1-1.html
6Player(1.0.1Beta 20091010更新 作者:soofree)
官方网站:http://www.sci123.cn/6player/
官方网站2:http://soft.ipv6home.cn/6player/
下载地址:http://www.ipv6bbs.com/thread-8027-1-1.html
i-tv8 网络电视(V2.09.11.30 20091130更新 作者:jacksonyu)
i-tv8 网络电视(V2.09.11.13 20091113更新 作者:jacksonyu)
官方网站:http://www.i-tv8.cn/
下载地址:http://www.ipv6bbs.com/thread-9436-1-1.html
i-tv8 网络电视(V1.2.2 20091016更新 作者:jacksonyu)
下载地址:http://www.ipv6bbs.com/thread-8242-1-1.html
IPv6光速网络电视(1.2 作者:youstar 四川大学)
官方网站:http://www.youstar.org.ru/
下载地址:http://www.ipv6bbs.com/thread-4320-1-1.html
IPv6光速网络电视(1.1Beta 作者:youstar 四川大学)
下载地址:http://www.ipv6bbs.com/thread-2719-1-1.html
NullTV(0.4 20101006更新 作者:ben304 华南师范大学)
下载地址:http://www.ipv6bbs.com/thread-20082-1-1.html
ScnuTv(V2.0 20100925更新 作者:anyone1988 华南师范大学)
下载地址:http://www.ipv6bbs.com/thread-20025-1-1.html
北工大IPv6网络电视(1.0 作者:happut 北京工业大学)
下载地址:http://www.ipv6bbs.com/thread-15060-1-1.html
Demon IPv6 TV(Beta 2 作者:Demon 中国政法大学):
下载地址:http://www.ipv6bbs.com/thread-5847-1-1.html
SixTV(作者:rogge):
下载地址:http://www.ipv6bbs.com/thread-2669-1-1.html
DormTV(beta 1.0 作者:chen97035 电子科技大学)
下载地址:http://www.ipv6bbs.com/thread-2970-1-1.html
Spirit TV(作者:fancy_king 电子科技大学)
下载地址:http://www.ipv6bbs.com/thread-11384-1-1.html
IPV6LIVE(2.0 作者:chinesezcj#126.com)
下载地址:http://www.ipv6bbs.com/thread-19369-1-1.html
华南师范大学IPV6电视播放器(v1.3 作者:lizky 华南师范大学)
下载地址:http://www.ipv6bbs.com/thread-12250-1-1.html
华南师范大学IPV6电视播放器(作者:dinghancong 华南师范大学)
下载地址:http://www.ipv6bbs.com/thread-19467-1-1.html

北中医06公管班IPv6电视墙(作者:索克斯 北京中医药大学)
下载地址:http://www.ipv6bbs.com/thread-7340-1-1.html
IPv6电视播放列表完整版
下载地址:http://www.ipv6bbs.com/thread-3918-1-1.html
IPv6电视频道列表(作者:小侯哥 20090530更新)
下载地址:http://www.ipv6bbs.com/thread-4031-1-1.html
IPV6电视频道列表(作者:gxl 贝城社区)
下载地址:http://www.ipv6bbs.com/thread-1697-1-1.html

其他IPv6工具:
IPv6Utility(作者:yinzhili 湖南师范大学)
下载地址:http://www.ipv6bbs.com/thread-1798-1-1.html
IPv6Tool(作者:yinzhili 湖南师范大学)
下载地址:http://www.ipv6bbs.com/thread-1035-1-1.html
ProXY4To6(V 1.3 作者:落叶清风 电子科技大学)
软件简介:可以用IPv6上QQ的软件,使用成都医学院的代理实现的。
下载地址:http://www.ipv6bbs.com/thread-8488-1-1.html
Demon Explorer(作者:Demon 中国政法大学)
软件简介:用IPv6访问Ipv4网页的浏览器,用的是sixxs.org代理。
下载地址:http://www.ipv6bbs.com/thread-6727-1-1.html
FileTransferIPv6(1.0.20100906 作者:zhangzhenhu 长春工业大学)
软件简介:支持IPv4和IPv6双协议的文件传输工具。
下载地址:http://www.ipv6bbs.com/thread-20023-1-1.html
Ipv6代理(1.0 作者:icesword)
软件简介:IPv6代理桌面程序,功能是用IPv6去访问IPv4的网站,用的是sixxs.org代理。
官方网站:http://www.icesword.net/
下载地址:http://www.ipv6bbs.com/thread-5691-1-1.html
IPv6加速工具(作者:icesword)
软件简介:XP和Vista下的批处理安装程序
下载地址:http://www.ipv6bbs.com/thread-5744-1-1.html
傲游插件- IPv6在线代理 v1.0.0(作者:乱世狂人)
下载地址:http://addons.maxthon.cn/zh_CN/post/2965
SwiftIPV6(作者:tcwwh)
软件简介:集FTP搜索引擎、FTP客户端、IPV6网络电视等多功能于一体的新一款IPv6软件。
下载地址:http://www.ipv6bbs.com/thread-1856-1-1.html
XP系统IPv6安装与修复工具(作者:小鬼在发飙 湖南大学)
软件简介:XP系统下IPv6安装与修复的批处理程序,默认用的是湖南大学隧道。
下载地址:http://www.ipv6bbs.com/thread-3992-1-2.html
IPv6安装工具(作者:crawt)
下载地址:http://www.ipv6bbs.com/thread-1863-1-1.html
IPV6 hosts一键安装文件(作者:sylvan)
下载地址:http://www.ipv6bbs.com/thread-11431-1-1.html
ShareLover飞享(V2.2 作者:点击网络 312007030101235)
软件简介:IPv6和IPv4环境下跨地域的局域网文件共享和聊天工具。
下载地址:http://www.ipv6bbs.com/thread-5097-1-1.html
史上最全的IPv6网络资源(作者:乱世狂人 20081205更新)
软件简介:CHM和EXE两种格式的电子书,搜集了当时几乎所有的IPv6网站。
下载地址:http://www.ipv6bbs.com/thread-1020-1-1.html
IPv6资源(作者:海青论坛 紫云飞 20081218更新)
下载地址:http://www.ipv6bbs.com/thread-1857-1-1.html
IPv6资源(作者:海青论坛 紫云飞 20081102更新)
下载地址:http://www.ipv6bbs.com/thread-902-1-1.html

提高PHP效率的53个代码细节

用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么 做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。

1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。

2、$row[’id’] 的速度是$row[id]的7倍。

3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。

4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。

5、注销那些不用的变量尤其是大数组,以便释放内存。

6、尽量避免使用__get,__set,__autoload。

7、require_once()代价昂贵。

8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。

9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。

10、函数代替正则表达式完成相同功能。

11、str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。

12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。

13、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。

14、用@屏蔽错误消息的做法非常低效,极其低效。

15、打开apache的mod_deflate模块,可以提高网页的浏览速度。

16、数据库连接当使用完毕时应关掉,不要用长连接。

17、错误消息代价昂贵。

18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。

19、递增一个全局变量要比递增一个局部变量慢2倍。

20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。

21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。

22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。
23、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。

24、派生类中的方法运行起来要快于在基类中定义的同样的方法。

25、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。

26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。

27、除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。

28、尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。

29、当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返 回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步 骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。
(举例如下)

if (strlen($foo) < 5) { echo “Foo is too short”$$ }

(与下面的技巧做比较)

if (!isset($foo{5})) { echo “Foo is too short”$$ }

调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。

34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java 代码并指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变 量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好 主意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。

35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。

36、并非要用类实现所有的数据结构,数组也很有用。

37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?

38、当你需要时,你总能把代码分解成方法。

39、尽量采用大量的PHP内置函数。

40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。
41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。
42、mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。

43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;

44、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;

45、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过);

46、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);

47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);

48、多维数组尽量不要循环嵌套赋值;

49、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;

50、foreach效率更高,尽量用foreach代替while和for循环;

51、用单引号替代双引号引用字符串;

52、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”;

53、对global变量,应该用完就unset()掉;

Nginx+PHP+PHP-FPM(FastCGI)在Ubuntu上的安装和配置

1) 目前各种服务器HTTP Server对PHP的支持一共有三种:

a.通过HTTPServer内置的模块来实现,

例如Apache的mod_php5,类似的Apache内置的mod_perl可以对perl支持;

b.通过CGI来实现,这个就好比之前perl的CGI,该种方式的缺点是性能差,因为每次服务器遇到这些脚本都需要重新启动脚本解析器来执行脚本然后将结果返回给服务器;另一方面就是不太安全;该方面几乎很少使用了。

c.最新出现一种叫做FastCGI。所谓FastCGI就是对CGI的改进。它一般采用C/S结构,一般脚本处理器会启动一个或者多个daemon进 程,每次HTTPServer遇到脚本的时候,直接交付给FastCGI的进程来执行,然后将得到的结果(通常为html)返回给浏览器。

>该种方法的问题存在一个小问题是当遇到大流量的频繁请求的话,脚本处理器的daemon进程可能会超负荷从而变得很慢,甚至发生内存泄漏;

>但是比较起Apache的内置模块的方式的优点是由于Server和脚本解析器完全分开各负其责,因此服务器不再臃肿,可以专心地进行静态文件响 应或者将动态脚本解析器的结果返回给用户客户端。所以比较起Apache的内置模块方式,有时候性能要提高很多。有人测试可能会达到 Apache+mod_php的5~10倍。

2) 使用FastCGI方式现在常见的有两种stack:ligthttpd+spawn-fcgi; 另外一种是nginx+PHP-FPM(也可以用spawn-fcgi)

a.如上面所说该两种结构都采用FastCGI对PHP支持,因此HTTPServer完全解放出来,可以更好地进行响应和并发处理。因此lighttpd和nginx都有small, but powerful和efficient的美誉。

b. 该两者还可以分出一个好坏来,spawn-fcgi由于是lighttpd的一部分,因此安装了lighttpd一般就会使用spawn-fcgi对 php支持,但是目前有用户说ligttpd的spwan-fcgi在高并发访问的时候,会出现上面说的内存泄漏甚至自动重启fastcgi。即:PHP 脚本处理器当机,这个时候如果用户访问的话,可能就会出现白页(即PHP不能被解析或者出错)。

另一个:首先nginx不像lighttpd本身含带了fastcgi(spawn-fcgi),因此它完全是轻量级的,必须借助第三方的FastCGI 处理器才可以对PHP进行解析,因此其实这样看来nginx是非常灵活的,它可以和任何第三方提供解析的处理器实现连接从而实现对PHP的解析(在 nginx.conf中很容易设置)。

nginx可以使用spwan-fcgi(需要一同安装lighttpd,但是需要为nginx避开端口,一些较早的blog有这方面安装的教程),但是 由于spawn-fcgi具有上面所述的用户逐渐发现的缺陷,现在慢慢减少使用nginx+spawn-fcgi组合了。

c. 由于spawn-fcgi的缺陷,现在出现了新的第三方(目前还是,听说正在努力不久将来加入到PHP core中)的PHP的FastCGI处理器,叫做PHP-FPM(具体可以google)。它和spawn-fcgi比较起来有如下优点:

由于它是作为PHP的patch补丁来开发的,安装的时候需要和php源码一起编译,也就是说编译到php core中了,因此在性能方面要优秀一些;
同时它在处理高并发方面也优于spawn-fcgi,至少不会自动重启fastcgi处理器。具体采用的算法和设计可以google了解。

因此,如上所说由于nginx的轻量和灵活性,因此目前性能优越,越来越多人逐渐使用这个组合:nginx+PHP/PHP-FPM

3) 因此总结:
目前在HTTPServer这块基本可以看到有三种stack比较流行:

>Apache+mod_php5
>lighttp+spawn-fcgi
>nginx+PHP-FPM

三者后两者性能可能稍优,但是Apache由于有丰富的模块和功能,目前来说仍旧是老大。有人测试nginx+PHP-FPM在高并发情况下可能会达到Apache+mod_php5的5~10倍,现在nginx+PHP-FPM使用的人越来越多。

下面着重介绍stack:
Apache+mod_php5和nginx+PHP-FPM的安装和配置。对于lighttpd+spawn-fcgi,由于我个人没有怎么用过,所以如下不准备介绍,感兴趣可以查阅资料。


1.Apache+mod_php模式:

我们很久一段时间使用经典的Apache+mod_php:

Apache对PHP的支持是通过Apache的模块来支持的。如果曾源代码编译安装php的话,如果希望Apache支持PHP的话,在./configure步骤需要指定–with-apxs2=/usr/local/apache2/bin/apxs 表示告诉编译器通过Apache的mod_php5/apxs来提供对PHP5的解析;
而且在最后一步make install的时候我们会看到将动态链接库libphp5.so(Apache模块)拷贝到apache2的安装目录的modules目录下,并且还需要在httpd.conf配置文件中添加LoadModule语句来动态将libphp5.so 模块加载进来,从而实现Apache对php的支持。

1)由于该模式实在太经典了,因此这里关于安装部分不准备详述了,相对来说比较简单。

2)这里之所以仍旧列出来Apache+mod_php5来讨论,是因为:
看过上一篇文章的话,我们知道nginx一般包括两个用途HTTPServer和Reverse Proxy Server(反向代理服务器)。

我们介绍了如何在前端部署nginx作为reverse proxy server,后端布置多个Apache来实现机群系统server cluster架构的。
因此,实际生产中,我们仍旧能够保留Apache+mod_php5的经典App Server,而仅仅使用nginx来当做前端的reverse proxy server来实现代理和负载均衡。 因此,建议nginx(1个或者多个)+多个apache的架构继续使用下去。

2. nginx+PHP-FPM:

1)通过上面的分析,尽管我们可以仍旧保留Apache+mod_php来处理PHP,所有的静态文件和负载均衡由顶在前端的nginx来完成,但是由于nginx和PHP-FPM各自的优越性,使得nginx+PHP-FPM的组合的性能已经很超越Apache+mod_php。
因此很多人渐渐放弃了Apache+mod_php的组合了,而完全使用nginx+PHP-FPM来实现对PHP的处理。
因此现在出现了新的名词叫做LEMP(Linux+EngineX(nginx)+MySQL+PHP),慢慢要代替经典很多年的LAMP

2)甚至出现一种新的server cluster:
其中看不到Apache的影子了,全部由nginx来搞定。nginx轻量型,高性能,高灵活性使得它完全能够应付过来。
由于PHP-FPM是C/S结构,因此我们前端保留nginx来做负载均衡;对于之前后端的各个Apache服务器,我们不需要安装Apache了,对PHP重新编译安装使其以PHP-FPM方式支持FastCGI;
然后在nginx中配置将客户端的php请求分别pass到后台的多个运行的PHP-FPM,后者进行处理然后返回给nginx,然后显示给用户。整个过程可以完全不要Apache。

3) 下面我们具体来介绍如何来安装和简单配置
nginx+PHP+PHP-FPM+MySQL.

3. 安装和配置nginx+PHP+PHP-FPM+MySQL:


1) 安装MySQL:

这里之所以首先要安装MySQL,是因为之后编译安装PHP的时候,可以直接指定对MySQL的支持。
我们知道PHP对MySQL的支持是通过PHP扩展实现的。
可以源代码安装,不过我使用的Ubuntu,直接使用了其发布的二进制包安装了:

$sudo apt-get install mysql-server

安装的时候需要提示设置root密码;
之后使用
$netstat -tap |grep mysql
看看是否正常运行;

2) 安装PHP和PHP-FPM:
我们之前介绍了PHP-FPM是对PHP的补丁,因此需要和PHP一起编译安装。我这里使用的PHP 5.2.10
a. 下载安装包:
php.net 下载:php-5.2.10.tar.gz
从PHP-FPM官网下载:php-5.2.10-fpm-0.5.13.diff.gz
注意两个版本尽量相同(不相同可能出错,我自己没试过)。

b. 解压缩打补丁
$tar xzvf php-5.2.10.tar.gz
$gzip -cd php-5.2.10-fpm-0.5.13.diff.gz | patch -d php-5.2.10 -p1
倘若中间需要哪个命令shell不认识,可以使用apt-get安装,或者google找答案。

c. 配置编译环境:
在安装之前可能需要安装几个依赖包:
sudo apt-get install libxml2-dev
sudo apt-get install libmysqlclient15-dev
不安装也可以,之后./configure失败的话,根据出错信息,再慢慢搜索安装依赖包也可以,重要的是记下关键步骤,因为每个人的系统装没装啥都不一定。

$cd php-5.2.10
$./configure –prefix=/usr/local/php –enable-fastcgi –enable-fpm –with-mysql –with-mysqli –with-openssl

这里我们配置php安装到/usr/local/php,如果不配置默认安装到/usr/local下,这样我觉得不太好,这样make install各个文件就会被拷贝得分散开来(分散在local的各个目录下),如果我们之后想卸载干净而且无法使用make uninstall的话,还不方便。安装到/usr/local/php下,如果我们想删除php,直接删除该目录即可。

–enable-fastcgi和–enable-fpm分别设置支持fastcgi和PHP-FPM的选项;
–with-mysql和–with-mysqli相当于编译php的MySQL扩展到php内核中,这样我们可以在php中使用mysql和mysqli库的函数访问mysql;

注意:这里需要注意的一个问题是,不要设置–with-apxs2=/usr/local/apache2/bin/apxs,我们知道它是告诉PHP编译成模块方式让Apache来支持。如果设置了该选项的话,编译安装之后,Apache会无法启动,报错信息:
/usr/lib/apache2/modules/libphp5.so: undefined symbol: -fpm-event-base-free

因此这里也就意味着,我们编译PHP以PHP-FPM的方式来支持FastCGI的话,基本上就不能和Apache一起使用了,也就是说我们决定使用nginx+PHP+PHP-FPM的话,这里的PHP就没法和Apache一起使用了。

如果非还想要使用,那可以另外编译安装一个PHP,编译的时候在./configure的时候设置–with-apxs2=/usr/local/apache2/bin/apxs,而且不要打PHP-FPM的补丁。

另外,如果该步骤出现错误,通常是缺乏依赖包,请按照错误信息安装依赖包即可。

d. 编译:
$make all
注意这里尽量使用make all,而不要仅仅是make

e. 安装:
$make install

f. 拷贝php.ini文件:
$sudo cp php.ini-dist /usr/local/php/lib/php.ini
将php.ini文件拷贝到如上位置;

如果安装都成功的话,我们的以PHP-FPM方式支持FastCGI的PHP就被安装到了/usr/local/php目录下了。


3) 配置PHP和PHP-FPM:

首先可用到/usr/local/php/bin目录下执行一下php -v,看PHP是否work。

a. 配置php.ini:
位于/usr/local/php/lib下
这里一般没有严格需要配置什么,可以按照自己要求进行配置。

b. 配置PHP-FPM这个PHP解析器:
我们上面说过PHP-FPM解析器是C/S结构,它的配置文件位于/usr/local/php/etc/php-fpm.conf。
$cd /usr/local/php/etc
$sudo vi php-fpm.conf
该文件是一个xml文件,只需要修改:
Unix user of processes
<value name=”user”>www-data</value>
Unix group of processes
<value name=”group”>www-data</value>
注意去掉两边的注释<!–和–>,否则之后php-fpm启动不了;

c. 配置完之后,就可以启动PHP-FPM:
$/usr/local/php/sbin/php-fpm start

我们上面介绍了FastCGI模式区别于CGI模式,它需要一个daemon进程一直运行在后台对php请求做出解析,这里的PHP-FPM就是这个 daemon进程,在配置文件php-fpm.conf中可以设置它侦听的IP和端口,默认为127.0.0.1:9000。也就是它侦听9000端口的 数据请求,然后会将其进行解析然后返回给请求端。

这个和我们之前介绍的FastCGI的思想相吻合。HTTPServer服务器和FastCGI模式的PHP解析器相分离(这里就是PHP- FPM),HTTPServer遇到PHP请求的时候,就会传递给PHP-FPM,后者解析并返回。实现HTTPServer和PHP解析器完全分离,缓 解了Server的负担,Server有更多资源来处理并发请求。其实这也是nginx优于apache的一个原因。

d. 检查php-fpm是否运行正常:
$ps ax|grep fpm

4)安装和配置nginx:

之前文章我们介绍了nginx的安装和使用nginx作为reverser server的进行负载均衡配置了,感兴趣的可以参看。

a. nginx的安装很简单:
从官网下载安装包:nginx-0.7.61.tar.gz

$tar xzvf nginx-0.7.61.tar.gz
$cd nginx-0.7.61
$./configure
默认安装路径为/usr/local/nginx,如果不放心自己可以使用–prefix=/usr/local/nginx配置一下
$make
$sudo make install

b. 思想:

我们之前的文章介绍了nginx的使用非常灵活,有人比喻其为server领域的瑞士军刀,其实确实是:性能好,而且使用方法多。
各种使用方法都是通过配置文件来实现,因此掌握nginx的使用,除了掌握各种架构的思想之外,还要掌握如何对nginx.conf进行相应的配置。

我们这里着重对nginx.conf配置,实现通过php-fpm的fastcgi对php的处理。其实nginx本身并不会对PHP进行解析,这个要区别于Apache (Apache通过内置模块实现了对PHP的解析),nginx其实是将对php页面的请求交给了后台在127.0.0.1:9000 侦听的php-fpm,后者具有解析php的功能。

因此如果把php-fpm看做一个app server的话,其实nginx这里的作用还是一个反向代理服务器。和我们之前介绍的使用location配置将php请求proxypass给后台侦听的Apache服务器,在思想上几乎一样。


c. 配置位于/usr/local/nginx/conf目录下的nginx.conf和fastcgi.params

>nginx.conf配置:
$cd /usr/local/nginx/conf
$sudo vi nginx.conf
从上往下对默认的配置文件进行修改:

1. user www-data; 这里需要和php-fpm中定义的用户一致;

2. worker_processes 2; 可以设置更多,这个选项和之后的worker_connections 1024;
一起来定义每个进程并发相应的最大连接数,因此这里可以达到2*1024的并发请求;

3. 在server {
listen 8080;
如果自己已经安装了Apache并且占用了80端口,这里修改为别的8080,负责启动不了;

4. 如上面所述,我们其实设置nginx将PHP请求转发给后台的php-fpm server即可,后者有解析php功能。
其实还是充当反向代理的作用;
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000 ;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME html/$fastcgi_script_name;
include fastcgi_params;
}
注意fastcgi_param SCRIPT_FILENAME html/$fastcgi_script_name;

之后需要设置为放置php脚本的位置 ,这里我们举例在/usr/local/nginx/html目录下创建一个phpinfo.php文件
包含代码<?php phpinfo(); ?>

$sudo vi fastcgi.params

配置fastcgi参数文件,具体可以参考http://wiki.nginx.org/NginxFcgiExample
基本上可以使用默认的该文件,不需要修改。

5) 运行nginx:

$sudo /usr/local/nginx/sbin/nginx

然后在浏览器中查看http://localhost

> 默认会显示/usr/local/nginx/html目录下的index.html页面: Welcome to Nginx!

>然后查看http://localhost/phpinfo.php ,相当于访问html目录下的phpinfo.php页面,

如果正常,会显示phpinfo的页面。其中可以看到Server API一项包含:CGI/FastCGI,表示FastCGI方式运行。

如果以上步骤出现错误,通常都是因为nginx.conf配置不正确,可以google寻找解决方法,一般都可以找得到(英文)。然后重新修改nginx.conf文件。

之后需要重启nginx,可以执行:

$sudo kill cat /usr/local/nginx/logs/nginx.pid 表示关闭nginx
$sudo /usr/local/nginx/sbin/nginx 再次启动nginx

6)设置开机自启动:

在Ubuntu下,如果希望添加到/etc/init.d实现开机重启的话,可以Google寻找nginx和php-fpm的init script(php-fpm本身就是init script不需要寻找了),然后拷贝到/etc/init.d目录下。

简单的方法,设置rc.local:

$sudo vi /etc/rc.local

在exit 0之前添加:
/usr/local/php/sbin/php-fpm start
/usr/local/nginx/sbin/nginx

这样开机自动启动nginx和php-fpm。

7) 使用nginx和php-fpm实现server cluster:

和nginx对多台app server代理实现负载均衡类似,我们可以实现nginx对多台php-fpm实现负载均衡:

T o configure Nginx to load balance multiple FastCgi servers use this type of configuration:

upstream fastcgiServers {
server 127.0.0.1:9000 ;
server 127.0.0.1:9001 ;
server 198.192.0.1:9000 ;
server 198.192.0.2:9000 ;
server 198.192.0.3:9000 ;
}

location ~ \.php$ {

fastcgi_pass fastcgiServers;
fastcgi_index stream.app;
fastcgi_param SCRIPT_FILENAME /var/www/htdocs$fastcgi_script_name;
include /etc/nginx/fastcgi.conf;

}

4. 总结:

三种常用模式:
Apache+mod_php5;
lightppd+spawn-fcgi;
nginx+PHP-FPM

我们可以使用到生产环境中的:

0) 如果不是server cluster的话:
可以使用以上任一种,不过有各种测试表明nginx+PHP-FPM性能优越,但是Apache+mod_php5很经典模块多,比如对.htaccess等的支持。

如果构建server cluster的话:
1) nginx作为反向代理服务器,后台多台Apache+mod_php5。
nginx处理静态文件,及对php并发请求对后台多台app server的负载均衡;

2) nginx作为反向代理器,后台多台PHP-FPM
nginx处理静态文件及将php并发请求发送到后台php-fpm来解析;

另外:关于如何更好使用nginx这个轻量级高性能的瑞士军刀,主要是如何配置nginx.conf,更多参看:
http://wiki.nginx.org/Main
另外,关于PHP支持的各种缓存等这里没有安装,感兴趣可以另行安装。

更多参考资料:
http://www.php.net/manual/en/install.unix.apache2.php
http://www.softwareprojects.com/resources/programming/t-installing-nginx-web-server-w-php-and-ssl-1474.html
http://php-fpm.org/Main_Page
http://www.softwareprojects.com/resources/programming/t-how-to-install-php-fpm-spawn-fcgi-replacement-1602.html
http://wiki.nginx.org/NginxFcgiExample
有可能以后会将PHP-FPM直接添加到PHP内核中一起进行发布
Will there be a PHP-FPM is included in the official PHP?
http://php-fpm.org/FAQ#Will_there_be_a_PHP-FPM_is_included_in_the_official_PHP.3F

http://bookmarks.honewatson.com/2008/04/24/multiple-fastcgi-php-servers-nginx-load-balancing/
http://www.wikivs.com/wiki/Lighttpd_vs_nginx
http://en.wikipedia.org/wiki/Reverse_proxy
http://sameerparwani.com/posts/nginx-as-a-front-end-to-apache/
http://blog.kovyrin.net/2006/04/17/typical-nginx-configurations/
http://www.yawn.it/2008/04/30/nginx-php-php-fpm-on-debian-etch-40/
http://howtoforge.org/installing-nginx-with-php5-and-mysql-support-on-ubuntu-8.10