<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feedsky.blogbus.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><link atom:type="text/html">http://bbayou.blogbus.com/</link><fs:self_link href="http://feeds.feedsky.com/blogbus.com/bbayou_blogbus_com" type="application/rss+xml"></fs:self_link><lastBuildDate>Fri, 20 Nov 2009 08:35:37 GMT</lastBuildDate><title>我们的生活比蜜甜</title><description>PHP+Python+Apache+Nginx+Mysql</description><atom:link href="http://feedsky.blogbus.com/bbayou_blogbus_com" type="application/rss+xml" rel="self"></atom:link><generator xmlns="http://www.w3.org/2005/Atom" uri="http://www.blogbus.com/">博客大巴</generator><id xmlns="http://www.w3.org/2005/Atom">http://bbayou.blogbus.com/atom.xml</id><link xmlns="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://bbayou.blogbus.com/atom.xml"></link><pubDate>Fri, 20 Nov 2009 08:35:37 GMT</pubDate><image><title>我们的生活比蜜甜</title><url>http://public.blogbus.com/profile/0/2/3/1612320/avatar_1612320_96.jpg</url><link>http://bbayou.blogbus.com/</link></image><item><title>php引用符号(&amp;amp;)的作用</title><link atom:type="text/html">http://bbayou.blogbus.com/logs/51814479.html</link><author xmlns="http://www.w3.org/2005/Atom"><name>bbayou</name></author><id xmlns="http://www.w3.org/2005/Atom">http://bbayou.blogbus.com/logs/51814479.html</id><description>&lt;p&gt;php的引用（就是在&lt;span class=&quot;t_tag&quot; onclick=&quot;tagshow(event)&quot;&gt;变量&lt;/span&gt;或者&lt;span class=&quot;t_tag&quot; onclick=&quot;tagshow(event)&quot;&gt;函数&lt;/span&gt;、对象等前面加上&amp;amp;符号）&lt;br /&gt;
&lt;br /&gt;
在&lt;span class=&quot;t_tag&quot; onclick=&quot;tagshow(event)&quot;&gt;PHP&lt;/span&gt; 中引用的意思是：不同的名字访问同一个变量内容.&lt;br /&gt;
与Ｃ语言中的指针是有差别的．Ｃ语言中的指针里面存储的是变量的内容在内存中存放的地址&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;变量的引用&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
PHP 的引用允许你用两个变量来指向同一个内容&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?&lt;br /&gt;
$a=&quot;ABC&quot;;&lt;br /&gt;
$b =&amp;amp;$a;&lt;br /&gt;
echo $a;//这里&lt;span class=&quot;t_tag&quot; onclick=&quot;tagshow(event)&quot;&gt;输出&lt;/span&gt;:ABC&lt;br /&gt;
echo $b;//这里输出:ABC&lt;br /&gt;
$b=&quot;EFG&quot;;&lt;br /&gt;
echo $a;//这里$a的值变为EFG 所以输出EFG&lt;br /&gt;
echo $b;//这里输出EFG&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;函数的传址调用&lt;/strong&gt;&lt;br /&gt;
传址调用我就不多说了 下面直接给出&lt;span class=&quot;t_tag&quot; onclick=&quot;tagshow(event)&quot;&gt;代码&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
function test(&amp;amp;$a)&lt;br /&gt;
{&lt;br /&gt;
$a=$a+100;&lt;br /&gt;
}&lt;br /&gt;
$b=1;&lt;br /&gt;
echo $b;//输出１&lt;br /&gt;
test($b);&amp;nbsp;&amp;nbsp;//这里$b传递给函数的其实是$b的变量内容所处的内存地址，通过在函数里改变$a的值　就可以改变$b的值了&lt;br /&gt;
echo &quot;&amp;lt;br&amp;gt;&quot;;&lt;br /&gt;
echo $b;//输出101&lt;br /&gt;
&lt;br /&gt;
要注意的是，在这里test(１);的话就会出错，原因自己去想&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;函数的引用返回&lt;/strong&gt;&lt;br /&gt;
先看代码&lt;br /&gt;
&lt;br /&gt;
function &amp;amp;test()&lt;br /&gt;
{&lt;br /&gt;
static $b=0;//申明一个静态变量&lt;br /&gt;
$b=$b+1;&lt;br /&gt;
echo $b;&lt;br /&gt;
return $b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$a=test();//这条&lt;span class=&quot;t_tag&quot; onclick=&quot;tagshow(event)&quot;&gt;语句&lt;/span&gt;会输出　$b的值　为１&lt;br /&gt;
$a=5;&lt;br /&gt;
$a=test();//这条语句会输出　$b的值　为2&lt;br /&gt;
&lt;br /&gt;
$a=&amp;amp;test();//这条语句会输出　$b的值　为3&lt;br /&gt;
$a=5;&lt;br /&gt;
$a=test();//这条语句会输出　$b的值　为6&lt;br /&gt;
&lt;br /&gt;
下面解释下：　&lt;br /&gt;
通过这种方式$a=test();得到的其实不是函数的引用返回，这跟普通的函数调用没有区别　至于原因：　这是ＰＨＰ的规定&lt;br /&gt;
ＰＨＰ规定通过$a=&amp;amp;test(); 方式得到的才是函数的引用返回&lt;br /&gt;
至于什么是引用返回呢（ＰＨＰ手册上说：引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。) 这句狗屁话　害我半天没看懂&lt;br /&gt;
&lt;br /&gt;
用上面的例子来解释就是&lt;br /&gt;
$a=test()方式调用函数，只是将函数的值赋给$a而已，　而$a做任何改变　都不会影响到函数中的$b&lt;br /&gt;
而通过$a=&amp;amp;test()方式调用函数呢, 他的作用是　将return $b中的　$b变量的内存地址与$a变量的内存地址　指向了同一个地方&lt;br /&gt;
即产生了相当于这样的效果($a=&amp;amp;b;) 所以改变$a的值　也同时改变了$b的值　所以在执行了&lt;br /&gt;
$a=&amp;amp;test();&lt;br /&gt;
$a=5;&lt;br /&gt;
以后，$b的值变为了5&lt;br /&gt;
&lt;br /&gt;
这里是为了让大家理解函数的引用返回才使用静态变量的，其实函数的引用返回多用在对象中&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;对象的引用&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?&lt;br /&gt;
class a{&lt;br /&gt;
 var $abc=&quot;ABC&quot;;&lt;br /&gt;
 }&lt;br /&gt;
$b=new a;&lt;br /&gt;
$c=$b;&lt;br /&gt;
echo $b-&amp;gt;abc;//这里输出ABC&lt;br /&gt;
echo $c-&amp;gt;abc;//这里输出ABC&lt;br /&gt;
$b-&amp;gt;abc=&quot;DEF&quot;;&lt;br /&gt;
echo $c-&amp;gt;abc;//这里输出DEF&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
以上代码是在PHP5中的运行效果&lt;br /&gt;
在PHP5中 对象的复制 是通过引用来实现的。上列中$b=new a; $c=$b; 其实等效于$b=new a; $c=&amp;amp;$b;&lt;br /&gt;
PHP5中默认就是通过引用来调用对象， 但有时你可能想建立一个对象的副本，并希望原来的对象的改变不影响到副本 . 为了这样的目的，PHP定义了一个特殊的方法，称为__clone.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;引用的作用&lt;/strong&gt;&lt;br /&gt;
如果&lt;span class=&quot;t_tag&quot; onclick=&quot;tagshow(event)&quot;&gt;程序&lt;/span&gt;比较大,引用同一个对象的变量比较多,并且希望用完该对象后手工清除它,个人建议用 &quot;&amp;amp;&quot; 方式,然后用$var=null的方式清除. 其它时候还是用php5的默认方式吧. 另外, php5中对于大&lt;span class=&quot;t_tag&quot; onclick=&quot;tagshow(event)&quot;&gt;数组&lt;/span&gt;的传递,建议用 &quot;&amp;amp;&quot; 方式, 毕竟节省内存空间使用。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;取消引用&lt;/strong&gt;&lt;br /&gt;
当你 unset 一个引用，只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。例如： &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$a = 1;&lt;br /&gt;
$b =&amp;amp; $a;&lt;br /&gt;
unset ($a);&lt;br /&gt;
?&amp;gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
不会 unset $b，只是 $a。 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;global 引用&lt;/strong&gt;&lt;br /&gt;
当用 global $var 声明一个变量时实际上建立了一个到全局变量的引用。也就是说和这样做是相同的： &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$var =&amp;amp; $GLOBALS[&quot;var&quot;];&lt;br /&gt;
?&amp;gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
这意味着，例如，unset $var 不会 unset 全局变量。 &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;$this&lt;/strong&gt;&lt;br /&gt;
在一个对象的方法中，$this 永远是调用它的对象的引用。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//下面再来个小插曲&lt;br /&gt;
php中对于地址的指向（类似指针）功能不是由用户自己来实现的，是由&lt;span class=&quot;t_tag&quot; onclick=&quot;tagshow(event)&quot;&gt;Zend&lt;/span&gt;核心实现的，php中引用采用的是&amp;ldquo;写时拷贝&amp;rdquo;的原理，就是除非发生写操作，指向同一个地址的变量或者对象是不会被拷贝的。&lt;br /&gt;
&lt;br /&gt;
通俗的讲&lt;br /&gt;
1:如果有下面的代码&lt;br /&gt;
 &lt;br /&gt;
$a=&quot;ABC&quot;;&lt;br /&gt;
$b=$a;&lt;br /&gt;
&lt;br /&gt;
其实此时　$a与$b都是指向同一内存地址　而并不是$a与$b占用不同的内存&lt;br /&gt;
&lt;br /&gt;
２:如果在上面的代码基础上再加上如下代码&lt;br /&gt;
 &lt;br /&gt;
