<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_我的脚印</title><subtitle type="text">以项目为向导，提高兴趣，以兴趣为导向，提高技术。</subtitle><id>http://feed.cnblogs.com/blog/u/49258/rss</id><updated>2012-01-17T02:48:59Z</updated><author><name>phpzxh</name><uri>http://www.cnblogs.com/phpzxh/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/phpzxh/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/49258/rss"/><entry><id>http://www.cnblogs.com/phpzxh/archive/2011/11/27/2264742.html</id><title type="text">那些年，我们一起追的女孩</title><summary type="text">分手，只需要一个人同意，但“在一起”，可是需要两个人同时认可才能作数。恋 爱就是要这么不确定才有趣，不是吗？至少我已经完成了我这一半的拼图。 “你想想，你跟小华现在才十五岁，如果你们现在就在一起了，真的可以一直当 男女朋友直到三十岁结婚吗？” 你一定会死，那你为什么不现在就死一死？” 生没有意外，只能说是命运使然。 联结的方式有很多种，有的连结是一种陪伴，...</summary><published>2011-11-26T16:02:00Z</published><updated>2011-11-26T16:02:00Z</updated><author><name>phpzxh</name><uri>http://www.cnblogs.com/phpzxh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/phpzxh/archive/2011/11/27/2264742.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/phpzxh/archive/2011/11/27/2264742.html"/><content type="html">&lt;p&gt;分手，只需要一个人同意，但“在一起”，可是需要两个人同时认可才能作数。恋    &lt;br /&gt;爱就是要这么不确定才有趣，不是吗？至少我已经完成了我这一半的拼图。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160; “你想想，你跟小华现在才十五岁，如果你们现在就在一起了，真的可以一直当    &lt;br /&gt;男女朋友直到三十岁结婚吗？”&lt;/p&gt;  &lt;p&gt;你一定会死，那你为什么不现在就死一死？”&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;生没有意外，只能说是命运使然。&lt;/p&gt;  &lt;p&gt;联结的方式有很多种，有的连结是一种陪伴，有的连结是一种互相取暖，有的连    &lt;br /&gt;结则是一种淡淡的默契。透过爱情而连结的伴侣，则是我们最向往的关系。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;有结果的恋爱，只要开了花，颜色就是灿烂的。&lt;/p&gt;  &lt;p&gt;人生就像一盒巧克力，你永远不知道自己会吃到什么口味。&lt;/p&gt;  &lt;p&gt;我不只是她生命的一行批注，还是好多好多绝无仅    &lt;br /&gt;有的画面。 &lt;/p&gt;  &lt;p&gt;一场名为青春的潮水淹没了我们。 &lt;/p&gt;  &lt;p&gt;&amp;#160; 浪退时，浑身湿透的我们一起坐在沙滩上，看着我们最喜爱的女孩子用力挥舞双    &lt;br /&gt;手，幸福踏向人生的另一端。     &lt;br /&gt;&amp;#160; 下一次浪来，会带走女孩留在沙滩上的美好足迹。     &lt;br /&gt;&amp;#160; 但我们还在。     &lt;br /&gt;&amp;#160; 刻在我们心中的女孩模样，也还会在。     &lt;br /&gt;&amp;#160; 豪情不减，嘻笑当年。 &lt;/p&gt;&lt;img src="http://www.cnblogs.com/phpzxh/aggbug/2264742.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/phpzxh/archive/2011/11/27/2264742.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/phpzxh/archive/2011/10/15/2212735.html</id><title type="text">B树、B-树、B+树、B*树</title><summary type="text">B树 即二叉搜索树： 1.所有非叶子结点至多拥有两个儿子（Left和Right）； 2.所有结点存储一个关键字； 3.非叶子结点的左指针指向小于其关键字的子树，右指针指向大于其关键字的子树； 如： B树的搜索，从根结点开始，如果查询的关键字与结点的关键字相等，那么就命中； ...</summary><published>2011-10-14T16:07:00Z</published><updated>2011-10-14T16:07:00Z</updated><author><name>phpzxh</name><uri>http://www.cnblogs.com/phpzxh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/phpzxh/archive/2011/10/15/2212735.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/phpzxh/archive/2011/10/15/2212735.html"/><content type="html">&lt;ol&gt;   &lt;li&gt;     &lt;div align="left"&gt;&lt;strong&gt;B树&lt;/strong&gt;&lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p align="left"&gt;即二叉搜索树：&lt;/p&gt;    &lt;p align="left"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.所有非叶子结点至多拥有两个儿子（Left和Right）；&lt;/p&gt;    &lt;p align="left"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.所有结点存储一个关键字；&lt;/p&gt;    &lt;p align="left"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3.非叶子结点的左指针指向小于其关键字的子树，右指针指向大于其关键字的子树；&lt;/p&gt;    &lt;p align="left"&gt;如：&lt;/p&gt;    &lt;p align="left"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/phpzxh/201110/201110150007028370.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="256" alt="image" src="http://images.cnblogs.com/cnblogs_com/phpzxh/201110/201110150007054169.png" width="251" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p align="left"&gt;&lt;/p&gt;    &lt;p align="left"&gt;B树的搜索，从根结点开始，如果查询的关键字与结点的关键字相等，那么就命中；&lt;/p&gt;    &lt;p align="left"&gt;否则，如果查询关键字比结点关键字小，就进入左儿子；如果比结点关键字大，就进入&lt;/p&gt;    &lt;p align="left"&gt;右儿子；如果左儿子或右儿子的指针为空，则报告找不到相应的关键字；&lt;/p&gt;    &lt;p align="left"&gt;如果B树的所有非叶子结点的左右子树的结点数目均保持差不多（平衡），那么B树&lt;/p&gt;    &lt;p align="left"&gt;的搜索性能逼近二分查找；但它比连续内存空间的二分查找的优点是，改变B树结构&lt;/p&gt;    &lt;p align="left"&gt;（插入与删除结点）不需要移动大段的内存数据，甚至通常是常数开销；&lt;/p&gt;    &lt;p align="left"&gt;如：&lt;/p&gt;    &lt;p align="left"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/phpzxh/201110/201110150007105003.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="256" alt="image" src="http://images.cnblogs.com/cnblogs_com/phpzxh/201110/201110150007156634.png" width="527" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p align="left"&gt;但B树在经过多次插入与删除后，有可能导致不同的结构&lt;/p&gt;    &lt;p align="left"&gt;&lt;img src="http://p.blog.csdn.net/images/p_blog_csdn_net/manesking/31.JPG" /&gt;&lt;/p&gt;    &lt;p&gt;上边也是一个B树，但它的搜索性能已经是线性的了；同样的关键字集合有可能导致不同的&lt;/p&gt;    &lt;p&gt;树结构索引；所以，使用B树还要考虑尽可能让B树保持左图的结构，和避免右图的结构，也就&lt;/p&gt;    &lt;p&gt;是所谓的“平衡”问题；&lt;/p&gt;    &lt;p&gt;实际使用的B树都是在原B树的基础上加上平衡算法，即“平衡二叉树”；如何保持B树&lt;/p&gt;    &lt;p&gt;结点分布均匀的平衡算法是平衡二叉树的关键；平衡算法是一种在B树中插入和删除结点的&lt;/p&gt;    &lt;p&gt;策略；&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;2、&lt;strong&gt;B-树&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;是一种多路搜索树（并不是二叉的）：&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.定义任意非叶子结点最多只有M个儿子；且M&amp;gt;2；&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.根结点的儿子数为[2, M]；&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3.除根结点以外的非叶子结点的儿子数为[M/2, M]；&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 4.每个结点存放至少M/2-1（取上整）和至多M-1个关键字；（至少2个关键字）&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 5.非叶子结点的关键字个数=指向儿子的指针个数-1；&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 6.非叶子结点的关键字：K[1], K[2], …, K[M-1]；且K[i] &amp;lt; K[i+1]；&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 7.非叶子结点的指针：P[1], P[2], …, P[M]；其中P[1]指向关键字小于K[1]的&lt;/p&gt;    &lt;p&gt;子树，P[M]指向关键字大于K[M-1]的子树，其它P[i]指向关键字属于(K[i-1], K[i])的子树；&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 8.所有叶子结点位于同一层；&lt;/p&gt;    &lt;p&gt;如：（M=3）&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&lt;img src="http://p.blog.csdn.net/images/p_blog_csdn_net/manesking/4.JPG" /&gt;&lt;/p&gt;    &lt;p&gt;B-树的搜索，从根结点开始，对结点内的关键字（有序）序列进行二分查找，如果&lt;/p&gt;    &lt;p&gt;命中则结束，否则进入查询关键字所属范围的儿子结点；重复，直到所对应的儿子指针为&lt;/p&gt;    &lt;p&gt;空，或已经是叶子结点；&lt;/p&gt;    &lt;p&gt;B-树的特性：&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.关键字集合分布在整颗树中；&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.任何一个关键字出现且只出现在一个结点中；&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3.搜索有可能在非叶子结点结束；&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 4.其搜索性能等价于在关键字全集内做一次二分查找；&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 5.自动层次控制；&lt;/p&gt;    &lt;p&gt;由于限制了除根结点以外的非叶子结点，至少含有M/2个儿子，确保了结点的至少&lt;/p&gt;    &lt;p&gt;利用率，其最底搜索性能为：&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&lt;img src="http://p.blog.csdn.net/images/p_blog_csdn_net/manesking/0.JPG" /&gt;&lt;/p&gt;    &lt;p&gt;其中，M为设定的非叶子结点最多子树个数，N为关键字总数；&lt;/p&gt;    &lt;p&gt;所以B-树的性能总是等价于二分查找（与M值无关），也就没有B树平衡的问题；&lt;/p&gt;    &lt;p&gt;由于M/2的限制，在插入结点时，如果结点已满，需要将结点分裂为两个各占&lt;/p&gt;    &lt;p&gt;M/2的结点；删除结点时，需将两个不足M/2的兄弟结点合并；&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;3、B+树&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; B+树是B-树的变体，也是一种多路搜索树：&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.其定义基本与B-树同，除了：&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.非叶子结点的子树指针与关键字个数相同；&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3.非叶子结点的子树指针P[i]，指向关键字值属于[K[i], K[i+1])的子树&lt;/p&gt;    &lt;p&gt;（B-树是开区间）；&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 5.为所有叶子结点增加一个链指针；&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 6.所有关键字都在叶子结点出现；&lt;/p&gt;    &lt;p&gt;如：（M=3）&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://p.blog.csdn.net/images/p_blog_csdn_net/manesking/5.JPG" /&gt;&lt;/p&gt;  &lt;p&gt;B+的搜索与B-树也基本相同，区别是B+树只有达到叶子结点才命中（B-树可以在&lt;/p&gt;  &lt;p&gt;非叶子结点命中），其性能也等价于在关键字全集做一次二分查找；&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; B+的特性：&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1.所有关键字都出现在叶子结点的链表中（稠密索引），且链表中的关键字恰好&lt;/p&gt;  &lt;p&gt;是有序的；&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.不可能在非叶子结点命中；&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3.非叶子结点相当于是叶子结点的索引（稀疏索引），叶子结点相当于是存储&lt;/p&gt;  &lt;p&gt;（关键字）数据的数据层；&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 4.更适合文件索引系统；&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4、B*树&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;是B+树的变体，在B+树的非根和非叶子结点再增加指向兄弟的指针；&lt;/p&gt;  &lt;p&gt;&lt;img src="http://p.blog.csdn.net/images/p_blog_csdn_net/manesking/6.JPG" /&gt;&lt;/p&gt;  &lt;p&gt;B*树定义了非叶子结点关键字个数至少为(2/3)*M，即块的最低使用率为2/3&lt;/p&gt;  &lt;p&gt;（代替B+树的1/2）；&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; B+树的分裂：当一个结点满时，分配一个新的结点，并将原结点中1/2的数据&lt;/p&gt;  &lt;p&gt;复制到新结点，最后在父结点中增加新结点的指针；B+树的分裂只影响原结点和父&lt;/p&gt;  &lt;p&gt;结点，而不会影响兄弟结点，所以它不需要指向兄弟的指针；&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; B*树的分裂：当一个结点满时，如果它的下一个兄弟结点未满，那么将一部分&lt;/p&gt;  &lt;p&gt;数据移到兄弟结点中，再在原结点插入关键字，最后修改父结点中兄弟结点的关键字&lt;/p&gt;  &lt;p&gt;（因为兄弟结点的关键字范围改变了）；如果兄弟也满了，则在原结点与兄弟结点之&lt;/p&gt;  &lt;p&gt;间增加新结点，并各复制1/3的数据到新结点，最后在父结点增加新结点的指针；&lt;/p&gt;  &lt;p&gt;所以，B*树分配新结点的概率比B+树要低，空间使用率更高；&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;小结&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; B树：二叉树，每个结点只存储一个关键字，等于则命中，小于走左结点，大于&lt;/p&gt;  &lt;p&gt;走右结点；&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; B-树：多路搜索树，每个结点存储M/2到M个关键字，非叶子结点存储指向关键&lt;/p&gt;  &lt;p&gt;字范围的子结点；&lt;/p&gt;  &lt;p&gt;所有关键字在整颗树中出现，且只出现一次，非叶子结点可以命中；&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; B+树：在B-树基础上，为叶子结点增加链表指针，所有关键字都在叶子结点&lt;/p&gt;  &lt;p&gt;中出现，非叶子结点作为叶子结点的索引；B+树总是到叶子结点才命中；&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; B*树：在B+树基础上，为非叶子结点也增加链表指针，将结点的最低利用率&lt;/p&gt;  &lt;p&gt;从1/2提高到2/3&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;相关链接&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.csdn.net/v_JULY_v/article/details/6530142" target="_blank"&gt;http://blog.csdn.net/v_JULY_v/article/details/6530142&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/phpzxh/aggbug/2212735.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/phpzxh/archive/2011/10/15/2212735.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/phpzxh/archive/2011/09/07/2170170.html</id><title type="text">PHP扩展之hello word</title><summary type="text">一、下载源码。 先到官网下载PHP的源代码，这里我用的是PHP5.3.5 打开我们可以看到ext这个目录这目录是放所有的扩展的。在改目录下我们可以看到ext_skel的脚本下面我就用这个命令来生成扩展的基本架构。 二、创建基本框架 ./ext_skel --extname=example这个命令会在ext目录下生成一个example目录，改目录下有以下文件 #在目录下有不少文件，t...</summary><published>2011-09-07T10:55:00Z</published><updated>2011-09-07T10:55:00Z</updated><author><name>phpzxh</name><uri>http://www.cnblogs.com/phpzxh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/phpzxh/archive/2011/09/07/2170170.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/phpzxh/archive/2011/09/07/2170170.html"/><content type="html">&lt;p&gt;一、下载源码。&lt;/p&gt;  &lt;p&gt;先到官网下载PHP的源代码，这里我用的是PHP5.3.5&lt;/p&gt;  &lt;p&gt;打开我们可以看到ext这个目录这目录是放所有的扩展的。在改目录下我们可以看到ext_skel的脚本下面我就用这个命令来生成扩展的基本架构。&lt;/p&gt;  &lt;p&gt;二、创建基本框架&lt;/p&gt;  &lt;div&gt;   &lt;pre&gt;./ext_skel --extname=example&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;这个命令会在ext目录下生成一个example目录，改目录下有以下文件&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;#在目录下有不少文件，testmodule.c 和 config.m4 是最重要的&#xD;
example.c             #是我们扩展的主要文件&#xD;
config.m4                    #m4是一个宏解释工具，用来生成我们扩展的makefile&#xD;
CREDITES                    #这个文件没什么太大的作用，只是用来在发布你的扩展的时候附加一些其他信息&#xD;
EXPERIMENTAL           #这个文件只是标志说，这个扩展是实验性的，所以可以不用管它&#xD;
php_example.h    #这个是我们扩展的头文件&#xD;
tests/001.phpt           #这个也是个测试文件，不过使用的是单元测试，阶段测试&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;三、实现。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;１、修改配置文件config.m4，去掉前面的dnl(dnl在m4文件里表注释)&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;vi config.m4&#xD;
PHP_ARG_ENABLE(example, whether to enable laiwenhui support,&#xD;
[  --enable-laiwenhui           Enable laiwenhui support])&#xD;
&#xD;
# PHP_ARG_WITH(testmodule, for testmodule support,&#xD;
# Make sure that the comment is aligned:&#xD;
# --with-testmodule             Include testmodule support])&#xD;
 &#xD;
