<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>蜗牛的牛窝</title>
	<atom:link href="http://www.woniu.us/feed" rel="self" type="application/rss+xml" />
	<link>http://www.woniu.us</link>
	<description>php开发、PHP程序分析、Python程序设计、心情随笔</description>
	<lastBuildDate>Mon, 09 Aug 2010 13:44:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>lamper第二期聚会&#8211;WEB缓存加速&#8211;摘要+PPT</title>
		<link>http://www.woniu.us/optimization/371.html</link>
		<comments>http://www.woniu.us/optimization/371.html#comments</comments>
		<pubDate>Sun, 08 Aug 2010 06:55:20 +0000</pubDate>
		<dc:creator>蜗牛</dc:creator>
				<category><![CDATA[优化]]></category>
		<category><![CDATA[缓存]]></category>

		<guid isPermaLink="false">http://www.woniu.us/?p=371</guid>
		<description><![CDATA[非常成功的一次聚会，期间非常多的大牛都交流了各自的心得，期间的一些知识避免以后忘记，暂时做个记录在这里。]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.woniu.us/wp-content/uploads/2010/08/69660c13h8d3d06f609fe690.jpg"><img src="http://www.woniu.us/wp-content/uploads/2010/08/69660c13h8d3d06f609fe690.jpg" alt="" title="69660c13h8d3d06f609fe&amp;690" width="337" height="225" class="alignnone size-full wp-image-372" /></a></p>
<p>非常成功的一次聚会，期间非常多的大牛都交流了各自的心得，期间的一些知识避免以后忘记，暂时做个记录在这里。</p>
<p>PPT也提供下载了 <a href='http://www.woniu.us/wp-content/uploads/2010/08/2.ppt'>WEB缓存加速PPT</a><br />
<strong>前端</strong></p>
<p>浏览器缓存</p>
<p>浏览器与服务器之间传输GZIP</p>
<p>HTML静态化</p>
<p>图片服务器分离</p>
<p><strong>后端</strong></p>
<p>数据库集群</p>
<p>缓存</p>
<p>缓存常规简单做法：（1个进消息队列写数据库用来作长久备份,1个直接写进Memcached进行缓存）</p>
<p>为什么要使用ADODB这类数据中间层：是为了方便控制数据库的主从</p>
<p>最好在Memcached的前面再加一个SERVER,这个SERVER负责调度</p>
<p><strong>缓存的属性</strong><br />
存储介质（内存，磁盘）<br />
成本(开发，部署，硬件)，<br />
效率：SET效率，GET效率，序列算法，哈希算法，分布式算法<br />
命中率：（从缓存中返回正确数据的次数/总请求）<br />
容量：超过该值，启用一定的策略：转移到磁盘，远端，清空部分</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woniu.us/optimization/371.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>wordpress登陆不上后台的问题</title>
		<link>http://www.woniu.us/other/369.html</link>
		<comments>http://www.woniu.us/other/369.html#comments</comments>
		<pubDate>Sun, 08 Aug 2010 03:12:27 +0000</pubDate>
		<dc:creator>蜗牛</dc:creator>
				<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.woniu.us/?p=369</guid>
		<description><![CDATA[最近一直没更新文章，一个原因是太忙了，另一个事情是家里一直登陆不上wp的后台，登陆之后又跳转到登陆页面。估计是路由器的问题，可惜路由器是另一个人在管，我没权限。于是琢磨着肯定是COOKIE设置不上]]></description>
			<content:encoded><![CDATA[<p>最近一直没更新文章，一个原因是太忙了，另一个事情是家里一直登陆不上wp的后台，登陆之后又跳转到登陆页面。估计是路由器的问题，可惜路由器是另一个人在管，我没权限。于是琢磨着肯定是COOKIE设置不上，于是看了一下 /wp-includes/pluggable.php文件里的wp_set_auth_cookie函数，看到这样一行</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://www.php.net/setcookie"><span style="color: #990000;">setcookie</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$auth_cookie_name</span><span style="color: #339933;">,</span> <span style="color: #000088;">$auth_cookie</span><span style="color: #339933;">,</span> <span style="color: #000088;">$expire</span><span style="color: #339933;">,</span> ADMIN_COOKIE_PATH<span style="color: #339933;">,</span> COOKIE_DOMAIN<span style="color: #339933;">,</span> <span style="color: #000088;">$secure</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>这个肯定是一个单独的作用路径ADMIN_COOKIE_PATH，于是比对着下面的写法，直接改成</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; <a href="http://www.php.net/setcookie"><span style="color: #990000;">setcookie</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$auth_cookie_name</span><span style="color: #339933;">,</span> <span style="color: #000088;">$auth_cookie</span><span style="color: #339933;">,</span> <span style="color: #000088;">$expire</span><span style="color: #339933;">,</span> &nbsp;COOKIEPATH<span style="color: #339933;">,</span> COOKIE_DOMAIN<span style="color: #339933;">,</span> <span style="color: #000088;">$secure</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>再次登陆发现神奇得能登陆上了！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woniu.us/other/369.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP处理excel乱码问题</title>
		<link>http://www.woniu.us/php_basic/367.html</link>
		<comments>http://www.woniu.us/php_basic/367.html#comments</comments>
		<pubDate>Tue, 06 Jul 2010 04:57:45 +0000</pubDate>
		<dc:creator>蜗牛</dc:creator>
				<category><![CDATA[PHP基础知识]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php乱码]]></category>
		<category><![CDATA[php编码]]></category>

		<guid isPermaLink="false">http://www.woniu.us/?p=367</guid>
		<description><![CDATA[这两天处理csv文件的乱码问题都给整疯了，到网上搜了几圈，基本上都是胡扯瞎蒙的。有说将utf-8转换为gbk的，有说将utf-8转换为ascii 的，也有说将unnicode转换为utf-8的。结果害我浪费 了大量光阴]]></description>
			<content:encoded><![CDATA[<p>这两天处理csv文件的乱码问题都给整疯了，到网上搜了几圈，基本上都是胡扯瞎蒙的。有说将utf-8转换为gbk的，有说将utf-8转换为ascii的，也有说将unnicode转换为utf-8的。结果害我浪费 了大量光阴。</p>
<p>于是只好靠自己了，用editplus打开cvs文件，看到的是unicode编码，用iconv(&#8216;unicode&#8217;,'UTF-8&#8242;, $content); 还是不管用，于是索性用file_get_contents读取出cvs文件并输出，然后看到是乱码，于是在浏览器上不断的改变编码，终于看到了正确的汉字了，原来excel用的是UTF-16le编码。于是用iconv(&#8216;UTF-16le&#8217;,'UTF-8&#8242;, $content); 搞定了。</p>
<p>当然如果你的程序编码不是utf-8的 替换成相应的编码就行了，同理要生成cvs文件，也将编码转换为UTF-16le就行了</p>
<p><strong>最重要的是：excel文档的编码是UTF-16le格式的</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.woniu.us/php_basic/367.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>把孩子培养成普通人</title>
		<link>http://www.woniu.us/other/363.html</link>
		<comments>http://www.woniu.us/other/363.html#comments</comments>
		<pubDate>Thu, 01 Jul 2010 05:54:54 +0000</pubDate>
		<dc:creator>蜗牛</dc:creator>
				<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[心情]]></category>

		<guid isPermaLink="false">http://www.woniu.us/?p=363</guid>
		<description><![CDATA[在这个物欲横流的社会，很多父母都希望子女成龙成凤，却忽略了孩子真正需要什么。这个系列图片让我感触颇深]]></description>
			<content:encoded><![CDATA[<p>在这个物欲横流的社会，很多父母都希望子女成龙成凤，却忽略了孩子真正需要什么。这个系列图片让我感触颇深</p>
<p><a href="http://www.woniu.us/wp-content/uploads/2010/07/未命名.jpg"><img class="alignnone size-full wp-image-364" title="未命名" src="http://www.woniu.us/wp-content/uploads/2010/07/未命名.jpg" alt="" width="400" height="5770" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.woniu.us/other/363.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP操作MongoDB简明教程</title>
		<link>http://www.woniu.us/nosql/359.html</link>
		<comments>http://www.woniu.us/nosql/359.html#comments</comments>
		<pubDate>Wed, 30 Jun 2010 03:35:17 +0000</pubDate>
		<dc:creator>蜗牛</dc:creator>
				<category><![CDATA[Nosql]]></category>
		<category><![CDATA[MongoDB]]></category>

		<guid isPermaLink="false">http://www.woniu.us/?p=359</guid>
		<description><![CDATA[MongoDB是最近比较流行的NoSQL数据库，网络上关于PHP操作MongoDB的资料太少了，大部分都是英文文档，于是蜗牛我用蹩脚的英语为大家翻译一下来自PHP官方的文档，水平有限请多多见谅]]></description>
			<content:encoded><![CDATA[<p><strong>本教程[翻译自PHP官方手册]</strong></p>
<p>MongoDB是最近比较流行的NoSQL数据库，网络上关于PHP操作MongoDB的资料太少了，大部分都是英文文档，于是蜗牛我用蹩脚的英语为大家翻译一下来自PHP官方的文档，水平有限请多多见谅</p>
<p><strong>链接数据库</strong><br />
使用下面的代码创建一个数据库链接</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #000088;">$connection</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Mongo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//链接到 localhost:27017</span><br />
<span style="color: #000088;">$connection</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Mongo<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;example.com&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//链接到远程主机(默认端口)</span><br />
<span style="color: #000088;">$connection</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Mongo<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;example.com:65432&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//链接到远程主机的自定义的端口</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>现在你可以使用$connection链接来操作数据库了</p>
<p><strong>选择数据库</strong><br />
使用下面的代码来选择一个数据库</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #000088;">$db</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$connection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dbname</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>这里的数据库并不一定是一个已经存在的数据库，如果所选择的数据库不存在，则会新建一个数据库，所以在选择数据库的时候，注意一定要填上正确的数据库名<br />
如果拼写错误的话，很有可能会新建一个数据库</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #000088;">$db</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$connection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">mybiglongdbname</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">//做一些事情</span><br />
<span style="color: #000088;">$db</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$connection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">mybiglongdbnme</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">//现在会连上一个新的数据库</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p><strong>获取一个集合</strong><br />
获取一个集合跟选择数据库拥有相同的语法格式</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #000088;">$db</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$connection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">baz</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//选择数据库</span><br />
<span style="color: #000088;">$collection</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">foobar</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//选择foobar集合</span><br />
<span style="color: #666666; font-style: italic;">//或者使用更简洁的方式</span><br />
<span style="color: #000088;">$collection</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$connection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">baz</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">foobar</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p><strong>插入一个文档</strong><br />
多维数组是可以被储存到数据库中的基本单元<br />
一个随机的文档可能是这样<br />
&lt;?php</p>
<p>$doc = array(<br />
 &#8221;name&#8221; =&gt; &#8220;MongoDB&#8221;,<br />
    &#8220;type&#8221; =&gt; &#8220;database&#8221;,<br />
    &#8220;count&#8221; =&gt; 1,<br />
    &#8220;info&#8221; =&gt; (object)array( &#8220;x&#8221; =&gt; 203,<br />
    &#8220;y&#8221; =&gt; 102),<br />
    &#8220;versions&#8221; =&gt; array(&#8220;0.9.7&#8243;, &#8220;0.9.8&#8243;, &#8220;0.9.9&#8243;)<br />
);<br />
?&gt;<br />
注意：你可以嵌套数组与对象，对象与文档在mongodb中几乎是一样的，你可以使用$doc调用一个文档或对象，但是info字段总是一个对象而不是一个文档，<br />
本约束适用于所有文档</p>
<p>使用MongoCollection::insert()插入一个文档<br />
&lt;?php<br />
$m = new Mongo();<br />
$collection = $m-&gt;foo-&gt;bar;<br />
$collection-&gt;insert($doc);<br />
?&gt; </p>
<p>使用MongoCollection::findOne()查询文档<br />
为了证明上面那段代码的数据已经插入到数据库里了，我们进行简单的 findOne()操作以得到集合中的第一个文档数据，这种方法只返回一个文档数据，<br />
这种方法适用于在你的查询语句的时候只匹配一个文档或者你只关心第一条数据</p>
<p>&lt;?php<br />
$obj = $collection-&gt;findOne();<br />
var_dump( $obj );<br />
?&gt;<br />
你会看到下列结果<br />
array(5) {<br />
  ["_id"]=&gt;<br />
  object(MongoId)#6 (0) {<br />
  }<br />
  ["name"]<br />
  string(7) &#8220;MongoDB&#8221;<br />
  ["type"]=&gt;<br />
  string(8) &#8220;database&#8221;<br />
  ["count"]=&gt;<br />
  int(1)<br />
  ["info"]=&gt;<br />
  array (2) {<br />
    ["x"]=&gt;<br />
    int(203)<br />
    ["y"]=&gt;<br />
    int(102)<br />
  }<br />
  ["versions"]<br />
  array(3) {<br />
    [0]=&gt;<br />
    string(5) &#8220;0.9.7&#8243;<br />
    [1]=&gt;<br />
    string(5) &#8220;0.9.8&#8243;<br />
    [2]=&gt;<br />
    string(5) &#8220;0.9.9&#8243;<br />
  }<br />
}</p>
<p>注意_id字段自动加载了文档上，MongoDB储存元素中以_以及$开头的都是供内部使用的</p>
<p><strong>添加更多文档</strong><br />
为了做一些更有趣的事情，我们添加更多简单的文档到集合中，这些文档如下<br />
&lt;?php<br />
array( &#8220;i&#8221; =&gt; value );<br />
?&gt;</p>
<p>我们可以使用循环相当有效的插入数据<br />
&lt;?php<br />
for($i=0; $i&lt;100; $i++) {<br />
    $collection-&gt;insert( array( &#8220;i&#8221; =&gt; $i ) );<br />
}<br />
?&gt;<br />
注意：我们可以插入不同的字段在同一字符集中，在这方面意味着MongoDB拥有非常自由的储存模式</p>
<p>在一个集合中计算文档的数量<br />
现在我们插入了101个文档(我们用循环插入了100个，之前还插入了一个)，我们可以使用count()来看看我们的数据是不是都被插入进去了<br />
&lt;?php<br />
echo $collection-&gt;count();<br />
?&gt;<br />
这段代码将打印出101<br />
MongoCollection::count() 也可以查询字段数据</p>
<p><strong>使用游标得到集合中的所有文档</strong><br />
为了得到集合中的所有文档，我们可以使用 MongoCollection::find()方法，find()方法返回一个 MongoCursor对象，可以让我们重复得到查询<br />
所匹配的的文档<br />
&lt;?php<br />
$cursor = $collection-&gt;find();<br />
foreach ($cursor as $id =&gt; $value) {<br />
    echo &#8220;$id: &#8220;;<br />
    var_dump( $value );<br />
}<br />
?&gt;<br />
这样我们会打印出集合中的这101个文档，$id就是文档中的_id字段，$value 就是文档本身</p>
<p><strong>为查询规定一个标准</strong><br />
我们可以通过find()方法得到集合中的文档子集，例如，我们要查询出集合中i字段为71的文档，我们可以使用下列方法<br />
&lt;?php</p>
<p>$query = array( &#8220;i&#8221; =&gt; 71 );<br />
$cursor = $collection-&gt;find( $query );<br />
while( $cursor-&gt;hasNext() ) {<br />
    var_dump( $cursor-&gt;getNext() );<br />
}<br />
?&gt;<br />
我们将打印如下数据<br />
array(2) {<br />
  ["_id"]=&gt;<br />
  object(MongoId)#6 (0) {<br />
  }<br />
  ["i"]=&gt;<br />
  int(71)<br />
  ["_ns"]=&gt;<br />
  &#8220;testCollection&#8221;<br />
}<br />
<strong>为查询设定一个范围</strong><br />
我们可以通过find()创建一个查询语句以得集合中的一个子集，例如如果我们得到所有&#8221;i&#8221;&gt;50的文档，我们可以使用如下代码<br />
&lt;?php<br />
$query = array( &#8220;i&#8221; =&gt; array(&#8216;$gt&#8217; =&gt;50)); //注意&#8217;$gt&#8217;两边的单引号<br />
$cursor = $coll-&gt;find( $query );</p>
<p>while( $cursor-&gt;hasNext() ) {<br />
    var_dump( $cursor-&gt;getNext() );<br />
}<br />
?&gt;<br />
我们同样可以得到20 &lt; i &lt;= 30之间的数据<br />
&lt;?php<br />
$query = array( &#8220;i&#8221; =&gt; array( &#8220;\$gt&#8221; =&gt; 20, &#8220;\$lte&#8221; =&gt; 30 ) );<br />
$cursor = $coll-&gt;find( $query );</p>
<p>while( $cursor-&gt;hasNext() ) {<br />
    var_dump( $cursor-&gt;getNext() );<br />
}<br />
?&gt;</p>
<p>我们非常容易漏掉$美元符号，你也可以选择你自定义的符号来代替美元符号，选择一个不会在你的建里面出现的符号例如&#8221;:&#8221;,在php.ini中加上这么一句话<br />
mongo.cmd = &#8220;:&#8221;<br />
那么上面的代码就可以替换成 <br />
&lt;?php<br />
$query = array( &#8220;i&#8221; =&gt; array( &#8220;:gt&#8221; =&gt; 20, &#8220;:lte&#8221; =&gt; 30 ) );<br />
?&gt;<br />
当然你也可以使用ini_set(&#8220;mongo.cmd&#8221;, &#8220;:&#8221;)的方法来改变</p>
<p><strong>创建一个索引</strong><br />
MongoDB支持索引，并且可以很容易的加到一个集合中，你只要指定某个字段为索引就行了，并且还可以指定 正序索引(1)与 倒序索引(-1)<br />
下面的代码为I创建了索引<br />
&lt;?php<br />
$coll-&gt;ensureIndex( array( &#8220;i&#8221; =&gt; 1 ) );  //在&#8221;i&#8221;上创建了一个索引<br />
$coll-&gt;ensureIndex( array( &#8220;i&#8221; =&gt; -1, &#8220;j&#8221; =&gt; 1 ) );//在&#8221;i&#8221;上创建了倒序索引 在&#8221;j&#8221;上创建了正序索引<br />
?&gt;</p>
<p><strong>一个简单的列子</strong><br />
这个例子展示了如何链接mongodb数据库，如何选择数据库，如何插入数据，如何查询数据，以及关闭数据库链接</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #666666; font-style: italic;">//链接</span><br />
<span style="color: #000088;">$m</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Mongo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// 选择一个数据库</span><br />
<span style="color: #000088;">$db</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$m</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">comedy</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$collection</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cartoons</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//添加一个元素</span><br />
<span style="color: #000088;">$obj</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;title&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;Calvin and Hobbes&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;author&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;Bill Watterson&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$collection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">insert</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$obj</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//添加另一个元素，使用不同的格式</span><br />
<span style="color: #000088;">$obj</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;title&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;XKCD&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;online&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$collection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">insert</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$obj</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//查询所有的集合</span><br />
<span style="color: #000088;">$cursor</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$collection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//重复显示结果</span><br />
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$cursor</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$obj</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$obj</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;title&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// 关闭链接</span><br />
<span style="color: #000088;">$m</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>输出结果为<br />
Calvin and Hobbes<br />
XKCD</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woniu.us/nosql/359.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>windows中访问linux ext4分区的工具</title>
		<link>http://www.woniu.us/other/354.html</link>
		<comments>http://www.woniu.us/other/354.html#comments</comments>
		<pubDate>Wed, 30 Jun 2010 03:17:17 +0000</pubDate>
		<dc:creator>蜗牛</dc:creator>
				<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[linux管理]]></category>

		<guid isPermaLink="false">http://www.woniu.us/?p=354</guid>
		<description><![CDATA[很多工具据说都能访问ext4格式的分区，经过试验一遍之后发现这些工具基本上都是胡扯。最后找到一方法就是用R-Linux工具来访问，R-LINUX其实是一个恢复工具，通过它可以将LINUX下的分区复制过来，但是要往里面写文件就比较麻烦了，所以这个工具适合访问linux 分区中的文件]]></description>
			<content:encoded><![CDATA[<p>很多工具据说都能访问ext4格式的分区，经过试验一遍之后发现这些工具基本上都是胡扯。最后找到一方法就是用R-Linux工具来访问，R-LINUX其实是一个恢复工具，通过它可以将LINUX下的分区复制过来，但是要往里面写文件就比较麻烦了，所以这个工具适合访问linux 分区中的文件，下载地址：<br />
<a href="http://www.r-tt.com/data_recovery_linux/Download.shtml">http://www.r-tt.com/data_recovery_linux/Download.shtml</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.woniu.us/other/354.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>centos下安装ipw3945无线网卡的简单方法</title>
		<link>http://www.woniu.us/linux/352.html</link>
		<comments>http://www.woniu.us/linux/352.html#comments</comments>
		<pubDate>Thu, 17 Jun 2010 12:59:39 +0000</pubDate>
		<dc:creator>蜗牛</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[linux 640m无线网卡安装]]></category>
		<category><![CDATA[linux安装]]></category>

		<guid isPermaLink="false">http://www.woniu.us/?p=352</guid>
		<description><![CDATA[在LINUX下装无线网卡是件非常痛苦的事情，以前试了很多种方法都无效，今天看到centos官方论坛上有牛人提供了yum包，现在分享出来大家用用，非常方便的]]></description>
			<content:encoded><![CDATA[<p>在LINUX下装无线网卡是件非常痛苦的事情，以前试了很多种方法都无效，今天看到centos官方论坛上有牛人提供了yum包，现在分享出来大家用用，非常方便的</p>
<p>1:增加一个yum库地址<br />
 vi /etc/yum.repos.d/atrpms.repo<br />
内容为：<br />
[atrpms]<br />
name=CentOS $releasever &#8211; $basearch &#8211; ATrpms<br />
baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stable<br />
gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms<br />
gpgcheck=1<br />
2:执行如下命令<br />
# rpm &#8211;import http://ATrpms.net/RPM-GPG-KEY.atrpms<br />
# yum install ipw3945<br />
# depmod -a<br />
# modprobe ipw3945<br />
# /sbin/ipw3945d &#8211;quiet</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woniu.us/linux/352.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>discuzx源码分析笔记（二）class_core.php 核心类</title>
		<link>http://www.woniu.us/discuzx/350.html</link>
		<comments>http://www.woniu.us/discuzx/350.html#comments</comments>
		<pubDate>Tue, 15 Jun 2010 10:46:21 +0000</pubDate>
		<dc:creator>蜗牛</dc:creator>
				<category><![CDATA[discuzx]]></category>
		<category><![CDATA[discuzx源代码分析]]></category>

		<guid isPermaLink="false">http://www.woniu.us/?p=350</guid>
		<description><![CDATA[关于class_core.php 核心类的构造函数执行的时候discuzx在做什么]]></description>
			<content:encoded><![CDATA[<p>先看forum.php文件</p>
<div class="blockcode">
<div id="code0">
<ol>
<li>define(&#8216;APPTYPEID&#8217;, 2);//应用类型</li>
<li>define(&#8216;CURSCRIPT&#8217;, &#8216;forum&#8217;);//当前脚本</li>
<li>require &#8216;./source/class/class_core.php&#8217;;//加载核心</li>
<li>require &#8216;./source/function/function_forum.php&#8217;;</li>
<li>$discuz = &amp; discuz_core::instance();//实例化 使用此种方法是为了兼容PHP4 与PHP5</li>
</ol>
</div>
<p><em onclick="copycode($('code0'));">复制代码</em></p>
</div>
<p>这里我们进到./source/class/class_core.php 看看这个核心类</p>
<p>首先来分别看看这些属性</p>
<div class="blockcode">
<div id="code1">
<ol>
<li>var $db = null;//存储数据库对象</li>
<li>var $mem = null;//存储内存缓存对象</li>
<li>var $session = null;////存储session</li>
<li>var $config = array();//存储配置数组</li>
<li>var $var = array();//系统常用变量</li>
<li>var $cachelist = array();//存储缓存数组</li>
</ol>
</div>
<p><em onclick="copycode($('code1'));">复制代码</em></p>
</div>
<p>我们先根据属性名来标注他们要储存的东西，这些东西肯定非常有用供以后的代码去掉用的</p>
<p>接着往下看看构造函数</p>
<div class="blockcode">
<div id="code2">
<ol>
<li>function discuz_core() {//构造方法</li>
<li>  $this-&gt;_init_env();//初始化环境变量</li>
<li>  $this-&gt;_init_config();//初始化配置信息</li>
<li>  $this-&gt;_init_input();//初始化用户输入</li>
<li>  $this-&gt;_init_output();//初始化用户输出</li>
<li>}</li>
</ol>
</div>
<p><em onclick="copycode($('code2'));">复制代码</em></p>
</div>
<p>当然到目前为止我们都还只是猜测，我们来看看具体的代码</p>
<p><em>本帖最后由 蜗牛 于 2010-6-15 17:38 编辑 </em></p>
<div>
<div id="code3">
<ol>
<li>function _init_env() {</li>
<li>//设置错误报告等级 以及关闭自动转义</li>
<li>error_reporting(E_ERROR);</li>
<li>if(phpversion() &lt; &#8216;5.3.0&#8242;) {</li>
<li>set_magic_quotes_runtime(0);</li>
<li>}</li>
<li>//设置常用常量，最主要是判断是否支持某些函数</li>
<li>define(&#8216;DISCUZ_ROOT&#8217;, substr(dirname(__FILE__), 0, -12));//程序根目录</li>
<li>define(&#8216;MAGIC_QUOTES_GPC&#8217;, function_exists(&#8216;get_magic_quotes_gpc&#8217;) &amp;&amp; get_magic_quotes_gpc());//获取是否开启了自动转义</li>
<li>define(&#8216;ICONV_ENABLE&#8217;, function_exists(&#8216;iconv&#8217;));//iconv函数是否存在</li>
<li>define(&#8216;MB_ENABLE&#8217;, function_exists(&#8216;mb_convert_encoding&#8217;));//mb_convert_encoding函数是否存在</li>
<li>define(&#8216;EXT_OBGZIP&#8217;, function_exists(&#8216;ob_gzhandler&#8217;));//ob_gzhandler函数是否存在</li>
<li>define(&#8216;TIMESTAMP&#8217;, time());//得到程序执行前的时间戳</li>
<li>$this-&gt;timezone_set();//设置时区，但是为何在这个方法里 没有传入8这个参数以设置我们的东八区？</li>
<li>//加载核心函数</li>
<li>if(!defined(&#8216;DISCUZ_CORE_FUNCTION&#8217;) &amp;&amp; !@include(DISCUZ_ROOT.&#8217;./source/function/function_core.php&#8217;)) {</li>
<li>$this-&gt;error(&#8216;function_core.php is missing&#8217;);</li>
<li>}</li>
<li>//得到是否是机器人</li>
<li>define(&#8216;IS_ROBOT&#8217;, checkrobot());</li>
<li>/*</li>
<li>去除&#8217;GLOBALS&#8217; =&gt; 1,</li>
<li>&#8216;_GET&#8217; =&gt; 1,</li>
<li>&#8216;_POST&#8217; =&gt; 1,</li>
<li>&#8216;_REQUEST&#8217; =&gt; 1,</li>
<li>&#8216;_COOKIE&#8217; =&gt; 1,</li>
<li>&#8216;_SERVER&#8217; =&gt; 1,</li>
<li>&#8216;_ENV&#8217; =&gt; 1,</li>
<li>&#8216;_FILES&#8217; =&gt; 1,</li>
<li>外的所有超级全局变量</li>
<li>*/</li>
<li>foreach ($GLOBALS as $key =&gt; $value) {</li>
<li>if (!isset($this-&gt;superglobal[$key])) {</li>
<li>$GLOBALS[$key] = null; unset($GLOBALS[$key]);</li>
<li>}</li>
<li>}</li>
<li>global $_G;</li>
<li>$_G = array(</li>
<li>&#8216;uid&#8217; =&gt; 0,//用户ID</li>
<li>&#8216;username&#8217; =&gt; &#8221;,//用户名</li>
<li>&#8216;adminid&#8217; =&gt; 0,//管理员ID</li>
<li>&#8216;groupid&#8217; =&gt; 1,//用户组</li>
<li>&#8217;sid&#8217; =&gt; &#8221;,//加密后的SID</li>
<li>&#8216;formhash&#8217; =&gt; &#8221;,//跟提交表单有关的HASH数据</li>
<li>&#8216;timestamp&#8217; =&gt; TIMESTAMP,//程序执行时的时间戳</li>
<li>&#8217;starttime&#8217; =&gt; dmicrotime(),//程序开始执行的时间</li>
<li>&#8216;clientip&#8217; =&gt; $this-&gt;_get_client_ip(),//用户IP</li>
<li>&#8216;referer&#8217; =&gt; &#8221;,//用来记录来路URL</li>
<li>&#8216;charset&#8217; =&gt; &#8221;,//字符编码</li>
<li>&#8216;gzipcompress&#8217; =&gt; &#8221;,</li>
<li>&#8216;authkey&#8217; =&gt; &#8221;,//跟加密有关的authkey</li>
<li>&#8216;timenow&#8217; =&gt; array(),</li>
<li>&#8216;PHP_SELF&#8217; =&gt; &#8221;,//请求的URL</li>
<li>&#8217;siteurl&#8217; =&gt; &#8221;,//站点地址</li>
<li>&#8217;siteroot&#8217; =&gt; &#8221;,//站点根目录</li>
<li>&#8216;config&#8217; =&gt; array(),//配置信息</li>
<li>&#8217;setting&#8217; =&gt; array(),//设置信息</li>
<li>&#8216;member&#8217; =&gt; array(),//用户有关信息</li>
<li>&#8216;group&#8217; =&gt; array(),//用户组信息</li>
<li>&#8216;cookie&#8217; =&gt; array(),//cookie信息</li>
<li>&#8217;style&#8217; =&gt; array(),//风格信息</li>
<li>&#8216;cache&#8217; =&gt; array(),//缓存数组</li>
<li>&#8217;session&#8217; =&gt; array(),//session信息</li>
<li>&#8216;lang&#8217; =&gt; array(),//语言包</li>
<li>&#8216;my_app&#8217; =&gt; array(),</li>
<li>&#8216;my_userapp&#8217; =&gt; array(),</li>
<li>&#8216;fid&#8217; =&gt; 0,//论坛版块ID</li>
<li>&#8216;tid&#8217; =&gt; 0,//帖子ID</li>
<li>&#8216;forum&#8217; =&gt; array(),</li>
<li>&#8216;rssauth&#8217; =&gt; &#8221;,</li>
<li>&#8216;home&#8217; =&gt; array(),</li>
<li>&#8217;space&#8217; =&gt; array(),</li>
<li>&#8216;block&#8217; =&gt; array(),</li>
<li>&#8216;article&#8217; =&gt; array(),</li>
<li>&#8216;action&#8217; =&gt; array(</li>
<li>&#8216;action&#8217; =&gt; APPTYPEID,</li>
<li>&#8216;fid&#8217; =&gt; 0,</li>
<li>&#8216;tid&#8217; =&gt; 0,</li>
<li>)</li>
<li>);</li>
<li>//得到所执行的脚本 比如index.php</li>
<li>$_G['PHP_SELF'] = htmlspecialchars($_SERVER['SCRIPT_NAME'] ? $_SERVER['SCRIPT_NAME'] : $_SERVER['PHP_SELF']);</li>
<li>//当前脚本 比如forum</li>
<li>$_G['basescript'] = CURSCRIPT;</li>
<li>//站点地址</li>
<li>$_G['siteurl'] = htmlspecialchars(&#8216;http://&#8217;.$_SERVER['HTTP_HOST'].preg_replace(&#8220;/\/+(api)?\/*$/i&#8221;, &#8221;, substr($_G['PHP_SELF'], 0, strrpos($_G['PHP_SELF'], &#8216;/&#8217;))).&#8217;/');</li>
<li>//站点目录</li>
<li>$_G['siteroot'] = substr($_G['PHP_SELF'], 0, -strlen(basename($_G['PHP_SELF'])));</li>
<li>//将数据存在$var属性中</li>
<li>$this-&gt;var = &amp; $_G;</li>
<li>}</li>
</ol>
</div>
<p><em onclick="copycode($('code3'));">复制代码</em></div>
<p>我们从上面的代码可以看出_init_env()的作用是用来初始化程序的执行环境的，其中包含</p>
<p>1：得到一些环境信息，就是那段define 常量设置语句<br />
2：得到一些常用常量：</p>
<p>      DISCUZ_ROOT <span style="font-family: 宋体;">程序根目录</span></p>
<p>      TIMESTAMP <span style="font-family: 宋体;">程序执行时间戳</span></p>
<p>      IS_ROBOT<span style="font-family: 宋体;">是否为机器人</span></p>
<p>3：最重要的是初始化一个全局数组（这里说并不是超级全局变量）$_G数组与 $this-&gt;var属性，其中$_G数组是供外部代码掉用的，而$this-&gt;var是类内部掉用的（这个只是猜测）</p>
<p>这个函数得到了一些重要信息<br />
<span style="font-family: 宋体;">[code][/code]<span style="font-family: Times New Roman;">DISCUZ_ROOT </span><span style="font-family: 宋体;">程序根目录</span></p>
<p><span style="font-family: Times New Roman;">TIMESTAMP </span><span style="font-family: 宋体;">程序执行时间戳</span></p>
<p><span style="font-family: Times New Roman;">IS_ROBOT</span><span style="font-family: 宋体;">是否为机器人</span></p>
<p><span style="font-family: Times New Roman;">$_G[‘timestamp’]</span><span style="font-family: 宋体;">程序执行时间</span></p>
<p><span style="font-family: Times New Roman;">$_G[‘starttime’]</span><span style="font-family: 宋体;">程序开始执行时间</span></p>
<p><span style="font-family: Times New Roman;">$_G[‘clientip’]</span><span style="font-family: 宋体;">访问者</span><span style="font-family: Times New Roman;">IP</span></p>
<p><span style="font-family: Times New Roman;">$_G['PHP_SELF']</span><span style="font-family: 宋体;">执行的脚本名称</span><span style="font-family: Times New Roman;"> </span><span style="font-family: 宋体;">例如</span><span style="font-family: Times New Roman;">index.php</span></p>
<p><span style="font-family: Times New Roman;">$_G['basescript'] </span><span style="font-family: 宋体;">当前脚本例如</span><span style="font-family: Times New Roman;">forum </span><span style="font-family: 宋体;">这个是在入口处定义的</span></p>
<p><span style="font-family: Times New Roman;">$_G['siteurl']</span><span style="font-family: 宋体;">站点地址</span></p>
<p><span style="font-family: Times New Roman;">$_G['siteroot'];</span><span style="font-family: 宋体;">程序根目录，这个跟</span><span style="font-family: Times New Roman;">DISCUZ_ROOT</span><span style="font-family: 宋体;">的区别是</span><span style="font-family: Times New Roman;">, DISCUZ_ROOT</span><span style="font-family: 宋体;">是绝对路径，</span><span style="font-family: Times New Roman;">$_G['siteroot'];</span><span style="font-family: 宋体;">是相对站点跟目录的</span><span style="font-family: Times New Roman;"> </span><span style="font-family: 宋体;">相对路径</span></p>
<p><em>本帖最后由 蜗牛 于 2010-6-15 18:01 编辑<br />
</em></p>
<div class="blockcode">
<div id="code4">
<ol>
<li>function _init_config() {</li>
<li>$_config = array();//初始化配置数组</li>
<li>@include DISCUZ_ROOT.&#8217;./config/config_global.php&#8217;;//加载配置文件</li>
<li>if(empty($_config)) {//配置文件不存在则提示出错</li>
<li>error(&#8216;config_notfound&#8217;);</li>
<li>}</li>
<li></li>
<li>//得到加密用的密钥</li>
<li>$_config['security']['authkey'] = empty($_config['security']['authkey']) ? md5($_config['cookie']['cookiepre'].$_config['db'][1]['dbname']) : ($_config['security']['authkey']);</li>
<li></li>
<li>//将配置信息存在config属性中</li>
<li>$this-&gt;config = &amp; $_config;</li>
<li></li>
<li>//是否开启debug模式</li>
<li>if(empty($this-&gt;config['debug']) || !file_exists(libfile(&#8216;function/debug&#8217;))) {</li>
<li>define(&#8216;DISCUZ_DEBUG&#8217;, false);</li>
<li>} elseif($this-&gt;config['debug'] === 1 || $this-&gt;config['debug'] === 2 || !empty($_REQUEST['debug']) &amp;&amp; $_REQUEST['debug'] === $this-&gt;config['debug']) {</li>
<li>define(&#8216;DISCUZ_DEBUG&#8217;, true);</li>
<li>if($this-&gt;config['debug'] == 2) {</li>
<li>error_reporting(E_ALL);</li>
<li>}</li>
<li>} else {</li>
<li>define(&#8216;DISCUZ_DEBUG&#8217;, false);</li>
<li>}</li>
<li></li>
<li>$GLOBALS['_G']['config'] = &amp; $this-&gt;config;</li>
<li>$GLOBALS['_G']['authkey'] = md5($this-&gt;config['security']['authkey'].$_SERVER['HTTP_USER_AGENT']);</li>
<li></li>
<li>//静态文件目录</li>
<li>define(&#8216;STATICURL&#8217;, !empty($this-&gt;config['output']['staticurl']) ? $this-&gt;config['output']['staticurl'] : &#8217;static/&#8217;);</li>
<li></li>
<li>}</li>
</ol>
</div>
<p><em onclick="copycode($('code4'));">复制代码</em></div>
<p>这个方法做了下面几件事：<br />
1：设置加密密钥<br />
2：是否开启debug模式<br />
3：将配置文件/config/config_global.php中的数据存在$this-&gt;config 属性与$_G['config']中</p>
<p>得到有用的数据是<br />
1：$_G['authkey'] 全局加密密钥<br />
2：STATICURL 静态文件目录</p>
<p>同时我们知道如何开启DiscuzX的debug模式<br />
1：在配置文件/config/config_global.php中设置$_config['debug']=1或者$_config['debug']=2 如果为2就直接开启debug模式否则让DISCUZ_DEBUG常量为true,还有中方法是通过POST或者GET方式传递一个debug参数进去，并且这个参数与$_config['debug']的值一样。</p>
<p>当然这些所有的前提是source\function\function_debug.php文件要存在，但是官方下的程序里面并没有这个文件，也许这个是官方自己用来测试的吧</p>
<div class="blockcode">
<div id="code5">
<ol>
<li>function _init_input() {//输入信息初始化</li>
<li>  </li>
<li>  //防止注入变量</li>
<li>  if (isset($_GET['GLOBALS']) ||isset($_POST['GLOBALS']) ||  isset($_COOKIE['GLOBALS']) || isset($_FILES['GLOBALS'])) {</li>
<li>   error(&#8216;request_tainting&#8217;);</li>
<li>  }</li>
<li>  </li>
<li>  //是否开启rewrite</li>
<li>  if(!empty($_GET['rewrite'])) {</li>
<li>   $query_string = &#8216;?mod=&#8217;;</li>
<li>   $param = explode(&#8216;-&#8217;, $_GET['rewrite']);</li>
<li>   $query_string .= $_GET['mod'] = $param[0];</li>
<li>   array_shift($param);</li>
<li>   $paramc = count($param);</li>
<li>   for($i = 0;$i &lt; $paramc;$i+=2) {</li>
<li>    $_REQUEST[$param[$i]] = $_GET[$param[$i]] = $param[$i + 1];</li>
<li>    $query_string .= &#8216;&amp;&#8217;.$param[$i].&#8217;=&#8217;.$param[$i + 1];</li>
<li>   }</li>
<li>   $_SERVER['QUERY_STRING'] = $query_string;</li>
<li>   unset($param, $paramc, $query_string);</li>
<li>  }</li>
<li>  </li>
<li>  //如果没有开启自动转义 则将GPCF自动转义</li>
<li>  if(!MAGIC_QUOTES_GPC) {</li>
<li>   $_GET = daddslashes($_GET);</li>
<li>   $_POST = daddslashes($_POST);</li>
<li>   $_COOKIE = daddslashes($_COOKIE);</li>
<li>   $_FILES = daddslashes($_FILES);</li>
<li>  }</li>
<li>  </li>
<li>  /*将cookie中加上了前缀的数据 去掉前缀存在$this-&gt;var['cookie']数组中*/</li>
<li>  $prelength = strlen($this-&gt;config['cookie']['cookiepre']);</li>
<li>  foreach($_COOKIE as $key =&gt; $val) {</li>
<li>   if(substr($key, 0, $prelength) == $this-&gt;config['cookie']['cookiepre']) {</li>
<li>    $this-&gt;var['cookie'][substr($key, $prelength)] = $val;</li>
<li>   }</li>
<li>  }</li>
<li>  //是否开启diy</li>
<li>  $_GET['diy'] = empty($_GET['diy']) ? &#8221; : $_GET['diy'];</li>
<li>  </li>
<li>  //将所有POST，GET来的数据存在$this-&gt;var['gp_'.$k]中</li>
<li>  foreach(array_merge($_POST, $_GET) as $k =&gt; $v) {</li>
<li>   $this-&gt;var['gp_'.$k] = $v;</li>
<li>  }</li>
<li>  //mod方法，DX根据不同的MOD来掉用不同的文件，例如forum.php中require DISCUZ_ROOT.&#8217;./source/module/forum/forum_&#8217;.$mod.&#8217;.php&#8217;;</li>
<li>  $this-&gt;var['mod'] = empty($this-&gt;var['gp_mod']) ? &#8221; : htmlspecialchars($this-&gt;var['gp_mod']);</li>
<li>  //是否是AJAX掉用的</li>
<li>  $this-&gt;var['inajax'] = empty($this-&gt;var['gp_inajax']) ? 0 : ($_SERVER['REQUEST_METHOD'] == &#8216;GET&#8217; &amp;&amp; $_SERVER['HTTP_X_REQUESTED_WITH'] == &#8216;XMLHttpRequest&#8217; || $_SERVER['REQUEST_METHOD'] == &#8216;POST&#8217; ? 1 : 0);</li>
<li>  //页码</li>
<li>  $this-&gt;var['page'] = empty($this-&gt;var['gp_page']) ? 1 : max(1, intval($this-&gt;var['gp_page']));</li>
<li>  //用户登录后的COOKIE信息</li>
<li>  $this-&gt;var['sid'] = $this-&gt;var['cookie']['sid'] = isset($this-&gt;var['cookie']['sid']) ? htmlspecialchars($this-&gt;var['cookie']['sid']) : &#8221;;</li>
<li>}</li>
</ol>
</div>
<p><em onclick="copycode($('code5'));">复制代码</em></div>
<p>从上面代码可以看出这个方法做了下面几件事<br />
1：实现GPC机制，对用户提交来的数据进行自动转义<br />
2：防止变量注入<br />
3：启用rewrite机制后的 网址分发<br />
4：设置COOKIE<br />
5：将所有GET以及POST来的数据存在$this-&gt;var['gp_'.$k]中</p>
<p>得到的有用数据为：<br />
1：$this-&gt;var['cookie']中存有所有COOKIE信息<br />
2：$_GET['diy']，是否启用DIY<br />
3：$this-&gt;var['gp_'.$k] 存有所有用户POST GET来的数据<br />
4：$this-&gt;var['mod']，掉用哪个模块<br />
5：$this-&gt;var['inajax']是否是AJAX掉用该页面<br />
6：$this-&gt;var['page']页码<br />
7：$this-&gt;var['sid'] 用户的登录验证信息</p>
<div class="blockcode">
<div id="code6">
<ol>
<li>function _init_output() {</li>
<li></li>
<li>//防止用户提交恶意的URL地址？疑问 为何不放在_init_input里面</li>
<li>if($this-&gt;config['security']['urlxssdefend'] &amp;&amp; !empty($_SERVER['REQUEST_URI'])) {</li>
<li>$temp = urldecode($_SERVER['REQUEST_URI']);</li>
<li>if(strpos($temp, &#8216;&lt;&#8217;) !== false || strpos($temp, &#8216;&#8221;&#8216;) !== false) {</li>
<li>error(&#8216;request_tainting&#8217;);</li>
<li>}</li>
<li>}</li>
<li></li>
<li>//是否开启GZIP压缩，并且不是通过AJAX掉用的并且掉用的模型不是attachment（也就是说不是附件）并且压缩函数存在</li>
<li>if($this-&gt;config['output']['gzip'] &amp;&amp; empty($this-&gt;var['gp_inajax']) &amp;&amp; $this-&gt;var['gp_mod'] != &#8216;attachment&#8217; &amp;&amp; EXT_OBGZIP) {</li>
<li>ob_start(&#8216;ob_gzhandler&#8217;);</li>
<li>setglobal(&#8216;gzipcompress&#8217;, true);</li>
<li>} else {</li>
<li>ob_start();</li>
<li>setglobal(&#8216;gzipcompress&#8217;, false);</li>
<li>}</li>
<li></li>
<li>//是否强制输出头部信息，这里最主要是强制按照一定编码输出</li>
<li>if($this-&gt;config['output']['forceheader']) {</li>
<li>@header(&#8216;Content-Type: text/html; charset=&#8217;.$this-&gt;config['output']['charset']);</li>
<li>}</li>
<li>//设置$_G['charset'];为配置文件中的字符编码</li>
<li>setglobal(&#8216;charset&#8217;, $this-&gt;config['output']['charset']);</li>
<li></li>
<li>//设置字符编码</li>
<li>define(&#8216;CHARSET&#8217;, $this-&gt;config['output']['charset']);</li>
<li>}</li>
</ol>
</div>
<p><em onclick="copycode($('code6'));">复制代码</em></div>
<p>这个方法我就不多说了，他最主要是开启GZIP压缩，以及防止用户提交而已的URL，但是为什么</p>
<div class="blockcode">
<div id="code7">
<ol>
<li>if($this-&gt;config['security']['urlxssdefend'] &amp;&amp; !empty($_SERVER['REQUEST_URI'])) {</li>
<li>   $temp = urldecode($_SERVER['REQUEST_URI']);</li>
<li>   if(strpos($temp, &#8216;&lt;&#8217;) !== false || strpos($temp, &#8216;&#8221;&#8216;) !== false) {</li>
<li>    error(&#8216;request_tainting&#8217;);</li>
<li>   }</li>
<li>  }</li>
</ol>
</div>
<p><em onclick="copycode($('code7'));">复制代码</em></div>
<p>这段代码不放在_init_input里面呢？</p>
<p>好了，经过实例化class_core.php 核心类之后程序所做的动作就已经读完了，这里最重要的是得到了一些有用的数据以供后面使用，最最重要的就是<br />
$_G数组与$this-&gt;var属性</p>
<p>下面来看看都有哪些内容</p>
<p>常量：</p>
<p>DISCUZ_ROOT <span style="font-family: 宋体;">程序根目录</span></p>
<p>TIMESTAMP <span style="font-family: 宋体;">程序执行时间戳</span></p>
<p>IS_ROBOT<span style="font-family: 宋体;">是否为机器人</span></p>
<p>STATICURL <span style="font-family: 宋体;">静态文件目录</span></p>
<p>DISCUZ_DEBUG <span style="font-family: 宋体;">是否开启</span>DEBUG<span style="font-family: 宋体;">模式</span></p>
<p>CHARSET<span style="font-family: 宋体;">字符编码</span><br />
$_G数组</p>
<p>$_G[‘timestamp’]<span style="font-family: 宋体;">程序执行时间</span></p>
<p>$_G[‘starttime’]<span style="font-family: 宋体;">程序开始执行时间</span></p>
<p>$_G[‘clientip’]<span style="font-family: 宋体;">访问者</span>IP</p>
<p>$_G['PHP_SELF']<span style="font-family: 宋体;">执行的脚本名称</span> <span style="font-family: 宋体;">例如</span>index.php</p>
<p>$_G['basescript'] <span style="font-family: 宋体;">当前脚本例如</span>forum <span style="font-family: 宋体;">这个是在入口处定义的</span></p>
<p>$_G['siteurl']<span style="font-family: 宋体;">站点地址</span></p>
<p>$_G['siteroot'];<span style="font-family: 宋体;">程序根目录，这个跟</span>DISCUZ_ROOT<span style="font-family: 宋体;">的区别是</span>, DISCUZ_ROOT<span style="font-family: 宋体;">是绝对路径，</span>$_G['siteroot'];<span style="font-family: 宋体;">是相对站点跟目录的</span> <span style="font-family: 宋体;">相对路径</span></p>
<p>$_G['authkey']<span style="font-family: 宋体;">全局加密密钥</span></p>
<p>$_G['charset'] <span style="font-family: 宋体;">输出的编码（在配置文件中定义）</span></p>
<p>$_G['cookie']<span style="font-family: 宋体;">中存有</span>cookie<span style="font-family: 宋体;">数组</span></p>
<p>$_G['gp_'.$k]<span style="font-family: 宋体;">中存有所有的</span>POST<span style="font-family: 宋体;">以及</span>GET<span style="font-family: 宋体;">来的数据</span></p>
<p>$_G['gp_'.$k] <span style="font-family: 宋体;">存有所有用户</span>POST GET<span style="font-family: 宋体;">来的数据</span></p>
<p>$_G['mod']<span style="font-family: 宋体;">，掉用哪个模块</span></p>
<p>$_G['inajax']<span style="font-family: 宋体;">是否是</span>AJAX<span style="font-family: 宋体;">掉用该页面</span></p>
<p>$_G['page']<span style="font-family: 宋体;">页码</span></p>
<p>$_G['sid'] <span style="font-family: 宋体;">用户的登录验证信息</span></p>
<p><span style="font-family: 宋体;"><span style="color: darkred;">$_G['config']=$this-&gt;config=<span style="font-family: 宋体;"><span style="font-size: 10.5pt;">配置文件</span></span>/config/config_global.php<span style="font-family: 宋体;"><span style="font-size: 10.5pt;">中的数据</span></span></span></span></p>
<p><span style="font-family: 宋体;"><span style="color: darkred;"><span style="font-family: 宋体;"><span style="font-size: 10.5pt;"><span style="color: #000000;"><span style="font-family: Times New Roman;">$_GET['diy']</span><span style="font-family: 宋体;">，是否启用</span><span style="font-family: Times New Roman;">DIY</span></span></p>
<p><span style="font-family: Times New Roman;"><span style="color: #000000;"><br />
</span></span></p>
<p><span style="font-family: Times New Roman;"><span style="color: #000000;">这里注意了<span style="font-size: large;"><span style="color: red;">$_G=&amp;this-&gt;var</span></span></span></span></p>
<p>看完这个实例化之后，就是最重要的<br />
$discuz-&gt;init();了<br />
这个是为了加载一些数据库类，模板类等等&#8230;&#8230;</p>
<p></span></span></span></span></p>
<p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.woniu.us/discuzx/350.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>discuzx源码分析笔记（一）开篇</title>
		<link>http://www.woniu.us/discuzx/347.html</link>
		<comments>http://www.woniu.us/discuzx/347.html#comments</comments>
		<pubDate>Tue, 15 Jun 2010 10:41:16 +0000</pubDate>
		<dc:creator>蜗牛</dc:creator>
				<category><![CDATA[discuzx]]></category>
		<category><![CDATA[discuzx源代码分析]]></category>

		<guid isPermaLink="false">http://www.woniu.us/?p=347</guid>
		<description><![CDATA[由于工作以及想再一次提高自己的代码阅读能力，蜗牛我决定重头到尾好好的读一遍DiscuzX的源代码，由于我之前对Uchome了解得比较多，而对Discuz系列的几乎没什么了解]]></description>
			<content:encoded><![CDATA[<p> 由于工作以及想再一次提高自己的代码阅读能力，蜗牛我决定重头到尾好好的读一遍DiscuzX的源代码，由于我之前对Uchome了解得比较多，而对Discuz系列的几乎没什么了解，所以读起DX的代码来还是有点吃力。 写这个系列的文章的目的，一是记录自己分析过程中的一些东西，方便自己日后查阅，另外是为了给想读DiscuzX代码的朋友一点小小的帮助。当然本人能力有限肯定会有很多错误，还望大家指出，同时这个系列的文章也许调理性不会很好，还望大家多多见谅！等第一遍代码读完之后，我再好好整理一下。</p>
<p>  我读代码一般的顺序是，从入口处开始看，然后顺藤摸瓜下去。这一次我先从forum.php看起。当然，首先要大致了解discuzx的文件以及文件夹的功能</p>
<p>  代码版本：Discuz!X1 简体中文 UTF8 版 20100613</p>
<p>下面是他的目录结构<br />
<a href="http://www.woniu.us/wp-content/uploads/2010/06/dxfiles.png"><img class="alignnone size-medium wp-image-348" title="dxfiles" src="http://www.woniu.us/wp-content/uploads/2010/06/dxfiles-162x300.png" alt="" width="162" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.woniu.us/discuzx/347.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>推荐两款linux下的远程WEB管理工具</title>
		<link>http://www.woniu.us/linux/346.html</link>
		<comments>http://www.woniu.us/linux/346.html#comments</comments>
		<pubDate>Wed, 02 Jun 2010 07:56:51 +0000</pubDate>
		<dc:creator>蜗牛</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[linux安装]]></category>
		<category><![CDATA[linux管理]]></category>

		<guid isPermaLink="false">http://www.woniu.us/linux/346.html</guid>
		<description><![CDATA[一个是FTP server工具 wing ftpserver 另一个是webmin 用来管理LINUX服务器的]]></description>
			<content:encoded><![CDATA[<p>一个是FTP server工具 wing ftpserver</p>
<p>官方地址为：<a href="http://www.wftpserver.com">http://www.wftpserver.com</a></p>
<p>演示地址：<a href="http://www.wftpserver.com/zh/onlinedemo.htm">http://www.wftpserver.com/zh/onlinedemo.htm</a></p>
<p>优点：支持简体中文，支持WEB方式管理，不用像VSFTP那样进行繁杂的配置了</p>
<p>缺点：只能试用30天，暂时还没有wing ftpserver破解版本</p>
<p>&#160;</p>
<p>另一个是webmin 用来管理LINUX服务器的</p>
<p>官方地址：<a href="http://www.webmin.com">http://www.webmin.com</a></p>
<p>可以在远程通过WEB方式管理服务器，可以在上面做任何事情，例如配置PHP，配置apache 管理系统帐户 等等</p>
<p>但是暂时没有看到中文版，</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woniu.us/linux/346.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