$a=&quot;EFG&quot;;&lt;br /&gt;
&lt;br /&gt;
由于$a与$b所指向的内存的&lt;span class=&quot;t_tag&quot; onclick=&quot;tagshow(event)&quot;&gt;数据&lt;/span&gt;要重新写一次了，此时Zend核心会自动判断　自动为$b生产一个$a的数据拷贝，重新申请一块内存进行存储&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/51600631.html&quot;&gt;一些PHP的Tips，面试会遇到&lt;/a&gt; 2009-11-17&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/44782777.html&quot;&gt;中文全文搜索解决方案sphinx+mysql+mmseg，安装，配置，API调用&lt;/a&gt; 2009-08-21&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/44675013.html&quot;&gt;php的调试工具XHProf的安装，运用&lt;/a&gt; 2009-08-20&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/44089415.html&quot;&gt;中文分词，应用&lt;/a&gt; 2009-08-13&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/44069112.html&quot;&gt;PHP Tips，留着以后备用（3）&lt;/a&gt; 2009-08-13&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbbayou.blogbus.com%2Flogs%2F51814479.html&amp;title=php%E5%BC%95%E7%94%A8%E7%AC%A6%E5%8F%B7%28%26amp%3B%29%E7%9A%84%E4%BD%9C%E7%94%A8&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/299147683/bbayou_blogbus_com/blogbus.com/s.gif?r=http://bbayou.blogbus.com/logs/51814479.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bbayou_blogbus_com/299147683/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bbayou_blogbus_com/299147683/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bbayou.blogbus.com/c/">未分类</category><pubDate>Fri, 20 Nov 2009 16:34:25 +0800</pubDate><guid isPermaLink="false">http://bbayou.blogbus.com/logs/51814479.html</guid><dc:creator>bbayou</dc:creator><fs:srclink>http://bbayou.blogbus.com/logs/51814479.html</fs:srclink><fs:srcfeed>http://bbayou.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bbayou_blogbus_com/~7058766/299147683/5166804</fs:itemid></item><item><title>转一个《 浅析豆瓣的 Google Analytics 应用》，备用</title><link atom:type="text/html">http://bbayou.blogbus.com/logs/51725493.html</link><author xmlns="http://www.w3.org/2005/Atom"><name>bbayou</name></author><id xmlns="http://www.w3.org/2005/Atom">http://bbayou.blogbus.com/logs/51725493.html</id><description>&lt;div id=&quot;articleText&quot;&gt;
&lt;p&gt;大家好，我是&lt;a title=&quot;owen的SEM和网络统计博客&quot; href=&quot;http://sem.joyit.net/&quot; target=&quot;_blank&quot;&gt;owen&lt;/a&gt;，主要从事 Online marketing 方面的工作，平时主要专注于 SEM 和 Web analytics。这次很荣幸能够应 &lt;a href=&quot;http://fairyfish.net/&quot; target=&quot;_blank&quot;&gt;Denis&lt;/a&gt; 之邀，在我爱水煮鱼抛砖引玉，发表 Web analytics 方面的文章，希望以后能够在这里，与大家多多交流这方面的知识。今天首先给大家简单谈谈豆瓣网怎么应用 Google Analytics。&lt;/p&gt;
&lt;h2&gt;豆瓣 Google Analytics 代码加载模式&lt;/h2&gt;
&lt;p&gt;豆瓣从今年开始也加入 Google Analytics 的统计阵营。让我们通过它加载的 Google Analytics 源码，简单分析一下它都是怎么应用的。&lt;/p&gt;
&lt;p&gt;我们先从豆瓣的源码来看看它的Google Analytics统计代码&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://www.phpv.net/uploadfile/month_200907/local_SgQWoe9Mkc.jpg&quot; alt=&quot;豆瓣 Google Analytics 代码&quot; /&gt;&lt;br /&gt;
 豆瓣 Google Analytics 代码 &lt;/p&gt;
&lt;p&gt;我们知道一般默认的 Google Analytics代码如下：&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://www.phpv.net/uploadfile/month_200907/local_TDkdtTlLOz.jpg&quot; alt=&quot;默认  Google Analytics 统计代码&quot; /&gt;&lt;br /&gt;
默认  Google Analytics 统计代码 &lt;/p&gt;
&lt;p&gt;两相对比，我们就会发现豆瓣加载 &lt;code&gt;ga.js &lt;/code&gt;的方式与默认的方式有些不太一样，由于豆瓣并没有采用 https 加密访问，所以撇弃了默认的ga.js加载方式。&lt;/p&gt;
&lt;p&gt;默认的统计函数，&lt;code&gt;pageTracker &lt;/code&gt;也被豆瓣改成了 &lt;code&gt;_ga&lt;/code&gt; ，这个只是名称定义上的区别，并没有什么实质的改变。豆瓣的主要应用是下面两个函数：&lt;/p&gt;
&lt;h3&gt;使用 _ga._addOrganic 识别非主流搜索引擎&lt;/h3&gt;
&lt;p&gt;再来看豆瓣比默认 Google Analytics 代码增加的部分，那就是多了数个 &lt;code&gt;_ga._addOrganic &lt;/code&gt;，这是 Google Analytics 添加自定义搜索引擎的代码。尽管 Google Analytics 对于主流的搜索引擎都能自动识别，但毕竟能识别的是国外的主流搜索引擎，在国内，像搜狐的 Sogou，QQ 的 soso，网易的有道等搜索引擎，&lt;strong&gt;都不能被 Google Analytics 正确识别，而被当作推荐来源&lt;/strong&gt;。这时候我们就可以利用&lt;code&gt;_addOrganic&lt;/code&gt; 参数来识别这些非主流搜索引擎，如豆瓣的做法。&lt;/p&gt;
&lt;h3&gt;使用 _addIgnoredOrganic 忽略关键字&lt;/h3&gt;
&lt;p&gt;除了添加自定义搜索引擎，豆瓣在最后还添加了如下这些代码:&lt;/p&gt;
&lt;pre&gt;_ga._addIgnoredOrganic(&quot;豆瓣&quot;);&lt;br /&gt;_ga._addIgnoredOrganic(&quot;douban&quot;);&lt;br /&gt;_ga._addIgnoredOrganic(&quot;豆瓣网&quot;);&lt;br /&gt;_ga._addIgnoredOrganic(&quot;www.douban.com&quot;);&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;这些代码用来把引号中的关键词从搜索引擎的关键词报告中排除，而当成直接点击量来源。&lt;/p&gt;
&lt;p&gt;为什么要这么做？因为一个知名的大网站，来自这些品牌词的搜索流量都非常大，常常是排在前几位的搜索关键词来源，而这通常是因为搜索引擎养成现在的
人都懒得记网址，直接搜索品牌名来记住域名。这些品牌词对于网站的关键词来源分析并没有很直接的帮助，所以在来自品牌词的流量很大的情况下，可以直接把这
些关键词识别成直接点击量来源。&lt;/p&gt;
&lt;p&gt;关于&lt;strong&gt;自定义 Google Analytics 搜索引擎&lt;/strong&gt;和&lt;strong&gt;排除特定关键词为直接点击量来源&lt;/strong&gt;的语法，可以参考&lt;a title=&quot;_addOrganic() 与 _addIgnoredOrganic() 用法介绍&quot; href=&quot;http://code.google.com/apis/analytics/docs/gaJS/gaJSApiSearchEngines.html&quot; target=&quot;_blank&quot;&gt; Google Code 上关于这方面的详细介绍。&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;通过 _setVar 识别用户&lt;/h2&gt;
&lt;p&gt;当我们登录豆瓣后，再来分析豆瓣的源码，会发现多了一个&lt;code&gt;ga._setVar(&amp;rdquo;xxxx&amp;rdquo;)&lt;/code&gt;的 Google Analytics 参数。&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://www.phpv.net/uploadfile/month_200907/local_pFIluyVQXs.jpg&quot; alt=&quot;豆瓣使用 Google Analytics 的._setVar参数来跟踪登录用户行为&quot; /&gt;&lt;br /&gt;
 豆瓣使用 Google Analytics 的._setVar参数来跟踪登录用户行为 &lt;/p&gt;