# 这里的with是说明，要启用这个模块，依赖于某些其他模块，这里我们可以暂时不管。&#xD;
# 比如：模块example，如果依赖apxs的话，就需要：&#xD;
# /configure --with-apxs=/usr/&lt;span style="color: #0000ff"&gt;local&lt;/span&gt;/apache/bin/apxs  --enable-example&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;2、声明函数&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;在文件php_example.h文件中编辑&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;vi php_example.h&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
我们找到PHP_FUNCTION(confirm_example_compiled); 在其后面添加PHP_FUNCTION(test); &#xD;
&#xD;
&lt;br /&gt;&#xD;
&#xD;
&lt;p&gt;3、实现函数test&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;vi example.c&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;把下面代码写到最后面&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&lt;span style="color: #008000"&gt;/**&#xD;
 * 我添加的第一个PHP扩展&#xD;
 *&#xD;
 * */&lt;/span&gt;&#xD;
&#xD;
PHP_FUNCTION(test)&#xD;
{&#xD;
    char *str = NULL;&#xD;
    char *arg = NULL;&#xD;
    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; arg_len;&#xD;
    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; len;&#xD;
&lt;span style="color: #008000"&gt;//    str = &amp;quot;Hello my first php extention! ^_^&amp;quot;;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span style="color: #008000"&gt;//len = strlen(str);&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span style="color: #008000"&gt;//RETURN_STRINGL(str, len, 0); &lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span style="color: #008000"&gt;//开始想这样写的可以没效果，不知道为什么不行。难道不支持strlen但是能编译通过。&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, &amp;quot;&lt;span style="color: #8b0000"&gt;s&lt;/span&gt;&amp;quot;, &amp;amp;arg, &amp;amp;arg_len) == FAILURE) {&#xD;
        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&#xD;
    }&#xD;
    len = spprintf(&amp;amp;str, 0, &amp;quot;&lt;span style="color: #8b0000"&gt;Hello my first php extention! ^_^ param %s&lt;/span&gt;&amp;quot;,arg);&#xD;
    RETURN_STRINGL(str, len, 0);&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;spprintf应该是php的函数。&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;zend_parse_parameters是PHP的一个函数表示取得参数解析，如果失败返回。&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;4、告诉zend引擎这个example模块中有哪些函数。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;找到：zend_function_entry testmodule_functions[]这一行，注释的意思是：所有可用的函数必须要在这里面定义。 &#xD;
  &lt;br /&gt;修改为：&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;* Every user visible function must have an entry in example_functions[].&#xD;
 */&#xD;
&lt;span style="color: #0000ff"&gt;const&lt;/span&gt; zend_function_entry example_functions[] = {&#xD;
        PHP_FE(confirm_example_compiled,        NULL)           &lt;span style="color: #008000"&gt;/* For testing, remove later. */&lt;/span&gt;&#xD;
        PHP_FE(test,    NULL)           &lt;span style="color: #008000"&gt;/* 我的扩展test */&lt;/span&gt;&#xD;
        {NULL,NULL, NULL}       &lt;span style="color: #008000"&gt;/* Must be the last line in example_functions[] */&lt;/span&gt;&#xD;
};&#xD;
&lt;span style="color: #008000"&gt;/* }}} &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;br /&gt;&#xD;
&#xD;
&lt;p&gt;5、编译&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;进入example模块&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;./configure –with-php-config=/usr/local/php/bin/php-config&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;/usr/local/php/bin/phpize&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;make&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;cp modules/example.so /usr/local/php/lib/php/extensions/ &#xD;
  &lt;br /&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;然后修改php.ini，让example.so启用，最后重启Web服务 &#xD;
  &lt;br /&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;四、测试。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&amp;lt;?php&#xD;
&lt;span style="color: #008000"&gt;//echo confirm_example_compiled(2);&lt;/span&gt;&#xD;
echo test(2);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/phpzxh/201109/201109071855003341.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="HF%QJY~H@J89U)1A7]}ZKZB" border="0" alt="HF%QJY~H@J89U)1A7]}ZKZB" src="http://images.cnblogs.com/cnblogs_com/phpzxh/201109/201109071855006962.jpg" width="244" height="53" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;这里有篇鸟哥的文章解释的更清楚。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://www.laruence.com/2009/04/28/719.html"&gt;http://www.laruence.com/2009/04/28/719.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/phpzxh/aggbug/2170170.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/phpzxh/archive/2011/09/07/2170170.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/phpzxh/archive/2011/05/23/2054334.html</id><title type="text">js编码方式详解</title><summary type="text">escape、encodeURI 和encodeURIComponent 的区别 escape(), encodeURI()和encodeURIComponent()是在Javascript中用于编码字符串的三个常用的方法，而他们之间的异同却困扰了很多的Javascript初学者，今天我就在这里对这三个方法详细地分析与比较一下。 escape() 方法 MSDN JScript Reference...</summary><published>2011-05-23T06:57:00Z</published><updated>2011-05-23T06:57:00Z</updated><author><name>phpzxh</name><uri>http://www.cnblogs.com/phpzxh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/phpzxh/archive/2011/05/23/2054334.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/phpzxh/archive/2011/05/23/2054334.html"/><content type="html">&lt;p&gt;escape、encodeURI 和encodeURIComponent 的区别&lt;/p&gt;  &lt;p&gt;escape(), encodeURI()和encodeURIComponent()是在Javascript中用于编码字符串的三个常用的方法，而他们之间的异同却困扰了很多的Javascript初学者，今天我就在这里对这三个方法详细地分析与比较一下。&lt;/p&gt;  &lt;p&gt;escape() 方法&lt;/p&gt;  &lt;p&gt;MSDN JScript Reference中如是说：&lt;/p&gt;  &lt;p&gt;The escape method returns a string value (in Unicode format) that contains the contents of [the argument]. All spaces, punctuation, accented characters, and any other non-ASCII characters are replaced with %xx encoding, where xx is equivalent to the hexadecimal number representing the character. For example, a space is returned as &amp;quot;%20.&amp;quot;&lt;/p&gt;  &lt;p&gt;鄙人译：escape方法以Unicode格式返回一个包含传入参数内容的string类型的值。 Escape方法会将传入参数中所有的空格、标点符号、重音字符以及其它任何非ASCII字符替换为%xx的编码形式，其中xx与其所表示的字符的16进制数表示形式相同。如空格字符的16进制表示形式为0x20，则此时xx应为20，即escape(‘ ’) 返回“%20”。&lt;/p&gt;  &lt;p&gt;Mozilla Developer Core Javascript Guide中如是说：&lt;/p&gt;  &lt;p&gt;The escape and unescape functions let you encode and decode strings. The escape function returns the hexadecimal encoding of an argument in the ISO Latin character set. The unescape function returns the ASCII string for the specified hexadecimal encoding value.&lt;/p&gt;  &lt;p&gt;鄙人译：escape和unescape方法能够帮助你编码和解码字符串。escape方法对于ISO Latin字符集中的字符组成的参数，返回其16进制编码。相对应的，unescape方法则能将16进制编码形式的参数转化成为其ASCII码形式。&lt;/p&gt;  &lt;p&gt;encodeURI()方法&lt;/p&gt;  &lt;p&gt;MSDN JScript Reference中如是说：&lt;/p&gt;  &lt;p&gt;The encodeURI method returns an encoded URI. If you pass the result to decodeURI, the original string is returned. The encodeURI method does not encode the following characters: &amp;quot;:&amp;quot;, &amp;quot;/&amp;quot;, &amp;quot;;&amp;quot;, and &amp;quot;?&amp;quot;. Use encodeURIComponent to encode these characters.&lt;/p&gt;  &lt;p&gt;鄙人译：encodeURI方法返回一个经过编码的URI。如果将encodeURI方法的编码结果传递给decodeURI方法作参数，则能得到原始的未编码的字符串。需要注意到是encodeURI方法不编码如下字符&amp;quot;:&amp;quot;, &amp;quot;/&amp;quot;, &amp;quot;;&amp;quot;, and &amp;quot;?&amp;quot;。如果想要编码这些字符，请使用encodeURIComponent方法。&lt;/p&gt;  &lt;p&gt;Mozilla Developer Core Javascript Guide中如是说：&lt;/p&gt;  &lt;p&gt;Encodes a Uniform Resource Identifier (URI) by replacing each instance of certain characters by one, two, or three escape sequences representing the UTF-8 encoding of the character.&lt;/p&gt;  &lt;p&gt;鄙人译：通过将每个属于特定的字符集合的字符替换为一个、两个或者三个（为什么是“一个、两个或者三个”本人也没有搞懂，望高人赐教）使用UTF-8编码来表示这个字符的escape序列来编码一个URI。如 ~!@#$%^&amp;amp;*(){}[]=:/,;?+\'&amp;quot;\\ 将被替换为 ~!@#$%25%5E&amp;amp;*()%7B%7D%5B%5D=:/,;?+'%22%5C&lt;/p&gt;  &lt;p&gt;encodeURIComponent()方法&lt;/p&gt;  &lt;p&gt;MSDN JScript Reference中如是说：&lt;/p&gt;  &lt;p&gt;The encodeURIComponent method returns an encoded URI. If you pass the result to decodeURIComponent, the original string is returned. Because the encodeURIComponent method encodes all characters, be careful if the string represents a path such as /folder1/folder2/default.html. The slash characters will be encoded and will not be valid if sent as a request to a web server. Use the encodeURI method if the string contains more than a single URI component.&lt;/p&gt;  &lt;p&gt;鄙人译：encodeURIComponent方法返回一个编码过的URI。如果将encodeURIComponent方法的编码结果传递给 encodeURIComponent方法作参数，则能得到原始的未编码的字符串。因为encodeURIComponent方法会编码所有的字符，所以如果待编码的字符串是用来表示一个路径（如/dir1/dir2/index.htm）时，就一定要小心使用了。‘/’符号会被其编码之后，将不再是一个有效的路径标识符，所以不能被web服务器正确地识别。当字符串包含一个单独的URI component(指?后面的请求参数)的时候，请使用此方法。&lt;/p&gt;  &lt;p&gt;Mozilla Developer Core Javascript Guide中如是说：&lt;/p&gt;  &lt;p&gt;Encodes a Uniform Resource Identifier (URI) component by replacing each instance of certain characters by one, two, or three escape sequences representing the UTF-8 encoding of the character.&lt;/p&gt;  &lt;p&gt;鄙人译：通过将每个属于特定的字符集合的字符替换为一个、两个或者三个（为什么是“一个、两个或者三个”本人也没有搞懂，望高人赐教）使用UTF-8编码来表示这个字符的escape序列来编码一个URIComponent。&lt;/p&gt;  &lt;p&gt;有什么区别？何时使用？&lt;/p&gt;  &lt;p&gt;通过上面的介绍可以看出，MS的文档明显要比Mozilla详细、易懂一些，但是它们表达的都是一个意思。但是escape(), encodeURI()和 encodeURIComponent()有什么异同，它们分别适用于那种特定的情况呢？&lt;/p&gt;  &lt;p&gt;escape方法并不编码字符+。而我们知道，在用户提交的表单字段中，如果有空格，则会被转化为+字符，而服务器解析的时候则会认为+号代表空格。由于这个缺陷，escape方法并不能正确地处理所有的非ASCII字符，你应当尽量避免使用escape方法，取而代之，你最好选择 encodeURIComponent()方法。&lt;/p&gt;  &lt;p&gt;escape()不编码的字符：@*/+&lt;/p&gt;  &lt;p&gt;相对于使用escape方法，使用encodeURI方法会显得更专业一些。当你需要编码一整个URI的时候，你可以使用此方法，因为URI中的合法字符都不会被编码转换。需要注意到是字符’也是URI中的合法字符，所以也不会被编码转换。&lt;/p&gt;  &lt;p&gt;encodeURI() 不编码的字符： ~!@#@{content}*()=:/,;?+'&lt;/p&gt;  &lt;p&gt;encodeURIComponent方法在编码单个URIComponent（指请求参数）应当是最常用的。需要注意到是字符’也是URI中的合法字符，所以也不会被编码转换。&lt;/p&gt;  &lt;p&gt;encodeURIComponent()不编码的字符： ~!*()'&lt;/p&gt;&lt;img src="http://www.cnblogs.com/phpzxh/aggbug/2054334.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/phpzxh/archive/2011/05/23/2054334.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/phpzxh/archive/2011/05/23/2054331.html</id><title type="text">CSS备忘录</title><summary type="text">一、层定位 普通流、浮动和绝对定位 position : static | absolute | fixed | relative position:satic 就是普通流(普通流中的元素的位置由元素在 HTML 中的位置决定。) position:relative就是相对定位(相对定位的元素框会偏移某个距离。元素仍然保持其未定位前的形状，它原本所占的空间仍保留) 比如: &amp;lt;!DOCTYPE ht...</summary><published>2011-05-23T06:54:00Z</published><updated>2011-05-23T06:54:00Z</updated><author><name>phpzxh</name><uri>http://www.cnblogs.com/phpzxh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/phpzxh/archive/2011/05/23/2054331.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/phpzxh/archive/2011/05/23/2054331.html"/><content type="html">&lt;p&gt;一、层定位&lt;/p&gt;  &lt;p&gt;普通流、浮动和绝对定位&lt;/p&gt;  &lt;p&gt;&lt;b&gt;position : &lt;/b&gt;&lt;b&gt;static&lt;/b&gt; | &lt;b&gt;absolute&lt;/b&gt; | &lt;b&gt;fixed&lt;/b&gt; | &lt;b&gt;relative&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;position:satic 就是普通流(普通流中的元素的位置由元素在 HTML 中的位置决定。)&lt;/p&gt;  &lt;p&gt;position:relative就是相对定位(相对定位的元素框会偏移某个距离。元素仍然保持其未定位前的形状，它原本所占的空间仍保留)&lt;/p&gt;  &lt;p&gt;比如:&lt;/p&gt;  &lt;div&gt;   &lt;pre&gt;&amp;lt;!&lt;span style="color: #800000"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: #800000"&gt;html&lt;/span&gt; &lt;span style="color: #800000"&gt;PUBLIC&lt;/span&gt; &amp;quot;&lt;span style="color: #800000"&gt;-&lt;/span&gt;//&lt;span style="color: #800000"&gt;W3C&lt;/span&gt;//&lt;span style="color: #800000"&gt;DTD&lt;/span&gt; &lt;span style="color: #800000"&gt;XHTML&lt;/span&gt; &lt;span style="color: #800000"&gt;1&lt;/span&gt;.&lt;span style="color: #800000"&gt;0&lt;/span&gt; &lt;span style="color: #800000"&gt;Transitional&lt;/span&gt;//&lt;span style="color: #800000"&gt;EN&lt;/span&gt;&amp;quot; &amp;quot;&lt;span style="color: #800000"&gt;http&lt;/span&gt;://&lt;span style="color: #800000"&gt;www&lt;/span&gt;.&lt;span style="color: #800000"&gt;w3&lt;/span&gt;.&lt;span style="color: #800000"&gt;org&lt;/span&gt;/&lt;span style="color: #800000"&gt;TR&lt;/span&gt;/&lt;span style="color: #800000"&gt;xhtml1&lt;/span&gt;/&lt;span style="color: #800000"&gt;DTD&lt;/span&gt;/&lt;span style="color: #800000"&gt;xhtml1-transitional&lt;/span&gt;.&lt;span style="color: #800000"&gt;dtd&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&amp;gt;&#xD;
  &amp;lt;&lt;span style="color: #800000"&gt;meta&lt;/span&gt; &lt;span style="color: #800000"&gt;http-equiv&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;Content-Type&lt;/span&gt;&amp;quot; &lt;span style="color: #800000"&gt;content&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;text&lt;/span&gt;/&lt;span style="color: #800000"&gt;html&lt;/span&gt;; &lt;span style="color: #800000"&gt;charset&lt;/span&gt;=&lt;span style="color: #800000"&gt;utf-8&lt;/span&gt;&amp;quot; /&amp;gt;&#xD;
  &amp;lt;&lt;span style="color: #800000"&gt;meta&lt;/span&gt; &lt;span style="color: #800000"&gt;name&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;generator&lt;/span&gt;&amp;quot; &lt;span style="color: #800000"&gt;content&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;editplus&lt;/span&gt;&amp;quot; /&amp;gt;&#xD;
  &amp;lt;&lt;span style="color: #800000"&gt;meta&lt;/span&gt; &lt;span style="color: #800000"&gt;name&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;author&lt;/span&gt;&amp;quot; &lt;span style="color: #800000"&gt;content&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;guanqing&lt;/span&gt;&amp;quot; /&amp;gt;&#xD;
  &amp;lt;&lt;span style="color: #800000"&gt;meta&lt;/span&gt; &lt;span style="color: #800000"&gt;name&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;keywords&lt;/span&gt;&amp;quot; &lt;span style="color: #800000"&gt;content&lt;/span&gt;=&amp;quot;&amp;quot; /&amp;gt;&#xD;
  &amp;lt;&lt;span style="color: #800000"&gt;meta&lt;/span&gt; &lt;span style="color: #800000"&gt;name&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;description&lt;/span&gt;&amp;quot; &lt;span style="color: #800000"&gt;content&lt;/span&gt;=&amp;quot;&amp;quot; /&amp;gt;&#xD;
 &amp;lt;/&lt;span style="color: #800000"&gt;head&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;style&lt;/span&gt; &lt;span style="color: #800000"&gt;type&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;text&lt;/span&gt;/&lt;span style="color: #800000"&gt;css&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