&lt;p&gt;&lt;code&gt;_setVar()&lt;/code&gt; 函数是 Google Analytics 的用户定义函数，主要用于对特定来源的用户行为进行分类，例如可以对登录浏览的用户设置一个数值，然后在 Google Analytics 后台的&lt;strong&gt;访问者/用户定义&lt;/strong&gt; 中查看其浏览属性。&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://www.phpv.net/uploadfile/month_200907/local_LfK9D1bCL3.jpg&quot; alt=&quot;Google Analytics 访问者/用户定义报告&quot; width=&quot;600&quot; /&gt;&lt;br /&gt;
Google Analytics  访问者/用户定义报告 &lt;/p&gt;
&lt;p&gt;分析豆瓣的源码可以知道，豆瓣对每一个登录后的用户，都赋以一个专门的 id 值，这样可以在用户定义报告里，看到整体的登录用户访问行为，乃至每个登录用户的浏览行为。通过这样设定后，豆瓣便可以轻易获取高忠诚度访问用户的访问行为。&lt;a title=&quot;_setVar 设置说明&quot; href=&quot;http://code.google.com/apis/analytics/docs/gaJS/gaJSApiBasicConfiguration.html#_gat.GA_Tracker_._setVar&quot; target=&quot;_blank&quot;&gt;关于_setVar()的更多说明，请参阅 Google Analytics的技术文档&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;如何根据访问者在我的网站上访问的页面或在表单上做出的响应对其进行分类？&lt;a title=&quot; 如何根据访问者在我的网站上访问的页面或在表单上做出的响应对其进行分类？&quot; href=&quot;http://www.google.com/support/googleanalytics/bin/answer.py?hlrm=en&amp;amp;answer=57045&quot; target=&quot;_blank&quot;&gt;在 Google Analytics 官方的帮助文件，也给出了另外一个应用案例&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;值得注意的是，原来在设置 &lt;code&gt;_setVar()&lt;/code&gt; 函数的时候，整个网站的跳出率会出现重大的偏差，不过在&lt;a title=&quot;Google Analytics修正_setVar函数对网站跳出率的影响&quot; href=&quot;http://analytics.blogspot.com/2009/01/using-setvar-heres-update-on-bounce.html&quot; target=&quot;_blank&quot;&gt;最近的google analytics官方博客，指出该bug已经修正&lt;/a&gt;，客户在进行这方面设置的时候，还是要注意对比前后数据是否有重大偏差。&lt;/p&gt;
&lt;h2&gt;通过 _trackPageview 区分不同类型的评论&lt;/h2&gt;
&lt;p&gt;豆瓣上的书评，影评和乐评可以说是豆瓣网站的核心价值所在。一般评论的URL格式如下：&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://www.phpv.net/uploadfile/month_200907/local_LP9SBYU5iw.jpg&quot; alt=&quot;豆瓣上单条评论的URL&quot; /&gt;&lt;br /&gt;
豆瓣上单条评论的URL &lt;/p&gt;
&lt;p&gt;当我们查看该页面的网页源代码时，会发现有趣的现象:&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://www.phpv.net/uploadfile/month_200907/local_oBi5X9K3OC.jpg&quot; alt=&quot;豆瓣单条评论页的 Google Analytics 代码&quot; /&gt;&lt;br /&gt;
豆瓣单条评论页的 Google Analytics 代码 &lt;/p&gt;
&lt;p&gt;我们知道，一般 Google Analytics 的&lt;code&gt;_trackPageview()&lt;/code&gt; 括弧中的参数是留空的， Google Analytics 会自动捕获网址的 URL 参数，如果在 &lt;code&gt;_trackPageview()&lt;/code&gt;括弧中输入特定的数值，那么在 Google Analytics 的报表中，URL 将是我们指定的参数，而不再是我们在地址栏看到的 URL。&lt;/p&gt;
&lt;p&gt;如上面的例子，我们在 Google Analytics 中看到的URL将是&lt;span style=&quot;color: #ff0000;&quot;&gt;/book/review/1946018/&lt;/span&gt;，而不再是我们在浏览器地址栏看到的&lt;span style=&quot;color: #ff0000;&quot;&gt;/review/1946018/&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;当所在频道是电影或者音乐时，&lt;code&gt;_trackPageview()&lt;/code&gt; 中的参数将根据所在频道的属性，变为/movie/xxxxx 或者 /music/xxxxx的数值。&lt;/p&gt;
&lt;p&gt;豆瓣通过对的参数进行重新指定，主要有以下的好处：&lt;/p&gt;
&lt;p&gt;保证了用户和搜索引擎看到的 URL 比较简短，达到 URL 对用户友好和对搜索引擎友好的目的；而在 Google Analytics 报告中，通过 &lt;span style=&quot;color: #ff0000;&quot;&gt;内容/内容细目/ &lt;/span&gt;报告，又能了解到各个频道总的浏览情况。&lt;/p&gt;
&lt;p&gt;在GA的&lt;span style=&quot;color: #ff0000;&quot;&gt;内容细目&lt;/span&gt;报告中，将会多出 &lt;span style=&quot;color: #ff0000;&quot;&gt;/book/    /music/  /movie/&lt;/span&gt; 这样的文件夹来，总而获得各个频道的合计浏览数据。&lt;/p&gt;
&lt;p&gt;而如果只是使用默认 &lt;code&gt;_trackPageview()&lt;/code&gt;，你将只能得到所有评论页面的浏览数据，而无法得到细分的各个频道的浏览数据。&lt;/p&gt;
&lt;p&gt;关于&lt;code&gt;_trackPageview()&lt;/code&gt;的具体的使用方法&lt;a title=&quot;_trackPageview中参数的使用&quot; href=&quot;http://code.google.com/apis/analytics/docs/gaJS/gaJSApi.html#_gat.GA_Tracker_._trackPageview&quot; target=&quot;_blank&quot;&gt;可参照 Google Code 的说明&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;注意事项:使用 &lt;code&gt;_trackPageview()&lt;/code&gt;  参数重新指定 URL 之后，网站覆盖图的数据将受到影响。&lt;a href=&quot;http://www.google.com/support/analytics/bin/answer.py?hl=cn&amp;amp;answer=66982&quot; target=&quot;_blank&quot;&gt;可参阅 Google Analytics 的官方帮助文件&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;除了豆瓣使用 &lt;code&gt;_trackPageview()&lt;/code&gt; 来对URL进行重写，&lt;a href=&quot;http://www.dianping.com/&quot; target=&quot;_blank&quot;&gt;大众点评网&lt;/a&gt;也采用了类似的做法（应该是比豆瓣更早采用。。。因为是我在点评网任职时候实验的做法;那时候豆瓣还没有使用 Google Analytis 统计代码，呵呵），有兴趣的同学可以自己去研究点评的 Google Analytis 代码。&lt;/p&gt;
&lt;!-- 翻页 --&gt;
                    &lt;/div&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;/logs/51597242.html&quot;&gt;应该具有什么样的技能，才算得上PHP程序员？&lt;/a&gt; 2009-11-17&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/44184095.html&quot;&gt;Mysql 全中文索引的实现&lt;/a&gt; 2009-08-14&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/44020539.html&quot;&gt;curl函数库，应用说明&lt;/a&gt; 2009-08-12&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/39679865.html&quot;&gt;InnoDB和MyISAM&lt;/a&gt; 2009-05-21&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/38044333.html&quot;&gt;mysql数据库的优化（入门）&lt;/a&gt; 2009-04-17&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbbayou.blogbus.com%2Flogs%2F51725493.html&amp;title=%E8%BD%AC%E4%B8%80%E4%B8%AA%E3%80%8A+%E6%B5%85%E6%9E%90%E8%B1%86%E7%93%A3%E7%9A%84+Google+Analytics+%E5%BA%94%E7%94%A8%E3%80%8B%EF%BC%8C%E5%A4%87%E7%94%A8&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/299147684/bbayou_blogbus_com/blogbus.com/s.gif?r=http://bbayou.blogbus.com/logs/51725493.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bbayou_blogbus_com/299147684/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bbayou_blogbus_com/299147684/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bbayou.blogbus.com/c/">未分类</category><pubDate>Thu, 19 Nov 2009 11:32:00 +0800</pubDate><guid isPermaLink="false">http://bbayou.blogbus.com/logs/51725493.html</guid><dc:creator>bbayou</dc:creator><fs:srclink>http://bbayou.blogbus.com/logs/51725493.html</fs:srclink><fs:srcfeed>http://bbayou.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bbayou_blogbus_com/~7058766/299147684/5166804</fs:itemid></item><item><title>一些PHP的Tips，面试会遇到</title><link atom:type="text/html">http://bbayou.blogbus.com/logs/51600631.html</link><author xmlns="http://www.w3.org/2005/Atom"><name>bbayou</name></author><id xmlns="http://www.w3.org/2005/Atom">http://bbayou.blogbus.com/logs/51600631.html</id><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;HTTP协议中几个状态码的含义:503 500 401 200 301 302&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2xx: （成功）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3xx （重定向） &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4xx: Client Error　使用者端(浏览器)错误讯息 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5xx: Server Error 　服务器端错误讯息&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 400（错误请求） &amp;nbsp;&amp;nbsp;&amp;nbsp; 服务器不理解请求的语法。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 401（未授权） &amp;nbsp;&amp;nbsp;&amp;nbsp; 请求要求身份验证。对于登录后请求的网页，服务器可能返回此响应。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 500（服务器内部错误） &amp;nbsp;&amp;nbsp;&amp;nbsp; 服务器遇到错误，无法完成请求。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 503（服务不可用） &amp;nbsp;&amp;nbsp;&amp;nbsp; 服务器目前无法使用（由于超载或停机维护）。通常，这只是暂时状态。&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;Include require include_once require_once 的区别.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; require() :如果文件不存在，会报出一个fatal error.脚本停止执行&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; include() : 如果文件不存在，会给出一个 warning，但脚本会继续执行 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _once: 会检测是否包含过了，包含过了就不包含了&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;关于HereDOC：&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;?php&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $a = &quot;---------&quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &amp;lt;&amp;lt;&amp;lt;HAHA&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; \$a&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HAHA&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ?&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 输出： &amp;nbsp; -----------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $a&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;关于php的魔法引用：&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果php.ini不可改，可以使用.htaccess文件禁用，加入下面的代码 php_flag magic_quotes_gpc Off&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 相关函数：stripslashes &amp;mdash; 去掉反斜杠，得到原始数据。 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addslashes &amp;mdash; 使用反斜线引用字符串&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 最好设置为OFF，然后自己过滤，在PHP6中已经关闭了，或者用下面的函数：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (get_magic_quotes_gpc()) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; function stripslashes_deep($value) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $value = is_array($value)?array_map('stripslashes_deep',$value):stripslashes($value);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return $value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $_GET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = array_map('stripslashes_deep', $_GET);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $_POST&amp;nbsp;&amp;nbsp;&amp;nbsp; = array_map('stripslashes_deep', $_POST);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $_COOKIE&amp;nbsp; = array_map('stripslashes_deep', $_COOKIE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $_REQUEST = array_map('stripslashes_deep', $_REQUEST);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;一些编译php时的configure 参数&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;1.作为APACHE模块编译&lt;br /&gt;&amp;ndash;with-apxs2&lt;br /&gt;2.作为fastcgi编译&lt;br /&gt;&amp;ndash;enable-fastcgi&lt;br /&gt;&amp;ndash;enable-force-cgi-redirect&lt;br /&gt;3.动态加载PHP的extension&lt;br /&gt;加载模块的后面加上shared关键词&lt;br /&gt;例如&amp;ndash;with-gd=shared&lt;br /&gt;4.enable的扩展选项一样可以使用shared关键词作为外部扩展模块载入&lt;br /&gt;5.with-EXTENSIONS-dir和单纯的with-EXTENSIONS的作用相同&lt;br /&gt;同样是指定加载特定模块&lt;br /&gt;只是可以指定目录&lt;br /&gt;./configure --prefix=/usr/local/php --with-config-file-path=/etc \&lt;br /&gt;--with-apxs2 --enable-fastcgi --enable-force-cgi-redirect \&lt;br /&gt;--with-gd=shared \&lt;br /&gt;--with-jpeg-dir \&lt;br /&gt;--with-png-dir \&lt;br /&gt;--with-zlib-dir \&lt;br /&gt;--enable-gd-native-ttf \&lt;br /&gt;--with-freetype-dir=shared \&lt;br /&gt;--with-zlib=shared \&lt;br /&gt;--with-mysql=shared \&lt;br /&gt;--with-mcrypt=shared \&lt;br /&gt;--with-pear=shared \&lt;br /&gt;--with-curl=shared \&lt;br /&gt;--with-curlwrappers=shared \&lt;br /&gt;--with-xmlrpc=shared \&lt;br /&gt;--without-sqlite --disable-debug --disable-rpath \&lt;br /&gt;--enable-mbstring=shared \&lt;br /&gt;--enable-exif=shared \&lt;br /&gt;--enable-zip=shared \&lt;br /&gt;--enable-ftp=shared&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;Safe_mode 打开后哪些地方受限.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;启动safe_mode，会对许多PHP函数进行限制，特别是和系统相关的文件打开、命令执行等函数。&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;解决多进程/线程同时读写一个文件的问题&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;对于日IP不高或者说并发数不是很大的应用，一般不用考虑这些！！用一般的文件操作方法完全没有问题。但如果并发高，在我们对文件进行读写操作时，很有可能多个进程对进一文件进行操作，如果这时不对文件的访问进行相应的独占，就容易造成数据丢失。&lt;br /&gt;&lt;br /&gt;对于这样的问题，一般的解决方案时当一进程对文件进行操作时，首先对其它进行加锁&lt;br /&gt;所以一般的方案是：&lt;br /&gt;$fp = fopen(&quot;/tmp/lock.txt&quot;, &quot;w+&quot;);&lt;br /&gt;if (flock($fp, LOCK_EX)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwrite($fp, &quot;Write something here\n&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flock($fp, LOCK_UN);&lt;br /&gt;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &quot;Couldn't lock the file !&quot;;&lt;br /&gt;}&lt;br /&gt;fclose($fp);&lt;br /&gt;&lt;br /&gt;但在PHP中，flock似乎工作的不是那么好！在多并发情况下，似乎是经常独占资源，不即时释放，或者是根本不释放，造成死锁，从而使服务器的cpu占用很高，甚至有时候会让服务器彻底死掉。好像在很多linux/unix系统中，都会有这样的情况发生。&lt;br /&gt;&lt;br /&gt;如果不考虑使用flock()函数，也同样会有很好的解决方案来解决我们的问题。&lt;br /&gt;&lt;span style=&quot;background-color: #008000;&quot;&gt;&lt;span style=&quot;color: #ffcc00;&quot;&gt;方案一：对文件进行加锁时，设置一个超时时间.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;if($fp = fopen($fileName, 'a')) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $startTime = microtime();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $canWrite = flock($fp, LOCK_EX);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(!$canWrite) usleep(round(rand(0, 100)*1000));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } while ((!$canWrite) ＆＆ ((microtime()-$startTime) &amp;amp;lt; 1000));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($canWrite) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; fwrite($fp, $dataToSave);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fclose($fp);&lt;br /&gt;}&lt;br /&gt;超时设置为1ms，如果这里时间内没有获得锁，就反复获得，直接获得到对文件操作权为止，当然。如果超时限制已到，就必需马上退出，让出锁让其它进程来进行操作。&lt;br /&gt;&lt;span style=&quot;background-color: #008000;&quot;&gt;&lt;span style=&quot;color: #ffcc00;&quot;&gt;方案二：不使用flock函数，借用临时文件来解决读写冲突的问题。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;大致原理如下：&lt;br /&gt;1。将需要更新的文件考虑一份到我们的临时文件目录，将文件最后修改时间保存到一个变量，并为这个临时文件取一个随机的，不容易重复的文件名。&lt;br /&gt;2。当对这个临时文件进行更新后，再检测原文件的最后更新时间和先前所保存的时间是否一致。&lt;br /&gt;3。如果最后一次修改时间一致，就将所修改的临时文件重命名到原文件，为了确保文件状态同步更新，所以需要清除一下文件状态。&lt;br /&gt;4。但是，如果最后一次修改时间和先前所保存的一致，这说明在这期间，原文件已经被修改过，这时，需要把临时文件删除，然后返回false,说明文件这时有其它进程在进行操作。&lt;br /&gt;&lt;br /&gt;方案四：将所有要操作的进程放入一个队列中。然后专门放一个服务完成文件操作。&lt;br /&gt;队列中的每一个排除的进程相当于第一个具体的操作，所以第一次我们的服务只需要从队列中取得相当于具体操作事项就可以了，如果这里还有大量的文件操作进程，没关系，排到我们的队列后面即可，只要愿意排，队列的多长都没关系。&lt;br /&gt;参考：http://hqlong.com/2009/01/530.html&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;使用mod_rewrite,在服务器上没有/archivers/567.html这个物理文件时，重定向到index.php?id=567&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;先php.ini配置中打开mod_rewrite。然后在.htaccess文件中写入：ErrorDocument 404 index.php?id=567&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;网站性能优化 提高网站访问速度的14条实践规则&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;具体参考：提高网站性能的14条法则：http://www.629d.com/a/200907/62.html&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;主要:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;第一条、尽可能的减少 HTTP 的请求数 （Make Fewer HTTP Requests ）&lt;br /&gt;第二条、使用CDN（内容分发网络）: Use a Content Delivery Network&lt;br /&gt;第三条、 添加Expire/Cache-Control 头：Add an Expires Header&lt;br /&gt;第五条、将css放在页面最上面 （ Put Stylesheets at the Top）&lt;br /&gt;第六条、将script放在页面最下面 （Put Scripts at the Bottom ）&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/51814479.html&quot;&gt;php引用符号(&amp;amp;)的作用&lt;/a&gt; 2009-11-20&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/46388476.html&quot;&gt;http_load 一个httpd 压力测试工具&lt;/a&gt; 2009-09-14&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/44782777.html&quot;&gt;中文全文搜索解决方案sphinx+mysql+mmseg，安装，配置，API调用&lt;/a&gt; 2009-08-21&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/44675013.html&quot;&gt;php的调试工具XHProf的安装，运用&lt;/a&gt; 2009-08-20&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/44089415.html&quot;&gt;中文分词，应用&lt;/a&gt; 2009-08-13&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbbayou.blogbus.com%2Flogs%2F51600631.html&amp;title=%E4%B8%80%E4%BA%9BPHP%E7%9A%84Tips%EF%BC%8C%E9%9D%A2%E8%AF%95%E4%BC%9A%E9%81%87%E5%88%B0&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/299147685/bbayou_blogbus_com/blogbus.com/s.gif?r=http://bbayou.blogbus.com/logs/51600631.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bbayou_blogbus_com/299147685/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bbayou_blogbus_com/299147685/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bbayou.blogbus.com/c/">未分类</category><pubDate>Tue, 17 Nov 2009 19:07:28 +0800</pubDate><guid isPermaLink="false">http://bbayou.blogbus.com/logs/51600631.html</guid><dc:creator>bbayou</dc:creator><fs:srclink>http://bbayou.blogbus.com/logs/51600631.html</fs:srclink><fs:srcfeed>http://bbayou.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bbayou_blogbus_com/~7058766/299147685/5166804</fs:itemid></item><item><title>应该具有什么样的技能，才算得上PHP程序员？</title><link atom:type="text/html">http://bbayou.blogbus.com/logs/51597242.html</link><author xmlns="http://www.w3.org/2005/Atom"><name>bbayou</name></author><id xmlns="http://www.w3.org/2005/Atom">http://bbayou.blogbus.com/logs/51597242.html</id><description>&lt;p&gt;&lt;span class=&quot;f14&quot;&gt;&lt;strong&gt;应该具有什么样的技能，才算得上&lt;/strong&gt;&lt;/span&gt;&lt;span class=&quot;f14&quot;&gt;&lt;strong&gt;PHP程序员？你的技术又是在什么水平级别上？ CU上的BS同学写了以下文章。欢迎各位对号入座。&lt;/strong&gt;&lt;/span&gt;&lt;span class=&quot;f14&quot;&gt;&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;1、PHP编程能力&lt;/strong&gt;