&amp;lt;!&lt;span style="color: #800000"&gt;--&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span style="color: #800000"&gt;&lt;/span&gt;&lt;font color="#800000"&gt;&lt;/font&gt;&#xD;
&lt;span style="color: #800000"&gt;#a&lt;/span&gt; {&#xD;
    &lt;span style="color: #ff0000"&gt;width&lt;/span&gt;:&lt;span style="color: #0000ff"&gt;200px&lt;/span&gt;;&#xD;
	&lt;span style="color: #ff0000"&gt;height&lt;/span&gt;:&lt;span style="color: #0000ff"&gt;500px&lt;/span&gt;;&#xD;
	&lt;span style="color: #ff0000"&gt;background&lt;/span&gt;:&lt;span style="color: #0000ff"&gt;red&lt;/span&gt;;&#xD;
	&lt;span style="color: #ff0000"&gt;left&lt;/span&gt;:&lt;span style="color: #0000ff"&gt;10px&lt;/span&gt;;&#xD;
	&lt;span style="color: #ff0000"&gt;top&lt;/span&gt;:&lt;span style="color: #0000ff"&gt;20px&lt;/span&gt;;&#xD;
	&lt;span style="color: #ff0000"&gt;position&lt;/span&gt;:&lt;span style="color: #0000ff"&gt;relative&lt;/span&gt;;&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
  &lt;div&gt;&#xD;
    &lt;pre&gt;&lt;span style="color: #800000"&gt;#b&lt;/span&gt; {&#xD;
	&lt;span style="color: #ff0000"&gt;width&lt;/span&gt;:&lt;span style="color: #0000ff"&gt;20px&lt;/span&gt;;&#xD;
	&lt;span style="color: #ff0000"&gt;height&lt;/span&gt;:&lt;span style="color: #0000ff"&gt;50px&lt;/span&gt;;&#xD;
	&lt;span style="color: #ff0000"&gt;background&lt;/span&gt;:&lt;span style="color: #0000ff"&gt;green&lt;/span&gt;;&#xD;
}&lt;/pre&gt;&#xD;
  &lt;/div&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span style="color: #800000"&gt;--&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;/&lt;span style="color: #800000"&gt;style&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&amp;gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&amp;lt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #800000"&gt;id&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;b&lt;/span&gt;&amp;quot;&amp;gt;&amp;lt;/&lt;span style="color: #800000"&gt;div&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #800000"&gt;id&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
&amp;lt;/&lt;span style="color: #800000"&gt;div&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;/&lt;span style="color: #800000"&gt;body&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;效果：a层相对于b层，相对于上面的距离是20px;相对于B的左边10px;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;a href="http://images.cnblogs.com/cnblogs_com/phpzxh/201105/201105231454079137.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/phpzxh/201105/201105231454076073.png" width="428" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;position:&lt;b&gt;absolute&lt;/b&gt; 表示绝对定位，将对象从文档流中拖出，也就是浮在其他的层之上。如果父的层有属性position:relative，该层浮在该父层之上，left,top的值也是相对于父层，没有则依据&lt;strong&gt; &lt;/strong&gt;body 对象。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;代码：&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&amp;lt;&lt;span style="color: #800000"&gt;meta&lt;/span&gt; &lt;span style="color: #800000"&gt;name&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;description&lt;/span&gt;&amp;quot; &lt;span style="color: #800000"&gt;content&lt;/span&gt;=&amp;quot;&amp;quot; /&amp;gt;&#xD;
 &amp;lt;/&lt;span style="color: #800000"&gt;head&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;style&lt;/span&gt; &lt;span style="color: #800000"&gt;type&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;text&lt;/span&gt;/&lt;span style="color: #800000"&gt;css&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
&amp;lt;!&lt;span style="color: #800000"&gt;--&lt;/span&gt;&#xD;
&lt;span style="color: #800000"&gt;#downloadDiv&lt;/span&gt;{&#xD;
	&lt;span style="color: #800000"&gt;padding&lt;/span&gt;:&lt;span style="color: #800000"&gt;5px&lt;/span&gt;;&#xD;
	&lt;span style="color: #800000"&gt;margin&lt;/span&gt;:&lt;span style="color: #800000"&gt;2px&lt;/span&gt;;&#xD;
	&lt;span style="color: #800000"&gt;width&lt;/span&gt;:&lt;span style="color: #800000"&gt;160px&lt;/span&gt;;&#xD;
	&lt;span style="color: #800000"&gt;border&lt;/span&gt;:&lt;span style="color: #800000"&gt;1px&lt;/span&gt; &lt;span style="color: #800000"&gt;solid&lt;/span&gt; &lt;span style="color: #800000"&gt;#ccc&lt;/span&gt;;&#xD;
	&lt;span style="color: #800000"&gt;background&lt;/span&gt;:&lt;span style="color: #800000"&gt;#f1f1f1&lt;/span&gt;;&#xD;
	}&#xD;
&lt;span style="color: #800000"&gt;#downloadDiv&lt;/span&gt;{&#xD;
   &lt;span style="color: #800000"&gt;width&lt;/span&gt;:&lt;span style="color: #800000"&gt;81px&lt;/span&gt;;&#xD;
   &lt;span style="color: #800000"&gt;line-height&lt;/span&gt;: &lt;span style="color: #800000"&gt;24px&lt;/span&gt;;&#xD;
   &lt;span style="color: #800000"&gt;left&lt;/span&gt;:&lt;span style="color: #800000"&gt;30px&lt;/span&gt;;&#xD;
   &lt;span style="color: #800000"&gt;top&lt;/span&gt;:&lt;span style="color: #800000"&gt;30px&lt;/span&gt;;&#xD;
   &lt;span style="color: #800000"&gt;position&lt;/span&gt;:&lt;span style="color: #800000"&gt;absolute&lt;/span&gt;;&#xD;
}&#xD;
&lt;span style="color: #800000"&gt;#a&lt;/span&gt; {&#xD;
    &lt;span style="color: #ff0000"&gt;width&lt;/span&gt;:&lt;span style="color: #0000ff"&gt;200px&lt;/span&gt;;&#xD;
	&lt;span style="color: #ff0000"&gt;height&lt;/span&gt;:&lt;span style="color: #0000ff"&gt;180px&lt;/span&gt;;&#xD;
	&lt;span style="color: #ff0000"&gt;background&lt;/span&gt;:&lt;span style="color: #0000ff"&gt;red&lt;/span&gt;;&#xD;
	&#xD;
&lt;span style="color: #008000"&gt;/*	position:relative;*/&lt;/span&gt;&#xD;
}&#xD;
&#xD;
&lt;span style="color: #800000"&gt;--&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;/&lt;span style="color: #800000"&gt;style&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #800000"&gt;id&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #800000"&gt;id&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;downloadDiv&lt;/span&gt;&amp;quot;&amp;gt;&lt;span style="color: #800000"&gt;下载&lt;/span&gt;&amp;lt;/&lt;span style="color: #800000"&gt;div&lt;/span&gt;&amp;gt; &#xD;
&amp;lt;/&lt;span style="color: #800000"&gt;div&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;/&lt;span style="color: #800000"&gt;body&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
如果a层不加positon:relative &lt;span style="color: #800000"&gt;downloadDiv&lt;/span&gt;的position的left和top的值相对的是boday，删除注释相对的是a层。 &#xD;
&#xD;
&lt;br /&gt;&#xD;
&#xD;
&lt;p&gt;相对boday的效果: ：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/phpzxh/201105/201105231454079104.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/phpzxh/201105/201105231454082136.png" width="213" height="191" /&gt;&lt;/a&gt; &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;相对a层的效果：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/phpzxh/201105/201105231454087119.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/phpzxh/201105/201105231454086563.png" width="213" height="189" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/phpzxh/aggbug/2054331.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/phpzxh/archive/2011/05/23/2054331.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/phpzxh/archive/2011/04/21/2024365.html</id><title type="text">jQuery AJAX回调函数this指向问题</title><summary type="text">如在全局作用域调用一个含this的对象，此时当前对象的this指向的是window。为了让this的指向符合自己的意愿，JavaScript提供了两个方法用以改变this的指向，它们是call和apply，当然也有利用闭包来实现的方法。本文通过一个例子来说明这些问题。 先看一段演示代码，这代码只供演示用，没有实际意义。 //一个没有实际意义的socket连接对象 var socket = { co...</summary><published>2011-04-21T15:09:00Z</published><updated>2011-04-21T15:09:00Z</updated><author><name>phpzxh</name><uri>http://www.cnblogs.com/phpzxh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/phpzxh/archive/2011/04/21/2024365.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/phpzxh/archive/2011/04/21/2024365.html"/><content type="html">&lt;p&gt;如在全局作用域调用一个含this的对象，此时当前对象的this指向的是window。为了让this的指向符合自己的意愿，JavaScript提供了两个方法用以改变this的指向，它们是call和apply，当然也有利用闭包来实现的方法。本文通过一个例子来说明这些问题。    &lt;br /&gt;先看一段演示代码，这代码只供演示用，没有实际意义。 &lt;/p&gt;  &lt;div&gt;   &lt;pre&gt;&lt;span style="color: #008000"&gt;//一个没有实际意义的socket连接对象 &lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; socket = &#xD;
{ &#xD;
 connect: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(host, port) &#xD;
 { &#xD;
&lt;span style="color: #0000ff"&gt;    alert&lt;/span&gt;('Connecting socket server,host:' + host + ',port:' + port); &#xD;
 } &#xD;
}; &#xD;
&lt;span style="color: #008000"&gt;//一个即时通讯类，其中connect方法还将作为AJAX回调函数被调用 &lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; classIm() &#xD;
{ &#xD;
&lt;span style="color: #0000ff"&gt;   this&lt;/span&gt;.host = '192.168.1.28'; &#xD;
&lt;span style="color: #0000ff"&gt;   this&lt;/span&gt;.port = '8080'; &#xD;
&lt;span style="color: #0000ff"&gt;   this&lt;/span&gt;.connect = &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(data) &#xD;
   { &#xD;
     socket.connect(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.host, &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.port); &#xD;
   }; &#xD;
} &#xD;
&lt;span style="color: #008000"&gt;//实例化即时通讯类 &lt;/span&gt;&#xD;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; IM = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; classIm(); &#xD;
&lt;span style="color: #008000"&gt;//AJAX请求，这里假设要打开socket连接首先要通过WEB得知用户WEB登录成功 &lt;/span&gt;&#xD;
$.get('CheckWebLogin.aspx', IM.connect); &#xD;
运行上面的例子，你将看到弹出的host与port都是undefined，那是因为回调函数的this不是指向IM对象，而是jQuery的AJAX配置对象ajaxSettings。在jQuery内部是用s.success代替传入的回调函数去执行的，而success的调用对象就是s，即下面ajaxSettings对象的缩写。 &#xD;
ajaxSettings: &#xD;
{ &#xD;
url: &lt;span style="color: #0000ff"&gt;location&lt;/span&gt;.href, &#xD;
global: &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;, &#xD;
type: &amp;quot;&lt;span style="color: #8b0000"&gt;GET&lt;/span&gt;&amp;quot;, &#xD;
contentType: &amp;quot;&lt;span style="color: #8b0000"&gt;application/x-www-form-urlencoded&lt;/span&gt;&amp;quot;, &#xD;
processData: &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;, &#xD;
async: &lt;span style="color: #0000ff"&gt;true&lt;/span&gt; &#xD;
} &lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;为了证明这一点，你可以这样修改代码测试一下，你将看到是url、global、type、contentType等对象的属性名称： &lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.connect = &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(data) &#xD;
{ &#xD;
&lt;span style="color: #0000ff"&gt;  for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; key &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;) &#xD;
  { &#xD;
&lt;span style="color: #0000ff"&gt;   alert&lt;/span&gt;(key); &#xD;
  } &#xD;
} &lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;现在了解了问题所在，接下来想办法解决这个问题。其实我们的目的是希望AJAX回调函数代码socket.connect(this.host, this.port)中的this指向类classIm的实例对象IM，或者说是想socket.connect()方法能得到正确的参数值吧。为了得到预期的AJAX回调函数执行结果，&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;我分析了大致有下面几种方法：&lt;/pre&gt;&#xD;
&#xD;
  &lt;p&gt;&lt;strong&gt;方法一 &#xD;
      &lt;br /&gt;&lt;/strong&gt;&#xD;
&#xD;
    &lt;br /&gt;直接传对象的正确引用而非this指针，或叫对象实传。这是最常见的做法，即在类实例化时用一个变量存储对当前对象的引用，在后面的方法中直接使用此变量代替this的使用。注意：这种方法并没有真正改变this的指向。演示代码如下，注意对比前后两次代码的区别，我也特别高亮显示差异部分代码。 &lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; socket = &#xD;
{ &#xD;
 connect: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(host, port) &#xD;
 { &#xD;
  &lt;span style="color: #0000ff"&gt;alert&lt;/span&gt;('Connecting socket server,host:' + host + ',port:' + port); &#xD;
 } &#xD;
}; &#xD;
&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; classIm() &#xD;
{ &#xD;
  &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; &lt;span style="color: #0000ff"&gt;self&lt;/span&gt; = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;; &#xD;
  &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.host = '192.168.1.28'; &#xD;
  &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.port = '8080'; &#xD;
  &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.connect = &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(data) &#xD;
  { &#xD;
    socket.connect(&lt;span style="color: #0000ff"&gt;self&lt;/span&gt;.host, &lt;span style="color: #0000ff"&gt;self&lt;/span&gt;.port); &#xD;
  }; &#xD;
} &#xD;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; IM = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; classIm(); &#xD;
$.get('CheckWebLogin.aspx', IM.connect); &lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;方法二&lt;/strong&gt;&#xD;
&#xD;
  &lt;br /&gt;使用apply加闭包实现真正改变this的指向。下面方法把函数调用时的this对象存到一个临时变量_method，然后又利用闭包把它传给返回的function对象，在这个返回的function中使用apply把调用时对象的this替换为目标对象thisObj。这种方法是很多JavaScript框架的做法，而且下面这个Function原型方法正是我从prototype框架精简而来。注意我是先给Function原型加了Apply方法，这个Apply不是脚本内置的apply，是我自定义的，如果你喜欢可以定个别的名字。&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&lt;span style="color: #008000"&gt;/** &#xD;
* 改变jQuery AJAX回调函数this指针指向 &#xD;
* @param {Object} thisObj 要替换当前this指针的对象 &#xD;
* @return {Function} function(data){} &#xD;
*/&lt;/span&gt; &#xD;
&lt;span style="color: #0000ff"&gt;Function&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;prototype&lt;/span&gt;.Apply = &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(thisObj) &#xD;
{ &#xD;
    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; _method = &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;; &#xD;
    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(data) &#xD;
    { &#xD;
       &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _method.apply(thisObj,[data]); &#xD;
    }; &#xD;
} &#xD;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; socket = &#xD;
{ &#xD;
  connect: &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(host, port) &#xD;
  { &#xD;
    &lt;span style="color: #0000ff"&gt;alert&lt;/span&gt;('Connecting socket server,host:' + host + ',port:' + port); &#xD;
  } &#xD;
}; &#xD;
&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; classIm() &#xD;
{ &#xD;
    &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.host = '192.168.1.28'; &#xD;
    &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.port = '8080'; &#xD;
    &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.connect = &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(data) &#xD;
    { &#xD;
        socket.connect(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.host, &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.port); &#xD;
    }; &#xD;
} &#xD;
&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; IM = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; classIm(); &#xD;
$.get('CheckWebLogin.aspx', IM.connect.Apply(IM));&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;br /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;方法三 &#xD;
    &lt;br /&gt;&lt;/strong&gt;&#xD;
&#xD;
  &lt;br /&gt;在匿名回调函数中再调用实际的回调处理函数。这种方法虽然可以解决同样的问题的，但是代码有点长和多余，实际开发中是不建议这样做的。这种方法是保证了调用connect方法的对象还是IM对象，从而保证了this指向还是IM对象。代码如下&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;$.get('CheckWebLogin.aspx', &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(data){IM.connect(data)}); &lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;br /&gt;本文转载自网络。作者不详。&#xD;
&#xD;
&lt;img src="http://www.cnblogs.com/phpzxh/aggbug/2024365.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/phpzxh/archive/2011/04/21/2024365.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/phpzxh/archive/2011/04/21/2023431.html</id><title type="text">PHP中soap的使用例子</title><summary type="text">PHP 使用soap有两种方式。 一、用wsdl文件 服务器端。 &amp;lt;?phpclass service{ public function HelloWorld() { return &amp;quot;Hello&amp;quot;; } public function Add($a,$b) { return $a+$b; }}$server=new SoapServer(&amp;#39;soap.wsdl&amp;#39;,array(&amp;#39;soap_versio...</summary><published>2011-04-21T05:04:00Z</published><updated>2011-04-21T05:04:00Z</updated><author><name>phpzxh</name><uri>http://www.cnblogs.com/phpzxh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/phpzxh/archive/2011/04/21/2023431.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/phpzxh/archive/2011/04/21/2023431.html"/><content type="html">&lt;p&gt;PHP 使用soap有两种方式。&lt;/p&gt;  &lt;p&gt;一、用wsdl文件&lt;/p&gt;  &lt;p&gt;服务器端。&lt;/p&gt;  &lt;pre&gt;&amp;lt;?&lt;span style="color: #800000"&gt;php&lt;/span&gt;&#xD;
&lt;span style="color: #800000"&gt;class&lt;/span&gt; &lt;span style="color: #800000"&gt;service&lt;/span&gt;&#xD;
{&#xD;
  &lt;span style="color: #ff0000"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function HelloWorld()&#xD;
   {&#xD;
      return  &amp;quot;Hello&amp;quot;&lt;/span&gt;;&#xD;
   }&#xD;
  &lt;span style="color: #800000"&gt;public&lt;/span&gt;  &lt;span style="color: #800000"&gt;function&lt;/span&gt; &lt;span style="color: #800000"&gt;Add&lt;/span&gt;($&lt;span style="color: #800000"&gt;a&lt;/span&gt;,$&lt;span style="color: #800000"&gt;b&lt;/span&gt;)&#xD;
   {&#xD;
      &lt;span style="color: #ff0000"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;$a+$b&lt;/span&gt;;&#xD;
   }&#xD;
}&#xD;
$&lt;span style="color: #800000"&gt;server&lt;/span&gt;=&lt;span style="color: #800000"&gt;new&lt;/span&gt; &lt;span style="color: #800000"&gt;SoapServer&lt;/span&gt;('&lt;span style="color: #800000"&gt;soap&lt;/span&gt;.&lt;span style="color: #800000"&gt;wsdl&lt;/span&gt;',&lt;span style="color: #800000"&gt;array&lt;/span&gt;('&lt;span style="color: #800000"&gt;soap&lt;/span&gt;_&lt;span style="color: #800000"&gt;version&lt;/span&gt;' =&amp;gt; &lt;span style="color: #800000"&gt;SOAP&lt;/span&gt;_&lt;span style="color: #800000"&gt;1&lt;/span&gt;_&lt;span style="color: #800000"&gt;2&lt;/span&gt;));&#xD;
$&lt;span style="color: #800000"&gt;server-&lt;/span&gt;&amp;gt;&lt;span style="color: #800000"&gt;setClass&lt;/span&gt;(&amp;quot;&lt;span style="color: #800000"&gt;service&lt;/span&gt;&amp;quot;);&#xD;
$&lt;span style="color: #800000"&gt;server-&lt;/span&gt;&amp;gt;&lt;span style="color: #800000"&gt;handle&lt;/span&gt;();&#xD;
?&amp;gt;&lt;br /&gt;资源描述文件，可以用工具(zend studio)生成。其实就是一个xml文件。&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;xml version=&amp;quot;&lt;span style="color: #8b0000"&gt;1.0&lt;/span&gt;&amp;quot; encoding=&amp;quot;&lt;span style="color: #8b0000"&gt;UTF-8&lt;/span&gt;&amp;quot;?&amp;gt;&#xD;
&amp;lt;wsdl:definitions xmlns:soap=&amp;quot;&lt;span style="color: #8b0000"&gt;http://schemas.xmlsoap.org/wsdl/soap/&lt;/span&gt;&amp;quot; xmlns:tns=&amp;quot;&lt;span style="color: #8b0000"&gt;http://localhost/interface/&lt;/span&gt;&amp;quot; xmlns:wsdl=&amp;quot;&lt;span style="color: #8b0000"&gt;http://schemas.xmlsoap.org/wsdl/&lt;/span&gt;&amp;quot; xmlns:xsd=&amp;quot;&lt;span style="color: #8b0000"&gt;http://www.w3.org/2001/XMLSchema&lt;/span&gt;&amp;quot; name=&amp;quot;&lt;span style="color: #8b0000"&gt;soap&lt;/span&gt;&amp;quot; targetNamespace=&amp;quot;&lt;span style="color: #8b0000"&gt;http://localhost/interface/&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
  &amp;lt;wsdl:types&amp;gt;&#xD;
    &amp;lt;xsd:schema targetNamespace=&amp;quot;&lt;span style="color: #8b0000"&gt;http://localhost/interface/&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
      &amp;lt;xsd:element name=&amp;quot;&lt;span style="color: #8b0000"&gt;HelloWorld&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
        &amp;lt;xsd:complexType&amp;gt;&#xD;
          &amp;lt;xsd:sequence&amp;gt;&#xD;
            &amp;lt;xsd:element name=&amp;quot;&lt;span style="color: #8b0000"&gt;in&lt;/span&gt;&amp;quot; type=&amp;quot;&lt;span style="color: #8b0000"&gt;xsd:string&lt;/span&gt;&amp;quot;/&amp;gt;&#xD;
          &amp;lt;/xsd:sequence&amp;gt;&#xD;
        &amp;lt;/xsd:complexType&amp;gt;&#xD;
      &amp;lt;/xsd:element&amp;gt;&#xD;
      &amp;lt;xsd:element name=&amp;quot;&lt;span style="color: #8b0000"&gt;HelloWorldResponse&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
        &amp;lt;xsd:complexType&amp;gt;&#xD;
          &amp;lt;xsd:sequence&amp;gt;&#xD;
            &amp;lt;xsd:element name=&amp;quot;&lt;span style="color: #8b0000"&gt;out&lt;/span&gt;&amp;quot; type=&amp;quot;&lt;span style="color: #8b0000"&gt;xsd:string&lt;/span&gt;&amp;quot;/&amp;gt;&#xD;
          &amp;lt;/xsd:sequence&amp;gt;&#xD;
        &amp;lt;/xsd:complexType&amp;gt;&#xD;
      &amp;lt;/xsd:element&amp;gt;&#xD;
      &amp;lt;xsd:element name=&amp;quot;&lt;span style="color: #8b0000"&gt;Add&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
      	&amp;lt;xsd:complexType&amp;gt;&#xD;
      		&amp;lt;xsd:sequence&amp;gt;&#xD;
      			&amp;lt;xsd:element name=&amp;quot;&lt;span style="color: #8b0000"&gt;in&lt;/span&gt;&amp;quot; type=&amp;quot;&lt;span style="color: #8b0000"&gt;xsd:int&lt;/span&gt;&amp;quot;&amp;gt;&amp;lt;/xsd:element&amp;gt;&#xD;
      		&amp;lt;/xsd:sequence&amp;gt;&#xD;
      	&amp;lt;/xsd:complexType&amp;gt;&#xD;
      &amp;lt;/xsd:element&amp;gt;&#xD;
      &amp;lt;xsd:element name=&amp;quot;&lt;span style="color: #8b0000"&gt;AddResponse&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
      	&amp;lt;xsd:complexType&amp;gt;&#xD;
      		&amp;lt;xsd:sequence&amp;gt;&#xD;