&lt;br /&gt;说不清，留空&lt;br /&gt;
&lt;br /&gt;&lt;strong&gt;2、MySQL能力&lt;/strong&gt;
&lt;br /&gt;在开发上的应用基于几个能力体现：
&lt;br /&gt;1、了解：知道用PHP连接数据库；懂得写一些简单的SQL；建一些简单的索引；懂得用工具简单操作一下数据库（增删改库表结构数据等等）。
&lt;br /&gt;2、熟悉：懂得在开发应用上设计数据库，建立一些有效的索引，用explain分析SQL性能，压力测试等等。
&lt;br /&gt;3、很熟悉：深入了解数据库索引、存储引擎原理以及运行机制，能有效地构建高性能可扩展的数据库结构/架构，有效地优化数据库性能配置并加以调试，分析数据库运行状态。
&lt;br /&gt;4、精通：简单地说具备以上所有能力的同时，有多年高负载分布式环境下的优化管理经验。
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;据我观察以及交往经验，70%的PHPer处在了解阶段，25%处于熟悉阶段，&amp;gt;4%很熟悉，精通的人基本就不是phper了。
&lt;br /&gt;
&lt;br /&gt;70%这个群体最容易忽视MySQL，以为MySQL只是简单的存储媒介，没有优化意识，认为加个内存、CPU就能解决问题。
&lt;br /&gt;典型事件：join、order&amp;nbsp;by、group&amp;nbsp;by等语句性能一塌糊涂，数据库根本没有设计(仅限于拆成一个主表，N个附表等)，搞不清字段类型及作用，碰到大表的复杂查询就没辙。
&lt;br /&gt;
&lt;br /&gt;20%这个群体的人只是MySQL运行机制理解不透彻，对影响MySQL性能的关健因素把握不明确，不熟练。
&lt;br /&gt;典型事件：熟读手册，但说不清索引原理，不知道二叉树、HASH等算法对于数据库的作用
&lt;br /&gt;
&lt;br /&gt;&amp;gt;4%的群体已经基本可以胜任DBA的职能。
&lt;br /&gt;
&lt;br /&gt;&lt;strong&gt;3、OOP能力&lt;/strong&gt;
&lt;br /&gt;1、了解：了解变量的作用域、类型，及其意义，了解继承机制等，懂得复用、封装概念。
&lt;br /&gt;2、熟悉：熟练应用接口、抽象等技术混合开发程序，并理解其中含义，一般研究过JAVA。
&lt;br /&gt;3、很熟悉：有过OOP架构设计经验，熟悉设计模式、UML，熟悉PHP对象运行机制，内容管理等。
&lt;br /&gt;4、精通：应该是架构师级别了，不限于PHP。
&lt;br /&gt;
&lt;br /&gt;经常我们会碰到一些自称熟悉OOP却连public、private、protected、static都解释不清的人，是肯定没有经历过正规的OOP项目。
&lt;br /&gt;
&lt;br /&gt;&lt;strong&gt;4、大型网站经验&lt;/strong&gt;
&lt;br /&gt;1、了解：熟悉PHP开发下的缓存应用（memcache、APC等）；接触过LVS、SQUID应用；
&lt;br /&gt;有一定的session处理方案；熟悉负载均衡；熟悉PHP数据连接池应用；了解PHP编程性能优化。
&lt;br /&gt;2、熟悉：掌握分布式缓存及缓存性能优化、熟悉存储系统、文件系统、数据库，开发可扩展平台。能结合负载均衡合理布置流量，对PHP运行性能进行监控与分析。
&lt;br /&gt;3、非常熟悉：具备系统分析师能力，已经超出phper环节...
&lt;br /&gt;4、精通：太深奥..
&lt;br /&gt;
&lt;br /&gt;&lt;strong&gt;5、DOM开发能力&lt;/strong&gt;
&lt;br /&gt;
留空&lt;br /&gt;
&lt;br /&gt;&lt;strong&gt;6、*nux应用能力
&lt;br /&gt;
&lt;/strong&gt;&lt;/span&gt;...&lt;br /&gt;&lt;span class=&quot;f14&quot;&gt;&lt;strong&gt;
------------------------------------------------------------------------------------------------&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;f14&quot;&gt;&lt;strong&gt;路漫漫其修远兮，吾将上下而求索&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;/logs/51725493.html&quot;&gt;转一个《 浅析豆瓣的 Google Analytics 应用》，备用&lt;/a&gt; 2009-11-19&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/44184095.html&quot;&gt;Mysql 全中文索引的实现&lt;/a&gt; 2009-08-14&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/41467518.html&quot;&gt;轻量级持久存储系统 MemcacheDB&lt;/a&gt; 2009-06-25&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/39679865.html&quot;&gt;InnoDB和MyISAM&lt;/a&gt; 2009-05-21&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/37333459.html&quot;&gt;JQuery实现&amp;lt;select&amp;gt;onchang事件触发展开一个div&lt;/a&gt; 2009-04-01&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbbayou.blogbus.com%2Flogs%2F51597242.html&amp;title=%E5%BA%94%E8%AF%A5%E5%85%B7%E6%9C%89%E4%BB%80%E4%B9%88%E6%A0%B7%E7%9A%84%E6%8A%80%E8%83%BD%EF%BC%8C%E6%89%8D%E7%AE%97%E5%BE%97%E4%B8%8APHP%E7%A8%8B%E5%BA%8F%E5%91%98%EF%BC%9F&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/299147686/bbayou_blogbus_com/blogbus.com/s.gif?r=http://bbayou.blogbus.com/logs/51597242.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bbayou_blogbus_com/299147686/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bbayou_blogbus_com/299147686/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bbayou.blogbus.com/c/">未分类</category><pubDate>Tue, 17 Nov 2009 17:37:44 +0800</pubDate><guid isPermaLink="false">http://bbayou.blogbus.com/logs/51597242.html</guid><dc:creator>bbayou</dc:creator><fs:srclink>http://bbayou.blogbus.com/logs/51597242.html</fs:srclink><fs:srcfeed>http://bbayou.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bbayou_blogbus_com/~7058766/299147686/5166804</fs:itemid></item><item><title>我的第一个python脚本</title><link atom:type="text/html">http://bbayou.blogbus.com/logs/50994895.html</link><author xmlns="http://www.w3.org/2005/Atom"><name>bbayou</name></author><id xmlns="http://www.w3.org/2005/Atom">http://bbayou.blogbus.com/logs/50994895.html</id><description>&lt;p&gt;呵呵，最近在学习python，只明白了大概，很多还不会，不熟悉。现在放一个python程序，目标是：遍历文件夹里的torrent文件，分析hash info 加密后是否跟原文件的文件名相同，不同的话，记录log文件。我写起来有点复杂，感觉还不是按照python的思维来写程序，要学的还很多。&lt;/p&gt;
&lt;p&gt;#! /usr/bin/python&lt;br /&gt;&lt;br /&gt;from sys import *&lt;br /&gt;from bencode import *&lt;br /&gt;import hashlib&lt;br /&gt;import os&lt;br /&gt;import os.path&lt;br /&gt;&lt;br /&gt;#-----test-----&lt;br /&gt;#if len(argv) != 2:&lt;br /&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; print &quot;ERROR: use ./33.py filename&quot;&lt;br /&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; exit(2)&lt;br /&gt;#file_name = argv[1]&lt;br /&gt;#-----test-----&lt;br /&gt;&lt;br /&gt;def check_torrent_hash(file_name):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; filename ='torrent/'+file_name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; metainfo_file = open(filename, 'rb')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if metainfo_file:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; metainfo = bdecode(metainfo_file.read())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; print &quot;ERROR: Not a valid torrent file&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; exit(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; metainfo_file.close()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; info = metainfo['info']&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hahaha =&amp;nbsp; bencode(info)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mySha1 = hashlib.sha1()&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mySha1.update(hahaha)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mySha1_Digest = mySha1.hexdigest()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; up_str = mySha1_Digest.upper();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OK = file_name.split('.')&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #print up_str&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #print OK[0]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not up_str==OK[0]:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; error_file = open('/home/changyou/wget/error.log', 'a+')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; error_file.writelines(up_str+'\n')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; error_file.close()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 'NO~~please check /home/changyou/wget/error.log'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 'OK!!!'&lt;br /&gt;&lt;br /&gt;rootdir = &quot;/home/changyou/wget/torrent/&quot;&lt;br /&gt;for parent, dirnames, filenames in os.walk(rootdir):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for filename in filenames:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; print check_torrent_hash(filename)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/50863708.html&quot;&gt;python取BT种子的hashinfo&lt;/a&gt; 2009-11-10&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/51725493.html&quot;&gt;转一个《 浅析豆瓣的 Google Analytics 应用》，备用&lt;/a&gt; 2009-11-19&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/46388476.html&quot;&gt;http_load 一个httpd 压力测试工具&lt;/a&gt; 2009-09-14&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/45032192.html&quot;&gt;Nginx中文参考资料！！&lt;/a&gt; 2009-08-25&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/44782777.html&quot;&gt;中文全文搜索解决方案sphinx+mysql+mmseg，安装，配置，API调用&lt;/a&gt; 2009-08-21&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbbayou.blogbus.com%2Flogs%2F50994895.html&amp;title=%E6%88%91%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AApython%E8%84%9A%E6%9C%AC&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/299147687/bbayou_blogbus_com/blogbus.com/s.gif?r=http://bbayou.blogbus.com/logs/50994895.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bbayou_blogbus_com/299147687/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bbayou_blogbus_com/299147687/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bbayou.blogbus.com/c/">未分类</category><pubDate>Wed, 11 Nov 2009 18:12:27 +0800</pubDate><guid isPermaLink="false">http://bbayou.blogbus.com/logs/50994895.html</guid><dc:creator>bbayou</dc:creator><fs:srclink>http://bbayou.blogbus.com/logs/50994895.html</fs:srclink><fs:srcfeed>http://bbayou.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bbayou_blogbus_com/~7058766/299147687/5166804</fs:itemid></item><item><title>python取BT种子的hashinfo</title><link atom:type="text/html">http://bbayou.blogbus.com/logs/50863708.html</link><author xmlns="http://www.w3.org/2005/Atom"><name>bbayou</name></author><id xmlns="http://www.w3.org/2005/Atom">http://bbayou.blogbus.com/logs/50863708.html</id><description>&lt;p&gt;折腾了1天，BT果然是变态，名副其实。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BT是python编写，他的种子文件时以Bencoding编码格式编码，具体如下&lt;br /&gt;
&lt;/strong&gt;无论是web服务器提供的那个.torrent文件，还是peers和trackers进行的信息交互，都是基于Bencoding格式的。&lt;br /&gt;
1 字符串：首先是字符串长度，然后是一个：号，接着是串内容，比如5:hello，就是指hello这个字符串。&lt;br /&gt;
2 整数：以&amp;ldquo;i&amp;rdquo;开头（int的意思），然后是十进制数字，最后是一个&amp;ldquo;e&amp;rdquo;结尾，如i3e表示3，i-3e表示-3，i0e表示0，i-0e是非法的。&lt;br /&gt;
3 列表：以&amp;ldquo;l&amp;rdquo;开头（list的意思），以&amp;ldquo;e&amp;rdquo;结尾。比如 l5:hello5:worldi1234ee 代表 [&quot;hello&quot;,&quot;world&quot;,1234]&lt;br /&gt;
4 字典：以&amp;ldquo;d&amp;rdquo;开头（dictionary），以&amp;ldquo;e&amp;rdquo;结尾。比如 d3:cow3:moo4:spam4:eggse，则代表{&quot;cow&quot;:&quot;moo&quot;, &quot;spam&quot;,&quot;eggs&quot;}&lt;/p&gt;
&lt;p&gt;这里，我们要取的info是种子文件里&amp;lsquo;字典&amp;rsquo;info后面的所有（包括d，到最后的包括e），很长一串。&lt;/p&gt;
&lt;p&gt;最开始写了一个PHP脚本，只是分析的种子文件，只是把种子文件里的数据用数组的形式显，然后用函数sha1()，结果得到的hashinfo不正确。崩溃ing&lt;/p&gt;
&lt;p&gt;后来google了下，发现用python比较靠谱，因为有现成的模块，代码如下：&lt;/p&gt;
&lt;p&gt;#! /usr/bin/python&lt;br /&gt;ffrom sys import *&lt;br /&gt;from bencode import *&lt;br /&gt;import hashlib&lt;br /&gt;&lt;br /&gt;mySha1 = hashlib.sha1()&amp;nbsp; //新建对象&lt;br /&gt;if len(argv) != 2:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &quot;ERROR: use ./hash_info.py filename&quot;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit(2)&lt;br /&gt;filename = argv[1]&lt;br /&gt;metainfo_file = open(filename, 'rb')&lt;br /&gt;try:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; metainfo = bdecode(metainfo_file.read())&lt;br /&gt;except ValueError:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &quot;ERROR: Not a valid torrent file&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit(1)&lt;br /&gt;metainfo_file.close()&lt;br /&gt;info = metainfo['info'] //取列表的info&lt;br /&gt;hahaha =&amp;nbsp; bencode(info) //取torrent的info&lt;br /&gt;&lt;br /&gt;mySha1.update(hahaha)&lt;br /&gt;mySha1_Digest = mySha1.hexdigest()&lt;br /&gt;print mySha1_Digest&amp;nbsp; //得到info sha加密后的数据！！&lt;/p&gt;
&lt;p&gt;---------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;注意:在linux下自带的python里没有hashlib模块，和bencod模块&lt;/p&gt;
&lt;p&gt;需要下载安装，hashlib&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://code.krypto.org/python/hashlib/&lt;/p&gt;
&lt;p&gt;bencod需要下载BitTorrent源码，或者下载单独文件：http://www.pinking.net.cn/scrip/bencode.py，跟脚本程序放在同一目录下即可&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/50994895.html&quot;&gt;我的第一个python脚本&lt;/a&gt; 2009-11-11&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/44069112.html&quot;&gt;PHP Tips，留着以后备用（3）&lt;/a&gt; 2009-08-13&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/41181395.html&quot;&gt;Linux命令+NFS配置+show processlist&lt;/a&gt; 2009-06-18&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/38433219.html&quot;&gt;小网站的框架设计要考虑的东西&lt;/a&gt; 2009-04-24&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/37619728.html&quot;&gt;mysql中查询相同的字段，两种查询！效率差别很大！&lt;/a&gt; 2009-04-08&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbbayou.blogbus.com%2Flogs%2F50863708.html&amp;title=python%E5%8F%96BT%E7%A7%8D%E5%AD%90%E7%9A%84hashinfo&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/299147688/bbayou_blogbus_com/blogbus.com/s.gif?r=http://bbayou.blogbus.com/logs/50863708.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bbayou_blogbus_com/299147688/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bbayou_blogbus_com/299147688/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bbayou.blogbus.com/c/">未分类</category><pubDate>Tue, 10 Nov 2009 11:54:55 +0800</pubDate><guid isPermaLink="false">http://bbayou.blogbus.com/logs/50863708.html</guid><dc:creator>bbayou</dc:creator><fs:srclink>http://bbayou.blogbus.com/logs/50863708.html</fs:srclink><fs:srcfeed>http://bbayou.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bbayou_blogbus_com/~7058766/299147688/5166804</fs:itemid></item><item><title>7个简易网页效果mootools插件</title><link atom:type="text/html">http://bbayou.blogbus.com/logs/48396516.html</link><author xmlns="http://www.w3.org/2005/Atom"><name>bbayou</name></author><id xmlns="http://www.w3.org/2005/Atom">http://bbayou.blogbus.com/logs/48396516.html</id><description>&lt;p&gt;最近研究，前台展示的东西，发觉会的东西实在是少，不会div切图，JS也不咋地，看来要学习的还很多啊。转帖，留下以备后用！&lt;/p&gt;
&lt;p&gt;脚本的最大优点就是仅仅一小段巧妙就可以极大地提升网站的用户体验，得意于Mootools开发社区非常擅长于开发一些专业的高质量插件，我今天可
以收集到一些值得在网站设计中使用的插件，他们可以帮助你提高网站用户体验到一个新的层次，当前前提是你喜欢mootools。&lt;/p&gt;
&lt;p&gt;引文原文：&lt;a href=&quot;http://davidwalsh.name/7-mootools-plugins&quot;&gt;http://davidwalsh.name/7-mootools-plugins&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;AutoGrow&lt;/h2&gt;
&lt;p&gt;我很确信文本域和文本框都应该提供一个可以自动放大的效果，AutoGrow 可以让文本域的大小自动的渐变,这样你即便输入很多容内也可以在文本域内完整的看到所有内容。&lt;br /&gt;
&lt;a class=&quot;add&quot; href=&quot;http://bookballoon.com/index.php?option=com_content&amp;amp;view=article&amp;amp;id=39&quot;&gt;Download&lt;/a&gt; &amp;amp;&amp;amp; &lt;a class=&quot;example&quot; href=&quot;http://mccull.org/gary/autogrow/&quot;&gt;DEMO&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;image&quot; src=&quot;http://davidwalsh.name/dw-content/fancyform.jpg&quot; alt=&quot;Fancy Form&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;FancyForm&lt;/h2&gt;
&lt;p&gt;FancyForm 是checkbox增强插件，用来替换表单中奇丑的checkbox和radio，FancyForm 的样式完全由css控制。&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;add&quot; href=&quot;http://lipidity.com/fancy-form/&quot;&gt;Website &amp;amp; Download&lt;/a&gt; &lt;a class=&quot;article&quot; href=&quot;http://lipidity.com/fancy-form/#usage&quot;&gt;Documentation&lt;/a&gt; &lt;a class=&quot;example&quot; href=&quot;http://lipidity.com/fancy-form/#example&quot;&gt;Example Usage&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;image&quot; src=&quot;http://davidwalsh.name/dw-content/milkbox.jpg&quot; alt=&quot;Milkbox&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Milkbox&lt;/h2&gt;
&lt;p&gt;图片丰富的网站都少补了一个好的灯箱效果（更多的灯箱效果可以猛点这里：&lt;a href=&quot;http://jsssc.cn/30-useful-ajax-lightbox-and-modal-dialog-solutions/&quot;&gt;http://jsssc.cn/30-useful-ajax-lightbox-and-modal-dialog-solutions/&lt;/a&gt;）插件，Milkbox包含了实现所有灯箱效果的脚本，它可以轻松实现各种经典的渐变效果到页面元素上，经常用在flash视频，图片集，xml画廊。&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;add&quot; href=&quot;http://reghellin.com/milkbox/&quot;&gt;Website, Download, Documentation, &amp;amp; Example Usage&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Quickboxes&lt;/h2&gt;
&lt;p&gt;不要让用户一个亿个去点击很多的复选框，Quickboxes允许通过点击并拖动来同时选中多个复选框，只需点击其中一个然后拖动鼠标，有鼠标经过
的复选框都可以被选中（也可以设置成切换选中状态），有时候你的用户可能需要选中复选框中的一部分而已， Quickboxes可以帮你忙。&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;add&quot; href=&quot;http://davidwalsh.name/js&quot;&gt;Website &amp;amp; Download&lt;/a&gt; &lt;a class=&quot;article&quot; href=&quot;http://davidwalsh.name/js/quickboxes&quot;&gt;Documentation&lt;/a&gt; &lt;a class=&quot;example&quot; href=&quot;http://davidwalsh.name/dw-content/mootools-checkboxes.php&quot;&gt;Example Usage&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;SmoothScroll&lt;/h2&gt;
&lt;p&gt;SmoothScroll可以让页面缓缓地移动到指定的锚点，从而可以代替默认的跳动效果。&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;add&quot; href=&quot;http://mootools.net/more&quot;&gt;Website &amp;amp; Download&lt;/a&gt; &lt;a class=&quot;article&quot; href=&quot;http://mootools.net/docs/more/Fx/Fx.SmoothScroll&quot;&gt;Documentation&lt;/a&gt; &lt;a class=&quot;example&quot; href=&quot;http://davidwalsh.name/smooth-scroll-mootools&quot;&gt;Example Usage&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;image&quot; src=&quot;http://davidwalsh.name/dw-content/tooltip-example.jpg&quot; alt=&quot;MooTools Tooltip&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Tips&lt;/h2&gt;
&lt;p&gt;Tips是用来代替默认的提示title的效果，它帮你创建富有质感的提示框。&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;add&quot; href=&quot;http://mootools.net/more&quot;&gt;Website &amp;amp; Download&lt;/a&gt; &lt;a class=&quot;article&quot; href=&quot;http://mootools.net/docs/more/Interface/Tips&quot;&gt;Documentation&lt;/a&gt; &lt;a class=&quot;example&quot; href=&quot;http://davidwalsh.name/dw-content/custom-mootools-tooltips.php&quot;&gt;Example Usage&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;image&quot; src=&quot;http://davidwalsh.name/dw-content/list-table.jpg&quot; alt=&quot;Zebra Tables&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;ZebraTables&lt;/h2&gt;
&lt;p&gt;ZebraTables 帮你实现表格的隔行换色、单击变色、鼠标滑过变色效果。&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;add&quot; href=&quot;http://davidwalsh.name/js&quot;&gt;Website &amp;amp; Download&lt;/a&gt; &lt;a class=&quot;article&quot; href=&quot;http://davidwalsh.name/js/zebra-table&quot;&gt;Documentation&lt;/a&gt; &lt;a class=&quot;example&quot; href=&quot;http://davidwalsh.name/dw-content/zebra-class-2.php&quot;&gt;Example Usage&lt;/a&gt;&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/44011491.html&quot;&gt;JS实现select选择value值，赋值给input各项属性&lt;/a&gt; 2009-08-12&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/42092321.html&quot;&gt;连击党的噩梦！！&lt;/a&gt; 2009-07-09&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/39388407.html&quot;&gt;JS和CSS的一些小应用&lt;/a&gt; 2009-05-14&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/37333459.html&quot;&gt;JQuery实现&amp;lt;select&amp;gt;onchang事件触发展开一个div&lt;/a&gt; 2009-04-01&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/45034521.html&quot;&gt;mysqldumpslow分析mysql运行&lt;/a&gt; 2009-08-25&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbbayou.blogbus.com%2Flogs%2F48396516.html&amp;title=7%E4%B8%AA%E7%AE%80%E6%98%93%E7%BD%91%E9%A1%B5%E6%95%88%E6%9E%9Cmootools%E6%8F%92%E4%BB%B6&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/299147689/bbayou_blogbus_com/blogbus.com/s.gif?r=http://bbayou.blogbus.com/logs/48396516.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bbayou_blogbus_com/299147689/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bbayou_blogbus_com/299147689/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bbayou.blogbus.com/c/">未分类</category><pubDate>Wed, 14 Oct 2009 18:15:06 +0800</pubDate><guid isPermaLink="false">http://bbayou.blogbus.com/logs/48396516.html</guid><dc:creator>bbayou</dc:creator><fs:srclink>http://bbayou.blogbus.com/logs/48396516.html</fs:srclink><fs:srcfeed>http://bbayou.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bbayou_blogbus_com/~7058766/299147689/5166804</fs:itemid></item><item><title>mysql 关于索引</title><link atom:type="text/html">http://bbayou.blogbus.com/logs/47099486.html</link><author xmlns="http://www.w3.org/2005/Atom"><name>bbayou</name></author><id xmlns="http://www.w3.org/2005/Atom">http://bbayou.blogbus.com/logs/47099486.html</id><description>&lt;p&gt;MySQL索引 在数据库表中，对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表：&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE mytable(&lt;br /&gt;
&lt;br /&gt;
ID INT NOT NULL, &lt;br /&gt;
&lt;br /&gt;
username VARCHAR(16) NOT NULL&lt;br /&gt;
&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
我们随机向里面插入了10000条记录，其中有一条：5555, admin。&lt;br /&gt;
&lt;br /&gt;
在查找username=&quot;admin&quot;的记录 SELECT * FROM mytable WHERE
username='admin';时，如果在username上已经建立了索引，MySQL无须任何扫描，即准确可找到该记录。相反，MySQL会扫描
所有记录，即要查询10000条记录。&lt;br /&gt;
&lt;br /&gt;
索引分单列索引和组合索引。单列索引，即一个索引只包含单个列，一个表可以有多个单列索引，但这不是组合索引。组合索引，即一个索包含多个列。&lt;br /&gt;
&lt;br /&gt;
索引的类型包括：&lt;br /&gt;
&lt;br /&gt;
（1）普通索引&lt;br /&gt;
这是最基本的索引，它没有任何限制。它有以下几种创建方式：&lt;br /&gt;
&lt;br /&gt;
●&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;创建索引&lt;br /&gt;
&lt;br /&gt;
CREATE INDEX indexName ON mytable(username(length));&lt;br /&gt;
&lt;br /&gt;
如果是CHAR，VARCHAR类型，length可以小于字段实际长度；如果是BLOB和TEXT类型，必须指定 length，下同。&lt;br /&gt;
&lt;br /&gt;
●&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;修改表结构&lt;br /&gt;
&lt;br /&gt;
ALTER mytable ADD INDEX [indexName] ON (username(length))&lt;br /&gt;
&lt;br /&gt;
●&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;创建表的时候直接指定&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE mytable(&lt;br /&gt;
&lt;br /&gt;
ID INT NOT NULL, &lt;br /&gt;
&lt;br /&gt;
username VARCHAR(16) NOT NULL,&lt;br /&gt;
&lt;br /&gt;
INDEX [indexName] (username(length))&lt;br /&gt;
&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
删除索引的语法：&lt;br /&gt;
&lt;br /&gt;
DROP INDEX [indexName] ON mytable;&lt;br /&gt;
&lt;br /&gt;
（2）唯一索引&lt;br /&gt;
它与前面的普通索引类似，不同的就是：索引列的值必须唯一，但允许有空值。如果是组合索引，则列值的组合必须唯一。它有以下几种创建方式：&lt;br /&gt;
&lt;br /&gt;
●&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;创建索引&lt;br /&gt;
&lt;br /&gt;
CREATE UNIQUE INDEX indexName ON mytable(username(length))&lt;br /&gt;
&lt;br /&gt;
●&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;修改表结构&lt;br /&gt;
&lt;br /&gt;
ALTER mytable ADD UNIQUE [indexName] ON (username(length))&lt;br /&gt;
&lt;br /&gt;
●&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;创建表的时候直接指定&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE mytable(&lt;br /&gt;
&lt;br /&gt;
ID INT NOT NULL, &lt;br /&gt;
&lt;br /&gt;
username VARCHAR(16) NOT NULL,&lt;br /&gt;
&lt;br /&gt;
UNIQUE [indexName] (username(length))&lt;br /&gt;
&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
（3）主键索引&lt;br /&gt;
它是一种特殊的唯一索引，不允许有空值。一般是在建表的时候同时创建主键索引：&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE mytable(&lt;br /&gt;
&lt;br /&gt;
ID INT NOT NULL, &lt;br /&gt;
&lt;br /&gt;
username VARCHAR(16) NOT NULL,&lt;br /&gt;
&lt;br /&gt;
PRIMARY KEY(ID)&lt;br /&gt;
&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
当然也可以用 ALTER 命令。记住：一个表只能有一个主键。&lt;br /&gt;
&lt;br /&gt;
（4）组合索引&lt;br /&gt;
为了形象地对比单列索引和组合索引，为表添加多个字段：&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE mytable(&lt;br /&gt;
&lt;br /&gt;
ID INT NOT NULL, &lt;br /&gt;
&lt;br /&gt;
username VARCHAR(16) NOT NULL,&lt;br /&gt;
&lt;br /&gt;
city VARCHAR(50) NOT NULL,&lt;br /&gt;
&lt;br /&gt;
age INT NOT NULL&lt;br /&gt;
&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
为了进一步榨取MySQL的效率，就要考虑建立组合索引。就是将 name, city, age建到一个索引里：&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age);&lt;br /&gt;
&lt;br /&gt;
建表时，usernname长度为 16，这里用 10。这是因为一般情况下名字的长度不会超过10，这样会加速索引查询速度，还会减少索引文件的大小，提高INSERT的更新速度。&lt;br /&gt;
&lt;br /&gt;
如果分别在 usernname，city，age上建立单列索引，让该表有3个单列索引，查询时和上述的组合索引效率也会大不一样，远远低于我们的组合索引。虽然此时有了三个索引，但MySQL只能用到其中的那个它认为似乎是最有效率的单列索引。&lt;br /&gt;
&lt;br /&gt;
建立这样的组合索引，其实是相当于分别建立了下面三组组合索引：&lt;br /&gt;
&lt;br /&gt;
usernname,city,age&lt;br /&gt;
&lt;br /&gt;
usernname,city&lt;br /&gt;
&lt;br /&gt;
usernname&lt;br /&gt;
&lt;br /&gt;
为什么没有 city，age这样的组合索引呢？这是因为MySQL组合索引&amp;ldquo;最左前缀&amp;rdquo;的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引，下面的几个SQL就会用到这个组合索引：&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM mytable WHREE username=&quot;admin&quot; AND city=&quot;郑州&quot;&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM mytable WHREE username=&quot;admin&quot;&lt;br /&gt;
&lt;br /&gt;
而下面几个则不会用到：&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM mytable WHREE age=20 AND city=&quot;郑州&quot;&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM mytable WHREE city=&quot;郑州&quot;&lt;br /&gt;
&lt;br /&gt;
（5）建立索引的时机&lt;br /&gt;
到这里我们已经学会了建立索引，那么我们需要在什么情况下建立索引呢？一般来说，在WHERE和JOIN中出现的列需要建立索引，但也不完全如此，因为
MySQL只对&amp;lt;，&amp;lt;=，=，&amp;gt;，&amp;gt;=，BETWEEN，IN，以及某些时候的LIKE才会使用索引。例如：&lt;br /&gt;
&lt;br /&gt;
SELECT t.Name&lt;br /&gt;
&lt;br /&gt;
FROM mytable t LEFT JOIN mytable m &lt;br /&gt;
&lt;br /&gt;
ON t.Name=m.username WHERE m.age=20 AND m.city='郑州'&lt;br /&gt;
&lt;br /&gt;
此时就需要对city和age建立索引，由于mytable表的userame也出现在了JOIN子句中，也有对它建立索引的必要。&lt;br /&gt;
&lt;br /&gt;
刚才提到只有某些时候的LIKE才需建立索引。因为在以通配符%和_开头作查询时，MySQL不会使用索引。例如下句会使用索引：&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM mytable WHERE username like'admin%'&lt;br /&gt;
&lt;br /&gt;
而下句就不会使用：&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM mytable WHEREt Name like'%admin'&lt;br /&gt;
&lt;br /&gt;
因此，在使用LIKE时应注意以上的区别。&lt;br /&gt;
&lt;br /&gt;
（6）索引的不足之处&lt;br /&gt;
上面都在说使用索引的好处，但过多的使用索引将会造成滥用。因此索引也会有它的缺点：&lt;br /&gt;
&lt;br /&gt;
●&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;虽然索引大大提高了查询速度，同时却会降低更新表的速度，如对表进行INSERT、UPDATE和DELETE。因为更新表时，MySQL不仅要保存数据，还要保存一下索引文件。&lt;br /&gt;
&lt;br /&gt;
●&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重，但如果你在一个大表上创建了多种组合索引，索引文件的会膨胀很快。&lt;br /&gt;
&lt;br /&gt;
索引只是提高效率的一个因素，如果你的MySQL有大数据量的表，就需要花时间研究建立最优秀的索引，或优化查询语句。&lt;br /&gt;
&lt;br /&gt;
（7）使用索引的注意事项&lt;br /&gt;
使用索引时，有以下一些技巧和注意事项：&lt;br /&gt;
&lt;br /&gt;
●&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;索引不会包含有NULL值的列&lt;br /&gt;
&lt;br /&gt;
只要列中包含有NULL值都将不会被包含在索引中，复合索引中只要有一列含有NULL值，那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。&lt;br /&gt;
&lt;br /&gt;
●&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;使用短索引&lt;br /&gt;
&lt;br /&gt;
对串列进行索引，如果可能应该指定一个前缀长度。例如，如果有一个CHAR(255)的列，如果在前10个或20个字符内，多数值是惟一的，那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。&lt;br /&gt;
&lt;br /&gt;
●&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;索引列排序&lt;br /&gt;
&lt;br /&gt;
MySQL查询只使用一个索引，因此如果where子句中已经使用了索引的话，那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作；尽量不要包含多个列的排序，如果需要最好给这些列创建复合索引。&lt;br /&gt;
&lt;br /&gt;
●&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;like语句操作&lt;br /&gt;
&lt;br /&gt;
一般情况下不鼓励使用like操作，如果非使用不可，如何使用也是一个问题。like &amp;ldquo;%aaa%&amp;rdquo; 不会使用索引而like &amp;ldquo;aaa%&amp;rdquo;可以使用索引。&lt;br /&gt;
&lt;br /&gt;
●&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;不要在列上进行运算&lt;br /&gt;
&lt;br /&gt;
select * from users where
YEAR(adddate)&amp;lt;2007;将在每个行上进行运算，这将导致索引失效而进行全表扫描，因此我们可以改成select * from
users where adddate&amp;lt;&amp;lsquo;2007-01-01&amp;rsquo;;&lt;br /&gt;
&lt;br /&gt;
●&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;不使用NOT IN和&amp;lt;&amp;gt;操作&lt;br /&gt;
&lt;br /&gt;
NOT IN和&amp;lt;&amp;gt;操作都不会使用索引将进行全表扫描。NOT IN可以使用NOT EXISTS代替，id&amp;lt;&amp;gt;3则可以使用id&amp;gt;3 or id&amp;lt;3来代替。&lt;/p&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/45034521.html&quot;&gt;mysqldumpslow分析mysql运行&lt;/a&gt; 2009-08-25&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/44782777.html&quot;&gt;中文全文搜索解决方案sphinx+mysql+mmseg，安装，配置，API调用&lt;/a&gt; 2009-08-21&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/44777957.html&quot;&gt;linux 安装Mysql&lt;/a&gt; 2009-08-21&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/44068969.html&quot;&gt;分表的操作&lt;/a&gt; 2009-08-13&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/42439527.html&quot;&gt;Mysql用户访问权限设置&lt;/a&gt; 2009-07-16&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbbayou.blogbus.com%2Flogs%2F47099486.html&amp;title=mysql+%E5%85%B3%E4%BA%8E%E7%B4%A2%E5%BC%95&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/299147690/bbayou_blogbus_com/blogbus.com/s.gif?r=http://bbayou.blogbus.com/logs/47099486.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bbayou_blogbus_com/299147690/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bbayou_blogbus_com/299147690/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bbayou.blogbus.com/c/">未分类</category><pubDate>Fri, 25 Sep 2009 10:08:34 +0800</pubDate><guid isPermaLink="false">http://bbayou.blogbus.com/logs/47099486.html</guid><dc:creator>bbayou</dc:creator><fs:srclink>http://bbayou.blogbus.com/logs/47099486.html</fs:srclink><fs:srcfeed>http://bbayou.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bbayou_blogbus_com/~7058766/299147690/5166804</fs:itemid></item><item><title>用nginx的反向代理做负载均衡</title><link atom:type="text/html">http://bbayou.blogbus.com/logs/46926694.html</link><author xmlns="http://www.w3.org/2005/Atom"><name>bbayou</name></author><id xmlns="http://www.w3.org/2005/Atom">http://bbayou.blogbus.com/logs/46926694.html</id><description>&lt;div class=&quot;post-content&quot;&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #888888;&quot;&gt;&lt;strong&gt;1.&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ngnix&lt;/span&gt;&lt;/strong&gt;之所以比&lt;strong&gt;&lt;span style=&quot;color: #000000;&quot;&gt;apache&lt;/span&gt;&lt;/strong&gt;高效，得益于Nginx使用了最新的epoll（Linux
2.6内核）和kqueue（freebsd）网络I/O模型，而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的
Squid、Memcached都采用的是epoll网络I/O模型。也就是说，在高并发服务器中，&lt;span style=&quot;color: #ff0000;&quot;&gt;&lt;strong&gt;轮询（round-robin）&lt;/strong&gt;&lt;/span&gt;I/O是最耗时间的操作。&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;background-color: #808080;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 反向代理工作原理&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;反向代理服务器位于本地WEB服务器和Internet之间.&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;当用户浏览器发出一个HTTP请求时，通过域名解析将请求定向到反向代理服务器（如果要实现多个WEB服务器的反向代理，需要将多个WEB服务
器的域名都指向反向代理服务器）。由反向代理服务器处理器请求。反向代理一般只缓存可缓冲的数据（比如html网页和图片等），而一些CGI脚本程序或者
ASP之类的程序不缓存。它根据从WEB服务器返回的HTTP头标记来缓冲静态页面。有四个最重要HTTP头标记：&lt;/div&gt;
&lt;p&gt;Last-Modified: 告诉反向代理页面什么时间被修改 &lt;br /&gt;
Expires: 告诉反向代理页面什么时间应该从缓冲区中删除 &lt;br /&gt;
Cache-Control: 告诉反向代理页面是否应该被缓冲 &lt;br /&gt;
Pragma: 告诉反向代理页面是否应该被缓冲. &lt;br /&gt;
例如：在默认情况下，ASP页面返回&amp;rdquo; Cache-control: private.&amp;rdquo; ，所以ASP页面时不会在反向代理服务器缓存的。&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;background-color: #808080;&quot;&gt;3.&lt;/span&gt; ngnix&lt;/strong&gt;最常见的用法之一就是作为&lt;span style=&quot;color: #ff0000;&quot;&gt;&lt;strong&gt;反向代理使用&lt;/strong&gt;&lt;/span&gt;，安装和配置相当简便，对于负载均衡它使用的是最简单的轮询算法（round-robin），不过效果还是很不错的。&lt;/p&gt;
&lt;p&gt;要用nginx做负载均衡的话，首先要在配置文件里面定义一组用来负载均衡的后端服务器（backend servers），例如：&lt;br /&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;upstream backend {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;server 192.168.1.11;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;server 192.168.1.12;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;server 192.168.1.13;&lt;br /&gt;
}&lt;/span&gt;&lt;br /&gt;
那个server指令的语法是 server name [parameters]，这里的name是服务器名，可以是域名、ip或者unix socket，也可以指定端口，例如：&lt;br /&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;server 192.168.1.11:8080;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;server指令可用的参数有：&lt;/p&gt;
&lt;p&gt;weight &amp;mdash;&amp;mdash; 设置服务器的权重，默认值是1，权重值越大那么该服务器被访问到的几率就越大，例如 &lt;span style=&quot;color: #008000;&quot;&gt;server 192.168.1.11 weight=5;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;max_fails和fail_timeout &amp;mdash;&amp;mdash;
这俩是关联的，如果某台服务器在fail_timeout时间内出现了max_fails次连接失败，那么nginx就会认为那个服务器已经挂掉，从而在
fail_timeout时间内不再去查询它，fail_timeout的默认值是10s，max_fails的默认值是1（这意味着一发生错误就认为服
务器挂掉），如果把max_fails设为0则表示把这个检查取消。&lt;br /&gt;
举个例子：&lt;span style=&quot;color: #008000;&quot;&gt;server 192.168.1.11 max_fails=3 fail_timeout=30s; &lt;/span&gt;这表示，如果服务器192.168.1.11在30秒内出现了3次错误，那么就认为这个服务器工作不正常，从而在接下来的30秒内nginx不再去访问这个服务器。&lt;br /&gt;
&lt;br /&gt;
down &amp;mdash;&amp;mdash; 表示该服务器已经停用，例如&lt;span style=&quot;color: #008000;&quot;&gt;server 192.168.1.11 down;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;backup &amp;mdash;&amp;mdash; 表示该服务器是备用服务器，只有其它后端服务器都挂了或者很忙才会访问到。&lt;/p&gt;
&lt;p&gt;关于upstream的更多信息请参考 &lt;a href=&quot;http://wiki.nginx.org/NginxHttpUpstreamModule&quot; target=&quot;_blank&quot;&gt;http://wiki.nginx.org/NginxHttpUpstreamModule&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;定义好了一组后端服务器，就该来设置nginx的反向代理配置了，例如：&lt;br /&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;server {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;listen 80;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;server_name www.domain.com;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;location / {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_pass http://backend;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;关于nginx的proxy有很多配置参数的，具体可以参考 &lt;a href=&quot;http://wiki.nginx.org/NginxHttpProxyModule&quot; target=&quot;_blank&quot;&gt;http://wiki.nginx.org/NginxHttpProxyModule&lt;/a&gt;。&lt;br /&gt;
这里有个配置可能比较有用：&lt;br /&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;proxy_set_header Host $host;&lt;/span&gt;&lt;br /&gt;
这表示传递给后端服务器的头部信息里面的Host信息保持跟客户端传过来的一致，如果不设置那么默认传给后端服务器的值是$proxy_host，所以不
设置可能会有问题，例如：后端服务器会处理两个域名的请求，例如www.a.com和www.b.com，这时如果nginx不把客户端的请求信息中的
host信息传给后端服务器，那么后端服务器完全不知道到底这个客户是想访问域名a还是域名b，从而导致传输数据可能不正确。&lt;br /&gt;
如果你想把客户端的ip也传给后端服务器的话，可以用这个设置：&lt;br /&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;proxy_set_header X-Real-IP $remote_addr;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;post-content&quot;&gt;&lt;strong&gt;&lt;span style=&quot;background-color: #888888;&quot;&gt;4.&lt;/span&gt; 负载均衡&lt;/strong&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;post-content&quot;&gt;参考：http://blog.s135.com/nginx_php_v5/&lt;br /&gt;&lt;/div&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/45032192.html&quot;&gt;Nginx中文参考资料！！&lt;/a&gt; 2009-08-25&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/46388476.html&quot;&gt;http_load 一个httpd 压力测试工具&lt;/a&gt; 2009-09-14&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/44782777.html&quot;&gt;中文全文搜索解决方案sphinx+mysql+mmseg，安装，配置，API调用&lt;/a&gt; 2009-08-21&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/38484180.html&quot;&gt;分布式服务器，查看各台服务器网页内容&lt;/a&gt; 2009-04-25&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;/logs/37045617.html&quot;&gt;如何提高mysql load data infile的速度&lt;/a&gt; 2009-03-26&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbbayou.blogbus.com%2Flogs%2F46926694.html&amp;title=%E7%94%A8nginx%E7%9A%84%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E5%81%9A%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/299147691/bbayou_blogbus_com/blogbus.com/s.gif?r=http://bbayou.blogbus.com/logs/46926694.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bbayou_blogbus_com/299147691/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bbayou_blogbus_com/299147691/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bbayou.blogbus.com/c/">未分类</category><pubDate>Tue, 22 Sep 2009 11:09:43 +0800</pubDate><guid isPermaLink="false">http://bbayou.blogbus.com/logs/46926694.html</guid><dc:creator>bbayou</dc:creator><fs:srclink>http://bbayou.blogbus.com/logs/46926694.html</fs:srclink><fs:srcfeed>http://bbayou.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bbayou_blogbus_com/~7058766/299147691/5166804</fs:itemid></item><item><title>http_load 一个httpd 压力测试工具</title><link atom:type="text/html">http://bbayou.blogbus.com/logs/46388476.html</link><author xmlns="http://www.w3.org/2005/Atom"><name>bbayou</name></author><id xmlns="http://www.w3.org/2005/Atom">http://bbayou.blogbus.com/logs/46388476.html</id><description>&lt;p&gt;到http://www.acme.com/software/http_load/ 下载http_load ，安装也很简单直接make;make instlall 就行。&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;http_load&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;的标准的两个例子是：&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;codeText&quot;&gt;
&lt;ol class=&quot;dp-c&quot;&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span&gt;http_load&amp;nbsp;-parallel&amp;nbsp;5&amp;nbsp;-fetches&amp;nbsp;1000&amp;nbsp;urls.txt&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;http_load&amp;nbsp;-rate&amp;nbsp;2&amp;nbsp;-seconds&amp;nbsp;300&amp;nbsp;urls.txt&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;例子只是个参考，参数其实可以自由组合，参数之间的选择并没有什么限制。比如你写成&lt;span style=&quot;font-size: 10pt;&quot;&gt;http_load -parallel 5 -seconds 300 urls.txt&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;也是可以的。我们把参数给大家简单说明一下。&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;-parallel &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;简写&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;-p &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;：&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;含义是并发的用户进程数。&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;-fetches &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;简写&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;-f &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;：&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;含义是总计的访问次数&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;-rate&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;简写&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;-p &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;：&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;含义是每秒的访问频率&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;-seconds&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;简写&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;-s &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;：&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;含义是总计的访问时间&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;text-indent: 20pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;
urls.txt 是一个url 列表，每个url 单独的一行。当然也可以直接跟一个url 而不是url 列表文件。&lt;br /&gt;
实例：&lt;br /&gt;
&lt;div class=&quot;codeText&quot;&gt;
&lt;ol class=&quot;dp-xml&quot;&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span&gt;http_load&amp;nbsp;-rate&amp;nbsp;5&amp;nbsp;-seconds&amp;nbsp;10&amp;nbsp;urls&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;49&amp;nbsp;fetches,&amp;nbsp;2&amp;nbsp;max&amp;nbsp;parallel,&amp;nbsp;289884&amp;nbsp;bytes,&amp;nbsp;in&amp;nbsp;10.0148&amp;nbsp;seconds&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;5916&amp;nbsp;mean&amp;nbsp;bytes/connection&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;4.89274&amp;nbsp;fetches/sec,&amp;nbsp;28945.5&amp;nbsp;bytes/sec&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;msecs/connect:&amp;nbsp;28.8932&amp;nbsp;mean,&amp;nbsp;44.243&amp;nbsp;max,&amp;nbsp;24.488&amp;nbsp;min&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;msecs/first-response:&amp;nbsp;63.5362&amp;nbsp;mean,&amp;nbsp;81.624&amp;nbsp;max,&amp;nbsp;57.803&amp;nbsp;min&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;HTTP&amp;nbsp;response&amp;nbsp;codes:&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;code&amp;nbsp;200&amp;nbsp;--&amp;nbsp;49&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&amp;nbsp;&lt;/span&gt;分析：&lt;br /&gt;
1．49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds&lt;br /&gt;
说明在上面的测试中运行了49个请求，最大的并发进程数是2，总计传输的数据是289884bytes，运行的时间是10.0148秒&lt;br /&gt;
&lt;br /&gt;
2．5916 mean bytes/connection&lt;br /&gt;
说明每一连接平均传输的数据量289884/49=5916&lt;br /&gt;
&lt;br /&gt;
3．4.89274 fetches/sec, 28945.5 bytes/sec&lt;br /&gt;
说明每秒的响应请求为4.89274，每秒传递的数据为28945.5 bytes/sec&lt;br /&gt;
&lt;br /&gt;
4．msecs/connect: 28.8932 mean, 44.243 max, 24.488 min&lt;br /&gt;
说明每连接的平均响应时间是28.8932 msecs，最大的响应时间44.243 msecs，最小的响应时间24.488 msecs&lt;br /&gt;
&lt;br /&gt;
5．msecs/first-response: 63.5362 mean, 81.624 max, 57.803 min&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;6、HTTP response codes: code 200 -- 49&lt;br /&gt;
说明打开响应页面的类型，如果403的类型过多，那可能要注意是否系统遇到了瓶颈。&lt;br /&gt;
特殊说明：这里，我们一般会关注到的指标是fetches/sec、msecs/connect&lt;br /&gt;
他们分别对应的常用性能指标参数Qpt-每秒响应用户数和response time，每连接响应用户时间。测试的结果主要也是看这两个值。当然仅有这两个指标并不能完成对性能的分析，我们还需要对服务器的cpu、men进行分析，才能得出结论 &lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;!--sp--&gt;&lt;div class=&quot;relpost&quot;&gt;&lt;br/&gt;&lt;h3&gt;随机文章：&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/44782777.html&quot;&gt;中文全文搜索解决方案sphinx+mysql+mmseg，安装，配置，API调用&lt;/a&gt; 2009-08-21&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/35752550.html&quot;&gt;解决Apache2+PHP上传文件大小限制的问题&lt;/a&gt; 2009-02-26&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/51600631.html&quot;&gt;一些PHP的Tips，面试会遇到&lt;/a&gt; 2009-11-17&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/44777957.html&quot;&gt;linux 安装Mysql&lt;/a&gt; 2009-08-21&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://bbayou.blogbus.com/logs/44675013.html&quot;&gt;php的调试工具XHProf的安装，运用&lt;/a&gt; 2009-08-20&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;sysmsg&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.blogbus.com&quot; target=&quot;_blank&quot;&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;addfav&quot;&gt;收藏到：&lt;span class= &quot;delicious&quot;&gt;&lt;a href=&quot;http://delicious.com/save?url=http%3A%2F%2Fbbayou.blogbus.com%2Flogs%2F46388476.html&amp;title=http_load+%E4%B8%80%E4%B8%AAhttpd+%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7&quot;&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/299147692/bbayou_blogbus_com/blogbus.com/s.gif?r=http://bbayou.blogbus.com/logs/46388476.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/blogbus.com/bbayou_blogbus_com/299147692/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/blogbus.com/bbayou_blogbus_com/299147692/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://bbayou.blogbus.com/c/">未分类</category><pubDate>Mon, 14 Sep 2009 10:26:09 +0800</pubDate><guid isPermaLink="false">http://bbayou.blogbus.com/logs/46388476.html</guid><dc:creator>bbayou</dc:creator><fs:srclink>http://bbayou.blogbus.com/logs/46388476.html</fs:srclink><fs:srcfeed>http://bbayou.blogbus.com/atom.xml</fs:srcfeed><fs:itemid>blogbus.com/bbayou_blogbus_com/~7058766/299147692/5166804</fs:itemid></item></channel></rss>