&#xD;
      			&amp;lt;xsd:element name=&amp;quot;&lt;span style="color: #8b0000"&gt;out&lt;/span&gt;&amp;quot; type=&amp;quot;&lt;span style="color: #8b0000"&gt;xsd:int&lt;/span&gt;&amp;quot;&amp;gt;&amp;lt;/xsd:element&amp;gt;&#xD;
      		&amp;lt;/xsd:sequence&amp;gt;&#xD;
      	&amp;lt;/xsd:complexType&amp;gt;&#xD;
      &amp;lt;/xsd:element&amp;gt;&#xD;
    &amp;lt;/xsd:schema&amp;gt;&#xD;
  &amp;lt;/wsdl:types&amp;gt;&#xD;
   &amp;lt;wsdl:message name=&amp;quot;&lt;span style="color: #8b0000"&gt;AddRequest&lt;/span&gt;&amp;quot;&amp;gt;   	&amp;lt;wsdl:part name=&amp;quot;&lt;span style="color: #8b0000"&gt;a&lt;/span&gt;&amp;quot; type=&amp;quot;&lt;span style="color: #8b0000"&gt;xsd:int&lt;/span&gt;&amp;quot;&amp;gt;&amp;lt;/wsdl:part&amp;gt;&#xD;
  	&amp;lt;wsdl:part name=&amp;quot;&lt;span style="color: #8b0000"&gt;b&lt;/span&gt;&amp;quot; type=&amp;quot;&lt;span style="color: #8b0000"&gt;xsd:int&lt;/span&gt;&amp;quot;&amp;gt;&amp;lt;/wsdl:part&amp;gt;&#xD;
  &amp;lt;/wsdl:message&amp;gt;&#xD;
  &amp;lt;wsdl:message name=&amp;quot;&lt;span style="color: #8b0000"&gt;AddResponse&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
  	&amp;lt;wsdl:part name=&amp;quot;&lt;span style="color: #8b0000"&gt;c&lt;/span&gt;&amp;quot; type=&amp;quot;&lt;span style="color: #8b0000"&gt;xsd:int&lt;/span&gt;&amp;quot;&amp;gt;&amp;lt;/wsdl:part&amp;gt;&#xD;
  &amp;lt;/wsdl:message&amp;gt;&#xD;
  &amp;lt;wsdl:portType name=&amp;quot;&lt;span style="color: #8b0000"&gt;TestSoap&lt;/span&gt;&amp;quot;&amp;gt;     &amp;lt;wsdl:operation name=&amp;quot;&lt;span style="color: #8b0000"&gt;Add&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
    	&amp;lt;wsdl:input message=&amp;quot;&lt;span style="color: #8b0000"&gt;tns:AddRequest&lt;/span&gt;&amp;quot;&amp;gt;&amp;lt;/wsdl:input&amp;gt;&#xD;
    	&amp;lt;wsdl:output message=&amp;quot;&lt;span style="color: #8b0000"&gt;tns:AddResponse&lt;/span&gt;&amp;quot;&amp;gt;&amp;lt;/wsdl:output&amp;gt;&#xD;
    &amp;lt;/wsdl:operation&amp;gt;&#xD;
  &amp;lt;/wsdl:portType&amp;gt;&#xD;
  &amp;lt;wsdl:binding name=&amp;quot;&lt;span style="color: #8b0000"&gt;soapSOAP&lt;/span&gt;&amp;quot; type=&amp;quot;&lt;span style="color: #8b0000"&gt;tns:TestSoap&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
  	&amp;lt;soap:binding style=&amp;quot;&lt;span style="color: #8b0000"&gt;document&lt;/span&gt;&amp;quot;&#xD;
  		transport=&amp;quot;&lt;span style="color: #8b0000"&gt;http://schemas.xmlsoap.org/soap/http&lt;/span&gt;&amp;quot; /&amp;gt;&#xD;
  	&amp;lt;wsdl:operation name=&amp;quot;&lt;span style="color: #8b0000"&gt;Add&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
  		&amp;lt;soap:operation soapAction=&amp;quot;&lt;span style="color: #8b0000"&gt;http://localhost/interface/Add&lt;/span&gt;&amp;quot; /&amp;gt;&#xD;
  		&amp;lt;wsdl:input&amp;gt;&#xD;
  			&amp;lt;soap:body use=&amp;quot;&lt;span style="color: #8b0000"&gt;literal&lt;/span&gt;&amp;quot;&#xD;
  				namespace=&amp;quot;&lt;span style="color: #8b0000"&gt;http://localhost/interface/&lt;/span&gt;&amp;quot; /&amp;gt;&#xD;
  		&amp;lt;/wsdl:input&amp;gt;&#xD;
  		&amp;lt;wsdl:output&amp;gt;&#xD;
  			&amp;lt;soap:body use=&amp;quot;&lt;span style="color: #8b0000"&gt;literal&lt;/span&gt;&amp;quot;&#xD;
  				namespace=&amp;quot;&lt;span style="color: #8b0000"&gt;http://localhost/interface/&lt;/span&gt;&amp;quot; /&amp;gt;&#xD;
  		&amp;lt;/wsdl:output&amp;gt;&#xD;
  	&amp;lt;/wsdl:operation&amp;gt;&#xD;
  &amp;lt;/wsdl:binding&amp;gt;&#xD;
  &amp;lt;wsdl:service name=&amp;quot;&lt;span style="color: #8b0000"&gt;TestSoap&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
    &amp;lt;wsdl:port binding=&amp;quot;&lt;span style="color: #8b0000"&gt;tns:soapSOAP&lt;/span&gt;&amp;quot; name=&amp;quot;&lt;span style="color: #8b0000"&gt;soapSOAP&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
      &amp;lt;soap:address location=&amp;quot;&lt;span style="color: #8b0000"&gt;http://localhost/interface/myservice.php&lt;/span&gt;&amp;quot;/&amp;gt;&#xD;
    &amp;lt;/wsdl:port&amp;gt;&#xD;
  &amp;lt;/wsdl:service&amp;gt;&#xD;
&amp;lt;/wsdl:definitions&amp;gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;客户端调用&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;php&#xD;
$soap = new SoapClient('http://localhost/interface/soap.wsdl');&#xD;
echo $soap-&amp;gt;Add(1,2);&#xD;
&lt;span style="color: #0000ff"&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;二、不用wsdl文件&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;服务器端&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;php&#xD;
&lt;a style="color: #0000ff" href="http://www.php.net/class"&gt;class&lt;/a&gt; service&#xD;
{&#xD;
  public &lt;a style="color: #0000ff" href="http://www.php.net/function"&gt;function&lt;/a&gt; HelloWorld()&#xD;
   {&#xD;
      &lt;a style="color: #0000ff" href="http://www.php.net/return"&gt;return&lt;/a&gt;  &amp;quot;&lt;span style="color: #8b0000"&gt;Hello&lt;/span&gt;&amp;quot;;&#xD;
   }&#xD;
  public  &lt;a style="color: #0000ff" href="http://www.php.net/function"&gt;function&lt;/a&gt; Add($a,$b)&#xD;
   {&#xD;
      &lt;a style="color: #0000ff" href="http://www.php.net/return"&gt;return&lt;/a&gt; $a+$b;&#xD;
   }&#xD;
}&#xD;
$server=new SoapServer(null,&lt;a style="color: #ffa500" href="http://www.php.net/array"&gt;array&lt;/a&gt;('&lt;span style="color: #8b0000"&gt;uri&lt;/span&gt;' =&amp;gt; &amp;quot;&lt;span style="color: #8b0000"&gt;abcd&lt;/span&gt;&amp;quot;));&#xD;
$server-&amp;gt;setClass(&amp;quot;&lt;span style="color: #8b0000"&gt;service&lt;/span&gt;&amp;quot;);&#xD;
$server-&amp;gt;handle();&#xD;
&lt;span style="color: #0000ff"&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span style="color: #0000ff"&gt;客户端&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;php&#xD;
try{&#xD;
	$soap = new SoapClient(null,&lt;a style="color: #ffa500" href="http://www.php.net/array"&gt;array&lt;/a&gt;(&#xD;
			&amp;quot;&lt;span style="color: #8b0000"&gt;location&lt;/span&gt;&amp;quot; =&amp;gt; &amp;quot;&lt;span style="color: #8b0000"&gt;http://localhost/interface/soap.php&lt;/span&gt;&amp;quot;,&#xD;
			&amp;quot;&lt;span style="color: #8b0000"&gt;uri&lt;/span&gt;&amp;quot;      =&amp;gt; &amp;quot;&lt;span style="color: #8b0000"&gt;abcd&lt;/span&gt;&amp;quot;,  //资源描述符服务器和客户端必须对应&#xD;
			&amp;quot;&lt;span style="color: #8b0000"&gt;style&lt;/span&gt;&amp;quot;    =&amp;gt; SOAP_RPC,&#xD;
			&amp;quot;&lt;span style="color: #8b0000"&gt;use&lt;/span&gt;&amp;quot;      =&amp;gt; SOAP_ENCODED&#xD;
			   ));&#xD;
&#xD;
	&lt;a style="color: #0000ff" href="http://www.php.net/echo"&gt;echo&lt;/a&gt; $soap-&amp;gt;Add(1,2);&#xD;
}catch(Exction $e){&#xD;
	&lt;a style="color: #0000ff" href="http://www.php.net/echo"&gt;echo&lt;/a&gt; &lt;a style="color: #ffa500" href="http://www.php.net/print_r"&gt;print_r&lt;/a&gt;($e-&amp;gt;getMessage(),&lt;a style="color: #0000ff" href="http://www.php.net/true"&gt;true&lt;/a&gt;);&#xD;
}&#xD;
&lt;span style="color: #0000ff"&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/phpzxh/aggbug/2023431.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/phpzxh/archive/2011/04/21/2023431.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/phpzxh/archive/2011/04/02/2003140.html</id><title type="text">css导致ie崩溃的情况</title><summary type="text">以前没发现css不兼容还会导致ie崩溃，今天在项目中碰到了，百度发现还有这么多情况。 我遇到的是下面中的第8中情况。 严格来说不单是CSS就能令IE浏览器崩溃(crash)，而要配合相应的XHTML架构。到现时为止发现有两种正常写法及一种错误结构分别导致会IE6、IE7崩溃(crash)，至于原因我尝试寻找过答案但至今还没找到…如你有这方面的认识或更详细的资料很希望你能分享！ 1 crash IE...</summary><published>2011-04-02T03:33:00Z</published><updated>2011-04-02T03:33:00Z</updated><author><name>phpzxh</name><uri>http://www.cnblogs.com/phpzxh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/phpzxh/archive/2011/04/02/2003140.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/phpzxh/archive/2011/04/02/2003140.html"/><content type="html">&lt;p align="left"&gt;以前没发现css不兼容还会导致ie崩溃，今天在项目中碰到了，百度发现还有这么多情况。&lt;/p&gt;  &lt;p align="left"&gt;我遇到的是下面中的第8中情况。&lt;/p&gt;  &lt;p align="left"&gt;严格来说不单是CSS就能令IE浏览器崩溃(crash)，而要配合相应的XHTML架构。到现时为止发现有两种正常写法及一种错误结构分别导致会IE6、IE7崩溃(crash)，至于原因我尝试寻找过答案但至今还没找到…如你有这方面的认识或更详细的资料很希望你能分享！&lt;/p&gt;  &lt;p align="left"&gt;1 crash IE6 code&lt;/p&gt;  &lt;p&gt;Demo:&lt;a href="http://blog.gulu77.com/demo/200808/crash_ie6.html"&gt;http://blog.gulu77.com/demo/200808/crash_ie6.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;此BUG只存在IE6中,当伪类为 a:active 时同样会遇到此问题&lt;/p&gt;  &lt;div&gt;   &lt;pre&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;style&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
a{position:relative;}&#xD;
a:hover{float:left;}&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&#xD;
&#xD;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;崩溃IE6 ，crash ie6&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;解决方案：为 &amp;lt;a&amp;gt; 添加 zoom:1; 令其触发haslayout&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&amp;lt;&lt;span style="color: #800000"&gt;style&lt;/span&gt; &lt;span style="color: #800000"&gt;type&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;text&lt;/span&gt;/&lt;span style="color: #800000"&gt;css&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
&lt;span style="color: #800000"&gt;a&lt;/span&gt;{&lt;span style="color: #800000"&gt;position&lt;/span&gt;:&lt;span style="color: #800000"&gt;relative&lt;/span&gt;;&lt;span style="color: #800000"&gt;zoom&lt;/span&gt;:&lt;span style="color: #800000"&gt;1&lt;/span&gt;;}&#xD;
&lt;span style="color: #800000"&gt;a&lt;/span&gt;:&lt;span style="color: #800000"&gt;hover&lt;/span&gt;{&lt;span style="color: #800000"&gt;float&lt;/span&gt;:&lt;span style="color: #800000"&gt;left&lt;/span&gt;;}&#xD;
&amp;lt;/&lt;span style="color: #800000"&gt;style&lt;/span&gt;&amp;gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;2 crash IE6 code&lt;/pre&gt;&#xD;
&#xD;
  &lt;p&gt;这是HTML结构错误而导致IE6的崩溃,在&amp;lt;col width=&amp;quot;100&amp;quot;/&amp;gt;前或后添加任何字符均会导致IE6 Crash&lt;/p&gt;&#xD;
&#xD;
  &lt;p&gt;Demo:&lt;a href="http://blog.gulu77.com/demo/200808/HTML_errors_crash_ie6.html"&gt;http://blog.gulu77.com/demo/200808/HTML_errors_crash_ie6.html&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
  &lt;div&gt;&#xD;
    &lt;pre&gt;&amp;lt;&lt;span style="color: #800000"&gt;table&lt;/span&gt; &lt;span style="color: #800000"&gt;style&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;table-layout&lt;/span&gt;:&lt;span style="color: #800000"&gt;fixed&lt;/span&gt;;&amp;quot;&amp;gt;&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;colgroup&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;col&lt;/span&gt; &lt;span style="color: #800000"&gt;width&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;100&lt;/span&gt;&amp;quot;/&amp;gt;&lt;span style="color: #800000"&gt;Crash&lt;/span&gt; &lt;span style="color: #800000"&gt;IE6&lt;/span&gt;&#xD;
&amp;lt;/&lt;span style="color: #800000"&gt;colgroup&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;/&lt;span style="color: #800000"&gt;table&lt;/span&gt;&amp;gt;&lt;/pre&gt;&#xD;
  &lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;Bug from yoogisa &lt;a href="http://forum.standardmag.org/viewtopic.php?pid=14282#p14282"&gt;http://forum.standardmag.org/viewtopic.php?pid=14282#p14282&lt;/a&gt;&#xD;
&#xD;
  &lt;br /&gt;css 경우는 아닌데 doctype을 선언한 상태에서 문법적 오류가 있는 코드를 넣으면 ie6에서 브라우저가 다운되는 현상을 격기는 했습니다.개발쪽에서 처리하다가 코드가&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;br /&gt;&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;3 crash IE7 code&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Demo:&lt;a href="http://blog.gulu77.com/demo/200808/crash_ie7.html"&gt;http://blog.gulu77.com/demo/200808/crash_ie7.html&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Bug from &lt;a href="http://www.tommyfan.com"&gt;偷米饭&lt;/a&gt;，此bug只存在IE7中据估计是处理省略字的时候导致IE7崩溃.&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&amp;lt;&lt;span style="color: #800000"&gt;style&lt;/span&gt; &lt;span style="color: #800000"&gt;type&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;text&lt;/span&gt;/&lt;span style="color: #800000"&gt;css&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
&lt;span style="color: #800000"&gt;div&lt;/span&gt;{&lt;span style="color: #800000"&gt;float&lt;/span&gt;:&lt;span style="color: #800000"&gt;left&lt;/span&gt;;&lt;span style="color: #800000"&gt;width&lt;/span&gt;:&lt;span style="color: #800000"&gt;175px&lt;/span&gt;;}&#xD;
&lt;span style="color: #800000"&gt;ul&lt;/span&gt;{&lt;span style="color: #800000"&gt;overflow&lt;/span&gt;:&lt;span style="color: #800000"&gt;hidden&lt;/span&gt;;&lt;span style="color: #800000"&gt;white-space&lt;/span&gt;:&lt;span style="color: #800000"&gt;nowrap&lt;/span&gt;;&lt;span style="color: #800000"&gt;text-overflow&lt;/span&gt;:&lt;span style="color: #800000"&gt;ellipsis&lt;/span&gt;;}&#xD;
&lt;span style="color: #800000"&gt;li&lt;/span&gt;{&lt;span style="color: #800000"&gt;position&lt;/span&gt;:&lt;span style="color: #800000"&gt;relative&lt;/span&gt;;}&#xD;
&amp;lt;/&lt;span style="color: #800000"&gt;style&lt;/span&gt;&amp;gt;&#xD;
&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;ul&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&amp;gt;&lt;span style="color: #800000"&gt;崩溃崩溃崩溃崩溃崩溃crash&lt;/span&gt; &lt;span style="color: #800000"&gt;ie7&lt;/span&gt;&amp;lt;/&lt;span style="color: #800000"&gt;li&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&amp;gt;&lt;span style="color: #800000"&gt;崩溃崩溃崩溃崩溃崩溃crash&lt;/span&gt; &lt;span style="color: #800000"&gt;ie7&lt;/span&gt;&amp;lt;/&lt;span style="color: #800000"&gt;li&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;/&lt;span style="color: #800000"&gt;ul&lt;/span&gt;&amp;gt;&#xD;
&amp;lt;/&lt;span style="color: #800000"&gt;div&lt;/span&gt;&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;解决方案：为 &amp;lt;li&amp;gt; 添加 zoom:1; 令其触发haslayout&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&amp;lt;&lt;span style="color: #800000"&gt;style&lt;/span&gt; &lt;span style="color: #800000"&gt;type&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;text&lt;/span&gt;/&lt;span style="color: #800000"&gt;css&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
&lt;span style="color: #800000"&gt;div&lt;/span&gt;{&lt;span style="color: #800000"&gt;float&lt;/span&gt;:&lt;span style="color: #800000"&gt;left&lt;/span&gt;;&lt;span style="color: #800000"&gt;width&lt;/span&gt;:&lt;span style="color: #800000"&gt;175px&lt;/span&gt;;}&#xD;
&lt;span style="color: #800000"&gt;ul&lt;/span&gt;{&lt;span style="color: #800000"&gt;overflow&lt;/span&gt;:&lt;span style="color: #800000"&gt;hidden&lt;/span&gt;;&lt;span style="color: #800000"&gt;white-space&lt;/span&gt;:&lt;span style="color: #800000"&gt;nowrap&lt;/span&gt;;&lt;span style="color: #800000"&gt;text-overflow&lt;/span&gt;:&lt;span style="color: #800000"&gt;ellipsis&lt;/span&gt;;}&#xD;
&lt;span style="color: #800000"&gt;li&lt;/span&gt;{&lt;span style="color: #800000"&gt;position&lt;/span&gt;:&lt;span style="color: #800000"&gt;relative&lt;/span&gt;;&lt;span style="color: #800000"&gt;zoom&lt;/span&gt;:&lt;span style="color: #800000"&gt;1&lt;/span&gt;;}&#xD;
&amp;lt;/&lt;span style="color: #800000"&gt;style&lt;/span&gt;&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;4 crash IE6 code&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Demo:&lt;a href="http://blog.gulu77.com/demo/200808/crash_ie6_test1.html"&gt;http://blog.gulu77.com/demo/200808/crash_ie6_test1.html&lt;/a&gt;&#xD;
&#xD;
  &lt;br /&gt;当再次改变定位时浏览器崩溃，但似乎也需要N个帮凶才会导致崩溃的代码中CSS table的相属性都缺一不可。&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&amp;lt;!&lt;span style="color: #800000"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: #800000"&gt;html&lt;/span&gt; &lt;span style="color: #800000"&gt;PUBLIC&lt;/span&gt; &amp;quot;&lt;span style="color: #800000"&gt;-&lt;/span&gt;//&lt;span style="color: #800000"&gt;W3C&lt;/span&gt;//&lt;span style="color: #800000"&gt;DTD&lt;/span&gt; &lt;span style="color: #800000"&gt;XHTML&lt;/span&gt; &lt;span style="color: #800000"&gt;1&lt;/span&gt;.&lt;span style="color: #800000"&gt;0&lt;/span&gt; &lt;span style="color: #800000"&gt;Transitional&lt;/span&gt;//&lt;span style="color: #800000"&gt;EN&lt;/span&gt;&amp;quot; &amp;quot;&lt;span style="color: #800000"&gt;http&lt;/span&gt;://&lt;span style="color: #800000"&gt;www&lt;/span&gt;.&lt;span style="color: #800000"&gt;w3&lt;/span&gt;.&lt;span style="color: #800000"&gt;org&lt;/span&gt;/&lt;span style="color: #800000"&gt;TR&lt;/span&gt;/&lt;span style="color: #800000"&gt;xhtml1&lt;/span&gt;/&lt;span style="color: #800000"&gt;DTD&lt;/span&gt;/&lt;span style="color: #800000"&gt;xhtml1-transitional&lt;/span&gt;.&lt;span style="color: #800000"&gt;dtd&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
  	&amp;lt;&lt;span style="color: #800000"&gt;html&lt;/span&gt; &lt;span style="color: #800000"&gt;xmlns&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;http&lt;/span&gt;://&lt;span style="color: #800000"&gt;www&lt;/span&gt;.&lt;span style="color: #800000"&gt;w3&lt;/span&gt;.&lt;span style="color: #800000"&gt;org&lt;/span&gt;/&lt;span style="color: #800000"&gt;1999&lt;/span&gt;/&lt;span style="color: #800000"&gt;xhtml&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
  	&amp;lt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&amp;gt;&#xD;
  	&amp;lt;&lt;span style="color: #800000"&gt;meta&lt;/span&gt; &lt;span style="color: #800000"&gt;http-equiv&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;Content-Type&lt;/span&gt;&amp;quot; &lt;span style="color: #800000"&gt;content&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;text&lt;/span&gt;/&lt;span style="color: #800000"&gt;html&lt;/span&gt;; &lt;span style="color: #800000"&gt;charset&lt;/span&gt;=&lt;span style="color: #800000"&gt;utf-8&lt;/span&gt;&amp;quot; /&amp;gt;&#xD;
  	&amp;lt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&amp;gt;&lt;span style="color: #800000"&gt;CRASH-IE&lt;/span&gt;,&lt;span style="color: #800000"&gt;CSS让你的IE浏览器崩溃&lt;/span&gt;&amp;lt;/&lt;span style="color: #800000"&gt;title&lt;/span&gt;&amp;gt;&#xD;
	&amp;lt;&lt;span style="color: #800000"&gt;style&lt;/span&gt; &lt;span style="color: #800000"&gt;type&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;text&lt;/span&gt;/&lt;span style="color: #800000"&gt;css&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
  	&lt;span style="color: #800000"&gt;html&lt;/span&gt;, &lt;span style="color: #800000"&gt;body&lt;/span&gt; {&lt;span style="color: #ff0000"&gt;overflow&lt;/span&gt;: &lt;span style="color: #0000ff"&gt;hidden&lt;/span&gt;;&lt;span style="color: #ff0000"&gt;scrollbar-base-color&lt;/span&gt;: &lt;span style="color: #0000ff"&gt;#330066&lt;/span&gt;;} &#xD;
  	.&lt;span style="color: #800000"&gt;crash&lt;/span&gt; {&lt;span style="color: #ff0000"&gt;position&lt;/span&gt;:&lt;span style="color: #0000ff"&gt;absolute&lt;/span&gt;;&lt;span style="color: #ff0000"&gt;left&lt;/span&gt;:&lt;span style="color: #0000ff"&gt;200px&lt;/span&gt;;&lt;span style="color: #ff0000"&gt;top&lt;/span&gt;:&lt;span style="color: #0000ff"&gt;200px&lt;/span&gt;;&lt;span style="color: #ff0000"&gt;width&lt;/span&gt;:&lt;span style="color: #0000ff"&gt;200px&lt;/span&gt;;}&#xD;
	&amp;lt;/&lt;span style="color: #800000"&gt;style&lt;/span&gt;&amp;gt;&#xD;
	&amp;lt;&lt;span style="color: #800000"&gt;script&lt;/span&gt; &lt;span style="color: #800000"&gt;type&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;text&lt;/span&gt;/&lt;span style="color: #800000"&gt;javascript&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
  	&lt;span style="color: #800000"&gt;function&lt;/span&gt; &lt;span style="color: #800000"&gt;galgenfrist&lt;/span&gt;() {&#xD;
  	&lt;span style="color: #ff0000"&gt;window&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;setTimeout('crashIE()&lt;/span&gt;;',&lt;span style="color: #ff0000"&gt;1000&lt;/span&gt;)&lt;span style="color: #0000ff"&gt;&lt;/span&gt;;&#xD;
  	}&#xD;
&#xD;
 &lt;span style="color: #800000"&gt;function&lt;/span&gt; &lt;span style="color: #800000"&gt;crashIE&lt;/span&gt;() {&#xD;
  	&lt;span style="color: #ff0000"&gt;var&lt;/span&gt; &lt;span style="color: #0000ff"&gt;moveNode = document.getElementById(&amp;quot;move&amp;quot;)&lt;/span&gt;;&#xD;
  	&lt;span style="color: #ff0000"&gt;if&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;moveNode) {&#xD;
  	moveNode.style.top = &amp;quot;100px&amp;quot;&lt;/span&gt;;&#xD;
  	&lt;span style="color: #ff0000"&gt;moveNode&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;style.left = &amp;quot;200px&amp;quot;&lt;/span&gt;;&#xD;
  	}&#xD;
  	}&#xD;
	&amp;lt;/&lt;span style="color: #800000"&gt;script&lt;/span&gt;&amp;gt;&#xD;
	&amp;lt;/&lt;span style="color: #800000"&gt;head&lt;/span&gt;&amp;gt;&#xD;
&#xD;
&amp;lt;&lt;span style="color: #800000"&gt;body&lt;/span&gt; &lt;span style="color: #800000"&gt;onload&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;galgenfrist&lt;/span&gt;();&amp;quot;&amp;gt;&#xD;
	&amp;lt;&lt;span style="color: #800000"&gt;h1&lt;/span&gt;&amp;gt;&lt;span style="color: #800000"&gt;CRASH-IE&lt;/span&gt;&amp;lt;/&lt;span style="color: #800000"&gt;h1&lt;/span&gt;&amp;gt;&#xD;
	&amp;lt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #800000"&gt;id&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;move&lt;/span&gt;&amp;quot; &lt;span style="color: #800000"&gt;class&lt;/span&gt;=&amp;quot;&lt;span style="color: #800000"&gt;crash&lt;/span&gt;&amp;quot;&amp;gt;&#xD;
	&amp;lt;&lt;span style="color: #800000"&gt;table&lt;/span&gt;&amp;gt;&#xD;
	&amp;lt;&lt;span style="color: #800000"&gt;tbody&lt;/span&gt;&amp;gt;&#xD;
	&amp;lt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&amp;gt;&#xD;
	&amp;lt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&amp;gt;&#xD;
	&amp;lt;&lt;span style="color: #800000"&gt;textarea&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style="color: #800000"&gt;textarea&lt;/span&gt;&amp;gt;&#xD;
	&amp;lt;/&lt;span style="color: #800000"&gt;td&lt;/span&gt;&amp;gt;&#xD;
	&amp;lt;/&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&amp;gt;&#xD;
	&amp;lt;/&lt;span style="color: #800000"&gt;tbody&lt;/span&gt;&amp;gt;&#xD;
	&amp;lt;/&lt;span style="color: #800000"&gt;table&lt;/span&gt;&amp;gt;&#xD;
	&amp;lt;/&lt;span style="color: #800000"&gt;div&lt;/span&gt;&amp;gt; &#xD;
	&amp;lt;/&lt;span style="color: #800000"&gt;body&lt;/span&gt;&amp;gt;&#xD;
	&amp;lt;/&lt;span style="color: #800000"&gt;html&lt;/span&gt;&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;5 crash IE6 code&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Demo:&lt;a href="http://blog.gulu77.com/demo/200808/crash_ie6_test2.html"&gt;http://blog.gulu77.com/demo/200808/crash_ie6_test2.html&lt;/a&gt;&#xD;
&#xD;
  &lt;br /&gt;具体引起的原因暂时无法解析，但在兼容性和执行效率来看一般不会采取这样的写法。&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&amp;lt;&lt;span style="color: #800000"&gt;script&lt;/span&gt;&amp;gt;&lt;span style="color: #800000"&gt;for&lt;/span&gt; (&lt;span style="color: #800000"&gt;x&lt;/span&gt; &lt;span style="color: #800000"&gt;in&lt;/span&gt; &lt;span style="color: #800000"&gt;document&lt;/span&gt;.&lt;span style="color: #800000"&gt;write&lt;/span&gt;) { &lt;span style="color: #ff0000"&gt;document&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;write(x)&lt;/span&gt;;}&amp;lt;/&lt;span style="color: #800000"&gt;script&lt;/span&gt;&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;6 crash IE6 code&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Demo:&lt;a href="http://blog.gulu77.com/demo/200808/crash_ie6_test3.html"&gt;http://blog.gulu77.com/demo/200808/crash_ie6_test3.html&lt;/a&gt;&#xD;
&#xD;
  &lt;br /&gt;传说是一名日本人发现的，table中直接放置内容，在IE6会引起Mshtml.all模块损坏而关闭浏览器，非IE6则安全无恙&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&amp;lt;&lt;span style="color: #800000"&gt;style&lt;/span&gt;&amp;gt;*{&lt;span style="color: #ff0000"&gt;position&lt;/span&gt;:relative}&amp;lt;/&lt;span style="color: #800000"&gt;style&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style="color: #800000"&gt;table&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style="color: #800000"&gt;input&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style="color: #800000"&gt;table&lt;/span&gt;&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;7 crash IE6 code&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Demo:&lt;a href="http://blog.gulu77.com/demo/200808/crash_ie6_test4.html"&gt;http://blog.gulu77.com/demo/200808/crash_ie6_test4.html&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&amp;lt;&lt;span style="color: #800000"&gt;body&lt;/span&gt; &lt;span style="color: #800000"&gt;onLoad&lt;/span&gt;=”&lt;span style="color: #800000"&gt;window&lt;/span&gt;()”&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;8 crash IE6 code&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Demo:&lt;a href="http://blog.gulu77.com/demo/200808/crash_ie6_test5.html"&gt;http://blog.gulu77.com/demo/200808/crash_ie6_test5.html&lt;/a&gt;&#xD;
&#xD;
  &lt;br /&gt;CSS中出现@+任意字符+/* 立即崩溃。&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&amp;lt;&lt;span style="color: #800000"&gt;style&lt;/span&gt;&amp;gt;@;&lt;span style="color: #008000"&gt;/*&amp;lt;/style&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;br /&gt;注：转载地址&lt;a href="http://blog.gulu77.com/?p=59"&gt;http://blog.gulu77.com/?p=59&lt;/a&gt;&lt;img src="http://www.cnblogs.com/phpzxh/aggbug/2003140.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/phpzxh/archive/2011/04/02/2003140.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/phpzxh/archive/2011/03/01/1967890.html</id><title type="text">PHP在linux上编译安装手册</title><summary type="text">PHP在linux上编译安装手册一、 准备安装包Apache版本httpd-2.2.17.tar.gzPHP版本 php-5.3.5.tar.gz二、 安装apache先下载apache源代码包tar zvxf httpd-2.2.17.tar.gz cd httpd-2.2.6/./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=all --enable-cgi makemake install三、 安装PHP1、GD库安装安装GD库的时候需先安装zlib-1.2.3.tar.gz libpng-1.</summary><published>2011-03-01T05:14:00Z</published><updated>2011-03-01T05:14:00Z</updated><author><name>phpzxh</name><uri>http://www.cnblogs.com/phpzxh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/phpzxh/archive/2011/03/01/1967890.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/phpzxh/archive/2011/03/01/1967890.html"/><content type="html">&lt;p&gt;&lt;b&gt;PHP&lt;/b&gt;&lt;b&gt;在linux上编译安装手册&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;b&gt;一、 &lt;/b&gt;&lt;b&gt;准备安装包&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Apache版本httpd-2.2.17.tar.gz&lt;/p&gt;&#xD;
&lt;p&gt;PHP版本 php-5.3.5.tar.gz&lt;/p&gt;&#xD;
&lt;p&gt;&lt;b&gt;二、 &lt;/b&gt;&lt;b&gt;安装apache&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;先下载apache源代码包&lt;/p&gt;&#xD;
&lt;p&gt;tar zvxf httpd-2.2.17.tar.gz &lt;/p&gt;&#xD;
&lt;p&gt;cd httpd-2.2.6/&lt;/p&gt;&#xD;
&lt;p&gt;./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=all --enable-cgi &lt;/p&gt;&#xD;
&lt;p&gt;make&lt;/p&gt;&#xD;
&lt;p&gt;make install&lt;/p&gt;&#xD;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;b&gt;三、 &lt;/b&gt;&lt;b&gt;安装PHP&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、GD库安装&lt;/p&gt;&#xD;
&lt;p&gt;安装GD库的时候需先安装zlib-1.2.3.tar.gz libpng-1.2.10.tar.bz2&lt;/p&gt;&#xD;
&lt;p&gt;freetype-2.3.5.tar.gz libtool-2.2.6a.tar.gz jpegsrc.v6b.tar.gz&lt;/p&gt;&#xD;
&lt;p&gt;这些库的支持。&lt;/p&gt;&#xD;
&lt;p&gt;cd ..&lt;/p&gt;&#xD;
&lt;p&gt;tar zvxf zlib-1.2.3.tar.gz &lt;/p&gt;&#xD;
&lt;p&gt;cd zlib-1.2.3/&lt;/p&gt;&#xD;
&lt;p&gt;CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/zlib&lt;/p&gt;&#xD;
&lt;p&gt;make&lt;/p&gt;&#xD;
&lt;p&gt;make install&lt;/p&gt;&#xD;
&lt;p&gt;cd ..&lt;/p&gt;&#xD;
&lt;p&gt;tar zvxf libpng-1.2.10.tar.bz2 &lt;/p&gt;&#xD;
&lt;p&gt;cd libpng-1.2.10&lt;/p&gt;&#xD;
&lt;p&gt;./configure --prefix=/usr/local/libpng&lt;/p&gt;&#xD;
&lt;p&gt;make&lt;/p&gt;&#xD;
&lt;p&gt;make install&lt;/p&gt;&#xD;
&lt;p&gt;cd ..&lt;/p&gt;&#xD;
&lt;p&gt;tar zvxf freetype-2.3.5.tar.gz &lt;/p&gt;&#xD;
&lt;p&gt;cd freetype-2.3.5&lt;/p&gt;&#xD;
&lt;p&gt;./configure --prefix=/usr/local/freetype&lt;/p&gt;&#xD;
&lt;p&gt;make&lt;/p&gt;&#xD;
&lt;p&gt;make install&lt;/p&gt;&#xD;
&lt;p&gt;cd ..&lt;/p&gt;&#xD;
&lt;p&gt;tar zvxf libtool-2.2.6a.tar.gz &lt;/p&gt;&#xD;
&lt;p&gt;cd libtool-2.2.6&lt;/p&gt;&#xD;
&lt;p&gt;./configure --prefix=/usr/local/libtool&lt;/p&gt;&#xD;
&lt;p&gt;make&lt;/p&gt;&#xD;
&lt;p&gt;make install&lt;/p&gt;&#xD;
&lt;p&gt;mkdir /usr/local/libjpeg&lt;/p&gt;&#xD;
&lt;p&gt;mkdir /usr/local/libjpeg/include&lt;/p&gt;&#xD;
&lt;p&gt;mkdir /usr/local/libjpeg/bin&lt;/p&gt;&#xD;
&lt;p&gt;mkdir /usr/local/libjpeg/lib&lt;/p&gt;&#xD;
&lt;p&gt;mkdir /usr/local/libjpeg/man&lt;/p&gt;&#xD;
&lt;p&gt;mkdir /usr/local/libjpeg/man/man1&lt;/p&gt;&#xD;
&lt;p&gt;cd ..&lt;/p&gt;&#xD;
&lt;p&gt;tar zvxf jpegsrc.v6b.tar.gz &lt;/p&gt;&#xD;
&lt;p&gt;cd jpeg-6b/&lt;/p&gt;&#xD;
&lt;p&gt;\cp -rf /usr/local/libtool/share/libtool/config/config.* ./&lt;/p&gt;&#xD;
&lt;p&gt;./configure --prefix=/usr/local/libjpeg --enable-shared --enable-static&lt;/p&gt;&#xD;
&lt;p&gt;make&lt;/p&gt;&#xD;
&lt;p&gt;make install&lt;/p&gt;&#xD;
&lt;p&gt;cd ..&lt;/p&gt;&#xD;
&lt;p&gt;tar zvxf gd-2.0.35.tar.gz &lt;/p&gt;&#xD;
&lt;p&gt;cd gd-2.0.35&lt;/p&gt;&#xD;
&lt;p&gt;./configure --prefix=/usr/local/libgd --with-png=/usr/local/libpng/ --with-freetype=/usr/local/freetype --with-jpeg=/usr/local/libjpeg &lt;/p&gt;&#xD;
&lt;p&gt;make&lt;/p&gt;&#xD;
&lt;p&gt;make install&lt;/p&gt;&#xD;
&lt;p&gt;2、安装oracle客户端&lt;/p&gt;&#xD;
&lt;p&gt;下载oracle客户端&lt;a href="http://www.oracle.com/technetwork/topics/linuxsoft-082809.html"&gt;http://www.oracle.com/technetwork/topics/linuxsoft-082809.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下载的客户端版本要和系统对应&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a name="OLE_LINK2"&gt;sdk-&lt;/a&gt;10.2.0.4.0-linux-x86_64.zip&lt;/p&gt;&#xD;
&lt;p&gt;basic-10.2.0.4.0-linux-x86_64.zip&lt;/p&gt;&#xD;
&lt;p&gt;unzip sdk-10.2.0.4.0-linux-x86_64.zip&lt;/p&gt;&#xD;
&lt;p&gt;unzip basic-10.2.0.4.0-linux-x86_64.zip&lt;/p&gt;&#xD;
&lt;p&gt;mv instantclient_10_2 $HOME(这个是环境变量默认在/root,不存在可以设置);&lt;/p&gt;&#xD;
&lt;p&gt;cd /$HOME/instantclient_10_2/&lt;/p&gt;&#xD;
&lt;p&gt;ln -s /$HOME/instantclient_10_2/libclntsh.so.10.1 libclntsh.so(建立软连接)&lt;/p&gt;&#xD;
&lt;p&gt;如果不建立软连接会在./configure的时候会报下面的错误。&lt;/p&gt;&#xD;
&lt;p&gt;I'm too dumb to figure out where the libraries are in your Instant Client install&lt;/p&gt;&#xD;
&lt;p&gt;如果是rpm包的安装方式可以不用建立软链接&lt;/p&gt;&#xD;
&lt;p&gt;Vi /etc/profile&lt;/p&gt;&#xD;
&lt;p&gt;export ORACLE_HOME=/root/instantclient_10_2&lt;/p&gt;&#xD;
&lt;p&gt;3、PHP的安装&lt;/p&gt;&#xD;
&lt;p&gt;'./configure' '--prefix=/usr/local/php' '--with-apxs2=/usr/local/apache/bin/apxs' '--with-config-file-path=/usr/local/php' '--with-gd=/usr/local/libgd' '--enable-gd-native-ttf' '--with-freetype-dir=/usr/local/freetype' '--with-jpeg-dir=/usr/local/libjpeg' '--with-png-dir=/usr/local/libpng/' '--with-zlib-dir=/usr/local/zlib' '--enable-xml' '--enable-mbstring' '--enable-sockets' '--enable-soap' '--with-pdo-oci=instantclient,/root/instantclient_10_2,10.2' '--with-oci8=instantclient,/root/instantclient_10_2' '--with-pdo-mysql=/usr/' '--with-mysql=/usr/'&lt;/p&gt;&#xD;
&lt;p&gt;make &lt;/p&gt;&#xD;
&lt;p&gt;make install&lt;/p&gt;&#xD;
&lt;p&gt;拷贝php配置文件&lt;/p&gt;&#xD;
&lt;p&gt;Php5.2 &lt;/p&gt;&#xD;
&lt;p&gt;cp php.ini-dist /usr/local/lib/php.ini&lt;/p&gt;&#xD;
&lt;p&gt;php5.3&lt;/p&gt;&#xD;
&lt;p&gt;cp php.ini-production /usr/local/php/php.ini&lt;/p&gt;&#xD;
&lt;p&gt;4、apache配置文件的修改&lt;/p&gt;&#xD;
&lt;p&gt;vi /usr/local/apache/conf/httpd.conf&lt;/p&gt;&#xD;
&lt;p&gt;由于我们在 编译PHP时已经静态支持PHP5模块，因此无须加&lt;/p&gt;&#xD;
&lt;p&gt;LoadModule php5_module lib/apache/libphp5.so&lt;/p&gt;&#xD;
&lt;p&gt;再加入一行让apache正确处理apache文件&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a name="OLE_LINK1"&gt;AddType application/x-httpd-php .php&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;再找到&amp;nbsp; DirectoryIndex关键字：添加 index.php&lt;/p&gt;&#xD;
&lt;p&gt;开启.httaccess功能&lt;/p&gt;&#xD;
&lt;p&gt;AllowOverride All&lt;/p&gt;&#xD;
&lt;p&gt;5、 查看是否安装成功&lt;/p&gt;&#xD;
&lt;p&gt;在web目录下建立文件phpinfo.php 输入代码&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;?php&lt;/p&gt;&#xD;
&lt;p&gt;phpinfo();&lt;/p&gt;&#xD;
&lt;p&gt;?&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;访问&lt;a href="http://192.168.0.252/phpinfo.php"&gt;http://192.168.0.252/phpinfo.php&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;碰到的问题&lt;/p&gt;&#xD;
&lt;p&gt;1、 在已经安装的版本上添加mcrypt模块&lt;/p&gt;&#xD;
&lt;p&gt;这个加密模块要先安装libmcrypt-2.5.8.tar.gz 和 mhash-0.9.9.9.tar.gz（先安装前面的在安装这个）这两个扩展。 &lt;/p&gt;&#xD;
&lt;p&gt;cd php.5.**./ext/mcrypt /usr/local/php/bin/phpize &lt;/p&gt;&#xD;
&lt;p&gt;./configure --with-php-config=/usr/local/php/bin/php-config --with-mcrypt=/usr/local/ &lt;/p&gt;&#xD;
&lt;p&gt;make makeinstall &lt;/p&gt;&#xD;
&lt;p&gt;2、 在安装好PHP5.3的时候&lt;/p&gt;&#xD;
&lt;p&gt;Warning: date_default_timezone_get(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for '8.0/no DST' instead in D:\Apache2.2\htdocs\upload\install\includes\lib_installer.php on line 223 5.2&lt;/p&gt;&#xD;
&lt;p&gt;都不会不知道是不是5.3的都用设置默认时区。&lt;/p&gt;&#xD;
&lt;p&gt;在php.ini中修改 date.timezone =Asia/Shanghai&lt;/p&gt;&#xD;
&lt;p&gt;3、链接oracle一定要安装客户端&lt;/p&gt;&#xD;
&lt;p&gt;安装客户端要注意版本版本。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="http://bbs.phpchina.com/thread-209587-1-1.html" href="http://bbs.phpchina.com/thread-209587-1-1.html"&gt;http://bbs.phpchina.com/thread-209587-1-1.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这里有一本oracle链接PHP的，很全面的书&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a target="_blank" href="http://files.cnblogs.com/phpzxh/php_oracle.rar"&gt;http://files.cnblogs.com/phpzxh/php_oracle.rar&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/phpzxh/aggbug/1967890.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/phpzxh/archive/2011/03/01/1967890.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/phpzxh/archive/2011/01/25/1944410.html</id><title type="text">yii framework学习笔记</title><summary type="text">一、验证和授权  1、基本验证授权方式  在控制器重重写filters方法，这个filter指定的是过滤器，可以是当前控制的方法，必须是以filter开头。  我们来看看通过yii 中示例中博客的例子。  accessControl其实是CController下的方法，  通过上面我们知道他调用的其实是CAccessControlFilter过滤器。查看手册，accessRules规则的全部说明是...</summary><published>2011-01-25T03:25:00Z</published><updated>2011-01-25T03:25:00Z</updated><author><name>phpzxh</name><uri>http://www.cnblogs.com/phpzxh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/phpzxh/archive/2011/01/25/1944410.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/phpzxh/archive/2011/01/25/1944410.html"/><content type="html">&lt;p&gt;一、验证和授权&lt;/p&gt;  &lt;p&gt;1、基本验证授权方式&lt;/p&gt;  &lt;p&gt;在控制器重重写filters方法，这个filter指定的是过滤器，可以是当前控制的方法，必须是以filter开头。&lt;/p&gt;  &lt;p&gt;我们来看看通过yii 中示例中博客的例子。&lt;/p&gt;  &lt;div&gt;   &lt;pre&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;php&#xD;
&lt;a style="color: #0000ff" href="http://www.php.net/class"&gt;class&lt;/a&gt; TblPostController &lt;a style="color: #0000ff" href="http://www.php.net/extends"&gt;extends&lt;/a&gt; Controller&#xD;
{&#xD;
	&#xD;
	&lt;span style="color: #008000"&gt;/**&#xD;
	 * @return array 过滤器列表，会顺序执行&#xD;
	 */&lt;/span&gt;&#xD;
	public &lt;a style="color: #0000ff" href="http://www.php.net/function"&gt;function&lt;/a&gt; filters()&#xD;
	{&#xD;
		&lt;a style="color: #0000ff" href="http://www.php.net/return"&gt;return&lt;/a&gt; &lt;a style="color: #ffa500" href="http://www.php.net/array"&gt;array&lt;/a&gt;(&#xD;
			'&lt;span style="color: #8b0000"&gt;accessControl&lt;/span&gt;', &lt;span style="color: #008000"&gt;// perform access control for CRUD operations&lt;/span&gt;&#xD;
		);&#xD;
	}&#xD;
&#xD;
	&lt;span style="color: #008000"&gt;/**&#xD;
	 * Specifies the access control rules.&#xD;
	 * This method is used by the 'accessControl' filter.&#xD;
	 * @return array access control rules&#xD;
	 */&lt;/span&gt;&#xD;
	public &lt;a style="color: #0000ff" href="http://www.php.net/function"&gt;function&lt;/a&gt; accessRules()&#xD;
	{&#xD;
		&lt;a style="color: #0000ff" href="http://www.php.net/return"&gt;return&lt;/a&gt; &lt;a style="color: #ffa500" href="http://www.php.net/array"&gt;array&lt;/a&gt;(&#xD;
			&lt;a style="color: #ffa500" href="http://www.php.net/array"&gt;array&lt;/a&gt;('&lt;span style="color: #8b0000"&gt;allow&lt;/span&gt;',  &lt;span style="color: #008000"&gt;// ?代表来宾用户&lt;/span&gt;&#xD;
				'&lt;span style="color: #8b0000"&gt;actions&lt;/span&gt;'=&amp;gt;&lt;a style="color: #ffa500" href="http://www.php.net/array"&gt;array&lt;/a&gt;('&lt;span style="color: #8b0000"&gt;index&lt;/span&gt;','&lt;span style="color: #8b0000"&gt;view&lt;/span&gt;'),&#xD;
				'&lt;span style="color: #8b0000"&gt;users&lt;/span&gt;'=&amp;gt;&lt;a style="color: #ffa500" href="http://www.php.net/array"&gt;array&lt;/a&gt;('&lt;span style="color: #8b0000"&gt;*&lt;/span&gt;'),&#xD;
			),&#xD;
			&lt;a style="color: #ffa500" href="http://www.php.net/array"&gt;array&lt;/a&gt;('&lt;span style="color: #8b0000"&gt;allow&lt;/span&gt;', &lt;span style="color: #008000"&gt;// @代表有角色的&lt;/span&gt;&#xD;
				'&lt;span style="color: #8b0000"&gt;actions&lt;/span&gt;'=&amp;gt;&lt;a style="color: #ffa500" href="http://www.php.net/array"&gt;array&lt;/a&gt;('&lt;span style="color: #8b0000"&gt;create&lt;/span&gt;','&lt;span style="color: #8b0000"&gt;update&lt;/span&gt;'),&#xD;
				'&lt;span style="color: #8b0000"&gt;users&lt;/span&gt;'=&amp;gt;&lt;a style="color: #ffa500" href="http://www.php.net/array"&gt;array&lt;/a&gt;('&lt;span style="color: #8b0000"&gt;@&lt;/span&gt;'),&#xD;
			),&#xD;
			&lt;a style="color: #ffa500" href="http://www.php.net/array"&gt;array&lt;/a&gt;('&lt;span style="color: #8b0000"&gt;allow&lt;/span&gt;', &lt;span style="color: #008000"&gt;// allow admin user to perform 'admin' and 'delete' actions&lt;/span&gt;&#xD;
				'&lt;span style="color: #8b0000"&gt;actions&lt;/span&gt;'=&amp;gt;&lt;a style="color: #ffa500" href="http://www.php.net/array"&gt;array&lt;/a&gt;('&lt;span style="color: #8b0000"&gt;admin&lt;/span&gt;','&lt;span style="color: #8b0000"&gt;delete&lt;/span&gt;'),&#xD;
				'&lt;span style="color: #8b0000"&gt;users&lt;/span&gt;'=&amp;gt;&lt;a style="color: #ffa500" href="http://www.php.net/array"&gt;array&lt;/a&gt;('&lt;span style="color: #8b0000"&gt;admin&lt;/span&gt;'),&#xD;
			),&#xD;
			&lt;a style="color: #ffa500" href="http://www.php.net/array"&gt;array&lt;/a&gt;('&lt;span style="color: #8b0000"&gt;deny&lt;/span&gt;',  &lt;span style="color: #008000"&gt;// *代表所有的用户&lt;/span&gt;&#xD;
				'&lt;span style="color: #8b0000"&gt;users&lt;/span&gt;'=&amp;gt;&lt;a style="color: #ffa500" href="http://www.php.net/array"&gt;array&lt;/a&gt;('&lt;span style="color: #8b0000"&gt;*&lt;/span&gt;'),&#xD;
			),&#xD;
		);&#xD;
	}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;accessControl其实是CController下的方法，&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;php&#xD;
   &lt;span style="color: #008000"&gt;/**&#xD;
	 * The filter method for 'accessControl' filter.&#xD;
	 * This filter is a wrapper of {@link CAccessControlFilter}.&#xD;
	 * To use this filter, you must override {@link accessRules} method.&#xD;
	 * @param CFilterChain the filter chain that the filter is on.&#xD;
	 */&lt;/span&gt;&#xD;
	public &lt;a style="color: #0000ff" href="http://www.php.net/function"&gt;function&lt;/a&gt; filterAccessControl($filterChain)&#xD;
	{&#xD;
		$filter=new CAccessControlFilter;&#xD;
		$filter-&amp;gt;setRules($this-&amp;gt;accessRules());&#xD;
		$filter-&amp;gt;filter($filterChain);&#xD;
	}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;通过上面我们知道他调用的其实是CAccessControlFilter过滤器。查看手册，accessRules规则的全部说明是。&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;array(&#xD;
  'allow',  // or 'deny' &#xD;
  //设置哪个动作匹配此规则&#xD;
  'actions'=&amp;gt;array('edit', 'delete'),&#xD;
  // 设置匹配的控制权&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;// This option is available since version 1.0.3.&#xD;
  'controllers'=&amp;gt;array('post', 'admin/user'),&#xD;
  // 设置哪个用户匹配此规则&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;// Use * to represent all users, ? guest users, and @ authenticated users&#xD;
  'users'=&amp;gt;array('thomas', 'kevin'),&#xD;
  // 设定哪个角色匹配此规则.&#xD;
  'roles'=&amp;gt;array('admin', 'editor'),&#xD;
  // 指定哪个IP地址匹配这个规则&#xD;
   'ips'=&amp;gt;array('127.0.0.1'),&#xD;
  // 指定那种请求方式匹配规则&#xD;
  'verbs'=&amp;gt;array('GET', 'POST'),&#xD;
  //  设定一个PHP表达式。它的值用来表明这条规则是否适用。在表达式，你可以使用一个叫$user的变量，它代表的是Yii::app()-&amp;gt;user。这个选项是在1.0.3版本里引入的。&#xD;
  'expression'=&amp;gt;'!$user-&amp;gt;isGuest &amp;amp;&amp;amp; $user-&amp;gt;level==2',&#xD;
)&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;br /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2、RBAC验证授权方式&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1)在配置文件main.php中配置&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;'&lt;span style="color: #800000"&gt;authManager&lt;/span&gt;' =&amp;gt; &lt;span style="color: #800000"&gt;array&lt;/span&gt;(&#xD;
	   '&lt;span style="color: #800000"&gt;class&lt;/span&gt;' =&amp;gt; '&lt;span style="color: #800000"&gt;CDbAuthManager&lt;/span&gt;',&#xD;
	   '&lt;span style="color: #800000"&gt;defaultRoles&lt;/span&gt;'=&amp;gt;&lt;span style="color: #800000"&gt;array&lt;/span&gt;('&lt;span style="color: #800000"&gt;guest&lt;/span&gt;'),//&lt;span style="color: #800000"&gt;默认角色&lt;/span&gt; &#xD;
            '&lt;span style="color: #800000"&gt;itemTable&lt;/span&gt;' =&amp;gt; '&lt;span style="color: #800000"&gt;authitem&lt;/span&gt;',//&lt;span style="color: #800000"&gt;认证项表名称&lt;/span&gt; &#xD;
            '&lt;span style="color: #800000"&gt;itemChildTable&lt;/span&gt;' =&amp;gt; '&lt;span style="color: #800000"&gt;authitemchild&lt;/span&gt;',//&lt;span style="color: #800000"&gt;认证项父子关系&lt;/span&gt; &#xD;
            '&lt;span style="color: #800000"&gt;assignmentTable&lt;/span&gt;' =&amp;gt; '&lt;span style="color: #800000"&gt;authassignment&lt;/span&gt;',//&lt;span style="color: #800000"&gt;认证项赋权关系&lt;/span&gt; &#xD;
	   '&lt;span style="color: #800000"&gt;connectionID&lt;/span&gt;'=&amp;gt;'&lt;span style="color: #800000"&gt;db&lt;/span&gt;'&#xD;
),&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;'&lt;span style="color: #800000"&gt;authitem&lt;/span&gt;'这个三个表是yii默认的&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;2)在创建角色&lt;br /&gt; $auth = Yii::app()-&amp;gt;authManager;&#xD;
        //创建动作&#xD;
        $auth-&amp;gt;createOperation('index','日志列表');&#xD;
        $auth-&amp;gt;createOperation('view','查看日志');&#xD;
        $auth-&amp;gt;createOperation('create','添加日志');&#xD;
        $auth-&amp;gt;createOperation('update','更新日志');&#xD;
        $auth-&amp;gt;createOperation('delete','添加列表');&#xD;
       //创建角色&#xD;
        $role = $auth-&amp;gt;createRole('admin');&#xD;
        $role-&amp;gt;addChild('index');&#xD;
        $role-&amp;gt;addChild('view');&#xD;
        $role-&amp;gt;addChild('create');&#xD;
        $role-&amp;gt;addChild('update');&#xD;
        $role-&amp;gt;addChild('delete');&#xD;
        //角色id=1的用户赋于admin角色&#xD;
        $auth-&amp;gt;assign('admin',1);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;在表中会创建对应的记录，这里我们为id为1的用户赋于了admin的角色。 &#xD;
  &lt;br /&gt;3）验证用户是否有权限访问&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;if (!Yii::app()-&amp;gt;user-&amp;gt;checkAccess($access) || Yii::app()-&amp;gt;user-&amp;gt;isGuest){&#xD;
          $this-&amp;gt;onUnauthorizedAccess();&#xD;
  } else {&#xD;
          return true;&#xD;
  }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;我们通过定义一个BaseController 这个类继承CController重写事件beforeAction来实现验证，如果要验证的控制器都继承该类。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;br /&gt;使用srbac插件实现。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;二、css和js文件的管理&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1、资源发布的方式&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1）&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;php&#xD;
 $&lt;a style="color: #ffa500" href="http://www.php.net/file"&gt;file&lt;/a&gt; = &lt;a style="color: #ffa500" href="http://www.php.net/dirname"&gt;dirname&lt;/a&gt;(__FILE__).DIRECTORY_SEPARATOR.'&lt;span style="color: #8b0000"&gt;user.css&lt;/span&gt;';&#xD;
 $this-&amp;gt;skin = yii::app()-&amp;gt;getAssetManager()-&amp;gt;publish($&lt;a style="color: #ffa500" href="http://www.php.net/file"&gt;file&lt;/a&gt;);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;发布一个资源，其实就是通过目录，在assert目录下生产一个唯一的文件名像\assets\d39ec355， &#xD;
  &lt;br /&gt;文件或者目录会被拷贝过去，如果是文件，通过判断文件的最后修改时间来拷贝，如果文件修改了，会重新发布。如果文件是目录，该目录下的所有文件会被拷贝到assert下面，文件修改不回被重新复制过去。如果目录下有文件删除才重新发布。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2）在应用的的视图中添加该链接。&lt;/p&gt;&#xD;
&#xD;
&lt;div&gt;&#xD;
  &lt;pre&gt;yii::app()-&amp;gt;clientScript-&amp;gt;registerCssFile($this-&amp;gt;skin);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;会在head中添加&lt;/p&gt;&#xD;
&#xD;
&lt;pre&gt;&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;&lt;a href="view-source:http://localhost/blog/assets/d39ec355/user.css"&gt;/blog/assets/d39ec355/user.css&lt;/a&gt;&amp;quot; /&amp;gt;&#xD;
&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;2、使用固定的目录&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://www.yiiframework.com/forum/index.php?/topic/10479-asset-%e8%b5%84%e6%ba%90%e7%9a%84%e7%ae%a1%e7%90%86%ef%bc%8c%e8%ae%a9%e5%88%9d%e5%ad%a6%e8%80%85%e7%b3%8a%e6%b6%82%e4%ba%86/page__p__51604__hl__a+et+#entry51604"&gt;薛强的回复&lt;/a&gt;&lt;a title="http://www.yiiframework.com/forum/index.php?/topic/10479-asset-%e8%b5%84%e6%ba%90%e7%9a%84%e7%ae%a1%e7%90%86%ef%bc%8c%e8%ae%a9%e5%88%9d%e5%ad%a6%e8%80%85%e7%b3%8a%e6%b6%82%e4%ba%86/page__p__51604__hl__a+et+#entry51604" href="http://www.yiiframework.com/forum/index.php?/topic/10479-asset-%e8%b5%84%e6%ba%90%e7%9a%84%e7%ae%a1%e7%90%86%ef%bc%8c%e8%ae%a9%e5%88%9d%e5%ad%a6%e8%80%85%e7%b3%8a%e6%b6%82%e4%ba%86/page__p__51604__hl__a+et+#entry51604"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/phpzxh/aggbug/1944410.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/phpzxh/archive/2011/01/25/1944410.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
