<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>大宇空间</title>
	
	<link>http://www.dayu.name</link>
	<description>人生是一场旅行，我们才刚刚上路</description>
	<lastBuildDate>Fri, 03 Sep 2010 07:49:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/dayu" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="dayu" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>让Ubuntu的mySQL默认编码为utf8</title>
		<link>http://www.dayu.name/p/585.html</link>
		<comments>http://www.dayu.name/p/585.html#comments</comments>
		<pubDate>Fri, 03 Sep 2010 07:48:43 +0000</pubDate>
		<dc:creator>DAYU</dc:creator>
				<category><![CDATA[Linux-CentOS-Ubuntu]]></category>
		<category><![CDATA[WEB技术]]></category>

		<guid isPermaLink="false">http://www.dayu.name/?p=585</guid>
		<description><![CDATA[为了省去在每次建立数据库和数据表的过程中手动设置编码的繁琐，需要将mySQL服务器的默认编码设置为utf8，修改方法如下： 在[mysql]的下面加上 default-character-set=utf8 在[client]的下面加上 default-character-set=utf8 在[mysqld]下面加上 default-character-set=utf8 init_connect='SET NAMES utf8']]></description>
			<content:encoded><![CDATA[<p>为了省去在每次建立数据库和数据表的过程中手动设置编码的繁琐，需要将mySQL服务器的默认编码设置为utf8，修改方法如下：<span id="more-585"></span><br />
在[mysql]的下面加上</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">default-character-set=utf8</li></ol></div>
<p>在[client]的下面加上</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">default-character-set=utf8</li></ol></div>
<p>在[mysqld]下面加上</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">default-character-set=utf8</li>
<li>init_connect='SET NAMES utf8'</li></ol></div>
]]></content:encoded>
			<wfw:commentRss>http://www.dayu.name/p/585.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>隐藏PHP程序头部发出的X-Powered-By的PHP版本信息</title>
		<link>http://www.dayu.name/p/583.html</link>
		<comments>http://www.dayu.name/p/583.html#comments</comments>
		<pubDate>Wed, 01 Sep 2010 08:20:18 +0000</pubDate>
		<dc:creator>DAYU</dc:creator>
				<category><![CDATA[WEB技术]]></category>

		<guid isPermaLink="false">http://www.dayu.name/?p=583</guid>
		<description><![CDATA[尽管这不算是什么安全性的问题，不过这表明服务器正在运行PHP并且包含了当前的版本信息。 所以，从隐蔽服务器信息的角度考虑可以在php.ini文件中设置： expose_php = Off 这样就避免了输出类似 X-Powered-By: PHP/5.2.4 这样的信息]]></description>
			<content:encoded><![CDATA[<p>尽管这不算是什么安全性的问题，不过这表明服务器正在运行PHP并且包含了当前的版本信息。<br />
所以，从隐蔽服务器信息的角度考虑可以在php.ini文件中设置：</p>
<p>expose_php = Off</p>
<p>这样就避免了输出类似</p>
<p>X-Powered-By: PHP/5.2.4</p>
<p>这样的信息</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dayu.name/p/583.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>单双引号魔术引用详解，让用户提交的数据更安全</title>
		<link>http://www.dayu.name/p/569.html</link>
		<comments>http://www.dayu.name/p/569.html#comments</comments>
		<pubDate>Sun, 18 Jul 2010 04:57:14 +0000</pubDate>
		<dc:creator>DAYU</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.dayu.name/?p=569</guid>
		<description><![CDATA[在项目开发中，我们会从客户端接受用户提交发送的数据，经过处理后保存到数据库的相应表格中。 这个过程中，有一个隐藏的安全性问题，这就是数据库SQL语句的引号引用处理。 如果此时$postVar_1和$getVar_2变量都是来自客户端提交的数据，那么这时隐藏的安全性问题就有可能危及数据服务器的安全。 例如：通常我们刚接触PHP的同学在书写代码中接受提交参数时，会写成 $postVar_1 = $_POST['var_1']; $getVar_2 = $_GET['var_2']; 下面我们分析两个SQL语句，看看是否存在安全性问题： SQL1:&#160; &#160; insert into tableName set col_1='$postVar_1'; SQL2:&#160; &#160; insert&#160;into tableName set col_2=&#34;$getVar_2&#34;; 注意： 若用户在表单中var_1处填写的数据为：I&#8217;m fine！ 若用户在表单中var_2处填写的数据为：This is &#8220;BUG&#8221;! 当我们只是简单的将这两个数据接受到变量中，并传入上面的SQL语句中就会出现，致命的SQL语句执行错误。 我们把数据代入SQL，看看究竟错误在哪里 SQL1:&#160; &#160;&#160; insert into tableName set col_1='I'm fine!'; SQL2:&#160; &#160;&#160; insert into tableName set col_2='This&#160;is &#34;BUG&#34;&#34;; 可以看出，单引号和双引号此时已经匹配的混乱了，用户提交的传入变量数据和SQL语句中用于字段值定界符的单双引号产生了混淆，若把这样的SQL语句放到执行过程中去，那么必定会报错，严重的会被人利用，攻破服务器的安全防护。 所以我们需要对此情况加以判别和处理，所以我们要对传入的参数进行单双引号的引用过滤解析，这就要用到我们之前学习过的一个非常简单的函数——addslashes： 我们把接受数据到变量的过程重新用addslashes做一遍单双引号的过滤解析后，再传递给SQL语句，那就是安全的了： $postVar_1 = addslashes($_POST['var_1']); $getVar_2 [...]]]></description>
			<content:encoded><![CDATA[<p>在项目开发中，我们会从客户端接受用户提交发送的数据，经过处理后保存到数据库的相应表格中。<br />
这个过程中，有一个隐藏的安全性问题，这就是数据库SQL语句的引号引用处理。</p>
<p>如果此时$postVar_1和$getVar_2变量都是来自客户端提交的数据，那么这时隐藏的安全性问题就有可能危及数据服务器的安全。<span id="more-569"></span></p>
<p>例如：通常我们刚接触PHP的同学在书写代码中接受提交参数时，会写成</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #00008b;">$postVar_1</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$_POST</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">var_1</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$getVar_2</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$_GET</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">var_2</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">;</span></li>
</ol></div>
<p>下面我们分析两个SQL语句，看看是否存在安全性问题：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">SQL1</span><span style="color: Gray;">:&nbsp; &nbsp; </span><span style="color: Green;">insert</span><span style="color: Gray;"> </span><span style="color: Green;">into</span><span style="color: Gray;"> </span><span style="color: Blue;">tableName</span><span style="color: Gray;"> </span><span style="color: Green;">set</span><span style="color: Gray;"> </span><span style="color: Blue;">col_1</span><span style="color: Gray;">=</span><span style="color: #8b0000;">'</span><span style="color: Red;">$postVar_1</span><span style="color: #8b0000;">'</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">SQL2</span><span style="color: Gray;">:&nbsp; &nbsp; </span><span style="color: Green;">insert</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">into</span><span style="color: Gray;"> </span><span style="color: Blue;">tableName</span><span style="color: Gray;"> </span><span style="color: Green;">set</span><span style="color: Gray;"> </span><span style="color: Blue;">col_2</span><span style="color: Gray;">=</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">$getVar_2</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">;</span></li></ol></div>
<p>注意：<br />
若用户在表单中var_1处填写的数据为：I&#8217;m fine！<br />
若用户在表单中var_2处填写的数据为：This is &#8220;BUG&#8221;!</p>
<p>当我们只是简单的将这两个数据接受到变量中，并传入上面的SQL语句中就会出现，致命的SQL语句执行错误。</p>
<p>我们把数据代入SQL，看看究竟错误在哪里</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">SQL1</span><span style="color: Gray;">:&nbsp; &nbsp;&nbsp; </span><span style="color: Green;">insert</span><span style="color: Gray;"> </span><span style="color: Green;">into</span><span style="color: Gray;"> </span><span style="color: Blue;">tableName</span><span style="color: Gray;"> </span><span style="color: Green;">set</span><span style="color: Gray;"> </span><span style="color: Blue;">col_1</span><span style="color: Gray;">=</span><span style="color: #8b0000;">'</span><span style="color: Red;">I</span><span style="color: #8b0000;">'</span><span style="color: #00008b;">m</span><span style="color: Gray;"> </span><span style="color: Blue;">fine</span><span style="color: Gray;">!</span><span style="color: #8b0000;">'</span><span style="color: Red;">;</span></li>
<li><span style="color: Red;">SQL2:&nbsp; &nbsp;&nbsp; insert into tableName set col_2=</span><span style="color: #8b0000;">'</span><span style="color: Blue;">This</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">is</span><span style="color: Gray;"> </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">BUG</span><span style="color: #8b0000;">&quot;&quot;</span><span style="color: Red;">;</span></li></ol></div>
<p>可以看出，单引号和双引号此时已经匹配的混乱了，<span style="color:red;"><strong>用户提交的传入变量数据</strong>和<strong>SQL语句中用于字段值定界符的单双引号</strong>产生了混淆</span>，若把这样的SQL语句放到执行过程中去，那么必定会报错，严重的会被人利用，攻破服务器的安全防护。</p>
<p>所以我们需要对此情况加以判别和处理，所以我们要对传入的参数进行单双引号的引用过滤解析，这就要用到我们之前学习过的一个非常简单的函数——addslashes：</p>
<p>我们把接受数据到变量的过程重新用addslashes做一遍单双引号的过滤解析后，再传递给SQL语句，那就是安全的了：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #00008b;">$postVar_1</span><span style="color: Gray;"> = </span><span style="color: Blue;">addslashes</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_POST</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">var_1</span><span style="color: #8b0000;">'</span><span style="color: Olive;">])</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$getVar_2</span><span style="color: Gray;"> = </span><span style="color: Blue;">addslashes</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_GET</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">var_2</span><span style="color: #8b0000;">'</span><span style="color: Olive;">])</span><span style="color: Gray;">;</span></li>
</ol></div>
<p>若还是上次输入的变量值，此时的SQL语句已经变为</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">SQL1</span><span style="color: Gray;">:&nbsp; &nbsp; </span><span style="color: Blue;">insert</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">into</span><span style="color: Gray;"> </span><span style="color: Blue;">tableName</span><span style="color: Gray;"> </span><span style="color: Blue;">set</span><span style="color: Gray;"> </span><span style="color: Blue;">col_1</span><span style="color: Gray;">=</span><span style="color: #8b0000;">'</span><span style="color: Red;">I</span><span style="color: Navy;">\'</span><span style="color: Red;">m fine!</span><span style="color: #8b0000;">'</span><span style="color: Gray;">;</span></li>
<li><span style="color: Blue;">SQL2</span><span style="color: Gray;">:&nbsp; &nbsp; </span><span style="color: Blue;">insert</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">into</span><span style="color: Gray;"> </span><span style="color: Blue;">tableName</span><span style="color: Gray;"> </span><span style="color: Blue;">set</span><span style="color: Gray;"> </span><span style="color: Blue;">col_2</span><span style="color: Gray;">=</span><span style="color: #8b0000;">'</span><span style="color: Red;">This is </span><span style="color: Navy;">\&quot;</span><span style="color: Red;">BUG</span><span style="color: Navy;">\&quot;</span><span style="color: Red;">&quot;;</span></li>
<li><span style="color: Red;">?&gt;</span></li></ol></div>
<p>可见单双引号前都被加入了一个反斜杠，用以表明反斜杠之后的字符为单纯的字面意义，不再表示为引号的作用，就不会与SQL语句中的单双引号产生混淆了。</p>
<p>这样用的多了，必然会比较辛苦，让我们的程序中充满了addslashes这样的函数，为了偷懒，开发者想出一个办法，让PHP自动对所有用户提交的数据变量的值，都自动的进行单双引号的过滤解析，这就是<strong style="color:blue;">单双引号的魔术引用</strong>。</p>
<p>哪些数据是属于魔术引用自动处理的范围呢？主要有三种来自用户提交的数据：</p>
<p>    * $_POST：通过表单post发送的数据<br />
    * $_GET：通过URL地址传递的数据<br />
    * $_COOKIE：通过客户端浏览器cookie传递的数据</p>
<p>以上三种数据在一起简称为GPC，这下大家知道了把，其实就是三种变量的首字母简称大写组成。</p>
<p>魔术引用的开启和关闭是由php的配置文件php.ini来控制的，我们在其中搜索：magic_quotes_gpc可以查看到当前是否为off或on。</p>
<p>当然，你并不一定拥有自己的服务器，或者有足够的权限去修改php.ini这个配置文件（例如你租的只是虚拟空间），那么就无法自由控制魔术引用的开合关闭了，在代码中如何判别呢？通过get_magic_quotes_gpc()，这个函数的返回值，我们就可以知道当前php.ini中的当前魔术引用的开关状态。</p>
<p>再把魔术引用的开合关闭考虑到我们的代码中来，我们就发现原生态的php函数addslashes就不方便了，因为若服务器已经开启了魔术引用，我们再人工做转义解析，就多此一举了。反而会让addslashes产生的反斜杠多余，为此，我们需要自定义一个函数，首先来判断是否开启了魔术引用。<br />
若开启，则不做任何转义解析操作；若未开启，则人工通过addslashes加上反斜杠进行转义解析。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">//自定义的addslashes函数</span></li>
<li><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">add_slashes</span><span style="color: Olive;">(</span><span style="color: #00008b;">$str</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">get_magic_quotes_gpc</span><span style="color: Olive;">())</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">$str</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Green;">else</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">addslashes</span><span style="color: Olive;">(</span><span style="color: #00008b;">$str</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Olive;">}</span></li>
</ol></div>
<p>以后在代码中直接调用该函数就可以放心的使用了。但还是不够方便，他只是自动区分了魔术引用的开启和关闭，并没有减少代码中调用函数的次数，每次接受数据仍然要调用该函数，没有达到缩减代码的目的。为此，我们需要更高级的方法来对GPC变量进行解析转义操作，这就要考虑到GPC变量的特征了，三个全局变量数组，如果做呢？下面给出终极解决方案，数组的变量，以及函数的迭代调用。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Green;">function</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">add_slashes</span><span style="color: Olive;">(</span><span style="color: #00008b;">$string</span><span style="color: Gray;">, </span><span style="color: #00008b;">$force</span><span style="color: Gray;"> = </span><span style="color: Maroon;">0</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Gray;">!</span><span style="color: Blue;">get_magic_quotes_gpc</span><span style="color: Olive;">()</span><span style="color: Gray;"> || </span><span style="color: #00008b;">$force</span><span style="color: Olive;">)</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: Blue;">is_array</span><span style="color: Olive;">(</span><span style="color: #00008b;">$string</span><span style="color: Olive;">))</span><span style="color: Gray;">&nbsp;</span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">foreach</span><span style="color: Olive;">(</span><span style="color: #00008b;">$string</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">as</span><span style="color: Gray;"> </span><span style="color: #00008b;">$key</span><span style="color: Gray;"> =&gt; </span><span style="color: #00008b;">$val</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">$string</span><span style="color: Olive;">[</span><span style="color: #00008b;">$key</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: Blue;">add_slashes</span><span style="color: Olive;">(</span><span style="color: #00008b;">$val</span><span style="color: Gray;">, </span><span style="color: #00008b;">$force</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">else</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #00008b;">$string</span><span style="color: Gray;"> = </span><span style="color: Blue;">addslashes</span><span style="color: Olive;">(</span><span style="color: #00008b;">$string</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: #00008b;">$string</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li>
<li><span style="color: #00008b;">$_POST</span><span style="color: Gray;">=</span><span style="color: Blue;">add_slashes</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_POST</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$_GET</span><span style="color: Gray;">=</span><span style="color: Blue;">add_slashes</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_GET</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: #00008b;">$_COOKIE</span><span style="color: Gray;">=</span><span style="color: Blue;">add_slashes</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_COOKIE</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
</ol></div>
<p>把这段代码放到程序的入口处，就可以将GPC三个全局变量中的所有元素都自动的根据魔术引用的状态，适当的进行单双引号的转义解析了。</p>
<p><strong>好了，说了这么多，其实原理很简单，总结一下：<br />
1、首先判断是否开启魔术引用<br />
2、根据魔术引用状态，适当的做单双引号的解析转义处理<br />
3、若为数组，则遍历数组元素，迭代调用自定义函数</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dayu.name/p/569.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>激活Ubuntu的root账号，使用Winscp提高管理效率</title>
		<link>http://www.dayu.name/p/562.html</link>
		<comments>http://www.dayu.name/p/562.html#comments</comments>
		<pubDate>Sun, 18 Jul 2010 04:33:13 +0000</pubDate>
		<dc:creator>DAYU</dc:creator>
				<category><![CDATA[Linux-CentOS-Ubuntu]]></category>

		<guid isPermaLink="false">http://www.dayu.name/?p=562</guid>
		<description><![CDATA[Ubuntu是目前大家用的比较多的一种Linux发行版，其root账号的默认禁用是大大提高了系统的安全性，有效的降低了管理员误操作的概率。 我的Winscp情结 我原来从CentOS系统用起，已经习惯了直接用root登录，通过在Windows下的Winscp软件来管理配置系统。使用Winscp编辑Linux下的文件（尤其是配置文件），就像在资源管理器中修改本地文件一样，方便和高效。 但Ubuntu的root账号默认被禁用后，就有个让我这个不太习惯“sudo”命令的固执者，有些使用习惯上的别扭了，先不说很多命令总是忘记加sudo，最重要的是我习惯了使用Winscp编辑Linux配置文件，但很多Linux下的配置文件都是root用户权限，用普通用户通过Winscp登录后，编辑文件总是遇到权限不够的错误提示。 这个原因一直让我无法接受使用Ubuntu，但目前Linux市场中Ubuntu的占有率越来越高，身边的朋友也大多成为了她的Fans。时代的要求，我必须“与时俱进”啊~ 下面通过激活/禁用Ubuntu的root账号，让我们也可以灵活的使用root账号通过Winscp来编辑管理Ubuntu。 激活/禁用Ubuntu的root账号方法： 激活root账号： 其实就是为root账号加上密码而已： 用安装时设置的账号登录控制台后执行： #sudo passwd root 输入两边root密码即可激活root账号的登录啦！~ 禁用root账号： #sudo passwd -l root 高效的Winscp 瞧~Ubuntu的root账号也是可以灵活控制使用的哦。呵呵，快快开始使用Winscp编辑配置Ubuntu吧，我相信我推荐的这个方法，你一定会爱上她的。嘻嘻 BTW：Winscp若你觉得只能在Windows下使用（这是她的不足），你也可以用Filezilla，她是在Windows和Linux都有相应版本的哦（但个人觉得没有winscp在编辑文件时好用）。个人喜好，请随意选用。 下面是Winscp和Filezilla的简单介绍，写给那些初次接触这两款软件的朋友，Ubuntu我就不浪费口水了呵呵。 Winscp简介： 官方网址：http://winscp.net/ WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时支持SCP协议。它的主要功能就是在本地与远程计算机间安全的复制文件。 WinSCP 可以执行所有基本的文件操作，例如下载和上传。同时允许为文件和目录重命名、改变属性、建立符号链接和快捷方式。 两种可选界面允许用户方便的同时管理远程或本地的文件。 特性列表： * 图形用户界面 * 多语言（很棒，官方即有中文版） * 与 Windows 完美集成(拖拽, URL, 快捷方式) * 支持所有常用文件操作 * 支持基于 SSH-1、SSH-2 的 SFTP 和 SCP 协议 * 支持批处理脚本和命令行方式 * 多种半自动、自动的目录同步方式 * [...]]]></description>
			<content:encoded><![CDATA[<p>Ubuntu是目前大家用的比较多的一种Linux发行版，其root账号的默认禁用是大大提高了系统的安全性，有效的降低了管理员误操作的概率。</p>
<p><strong>我的Winscp情结</strong><br />
我原来从CentOS系统用起，已经习惯了直接用root登录，通过在Windows下的Winscp软件来管理配置系统。使用Winscp编辑Linux下的文件（尤其是配置文件），就像在资源管理器中修改本地文件一样，方便和高效。</p>
<p>但Ubuntu的root账号默认被禁用后，就有个让我这个不太习惯“sudo”命令的固执者，有些使用习惯上的别扭了，先不说很多命令总是忘记加sudo，最重要的是我习惯了使用Winscp编辑Linux配置文件，但很多Linux下的配置文件都是root用户权限，用普通用户通过Winscp登录后，编辑文件总是遇到权限不够的错误提示。</p>
<p>这个原因一直让我无法接受使用Ubuntu，但目前Linux市场中Ubuntu的占有率越来越高，身边的朋友也大多成为了她的Fans。时代的要求，我必须“与时俱进”啊~</p>
<p>下面通过激活/禁用Ubuntu的root账号，让我们也可以灵活的使用root账号通过Winscp来编辑管理Ubuntu。<span id="more-562"></span></p>
<p><strong>激活/禁用Ubuntu的root账号方法：</strong></p>
<ol>
<li>激活root账号：<br />
其实就是为root账号加上密码而已：<br />
用安装时设置的账号登录控制台后执行：<br />
#sudo passwd root<br />
输入两边root密码即可激活root账号的登录啦！~
</li>
<li>禁用root账号：<br />
#sudo passwd -l root
</li>
</ol>
<p><strong>高效的Winscp</strong><br />
瞧~Ubuntu的root账号也是可以灵活控制使用的哦。呵呵，快快开始使用Winscp编辑配置Ubuntu吧，我相信我推荐的这个方法，你一定会爱上她的。嘻嘻<br />
BTW：Winscp若你觉得只能在Windows下使用（这是她的不足），你也可以用Filezilla，她是在Windows和Linux都有相应版本的哦（但个人觉得没有winscp在编辑文件时好用）。个人喜好，请随意选用。</p>
<p>下面是Winscp和Filezilla的简单介绍，写给那些初次接触这两款软件的朋友，Ubuntu我就不浪费口水了呵呵。</p>
<p><strong>Winscp简介：</strong><br />
官方网址：http://winscp.net/<br />
<a href="http://www.flickr.com/photos/yobbozhu/4803299983/" title="Flickr 上 大宇 的 Winscp_log"><img src="http://farm5.static.flickr.com/4134/4803299983_baa62b9486_m.jpg" width="153" height="155" alt="Winscp_log" /></a></p>
<ul>
<li>WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时支持SCP协议。它的主要功能就是在本地与远程计算机间安全的复制文件。</li>
<li>WinSCP 可以执行所有基本的文件操作，例如下载和上传。同时允许为文件和目录重命名、改变属性、建立符号链接和快捷方式。</li>
<li>两种可选界面允许用户方便的同时管理远程或本地的文件。</li>
<li>特性列表：<br />
<blockquote><p> * 图形用户界面<br />
    * 多语言<strong style="color:red;">（很棒，官方即有中文版）</strong><br />
    * 与 Windows 完美集成(拖拽, URL, 快捷方式)<br />
    * 支持所有常用文件操作<br />
    * 支持基于 SSH-1、SSH-2 的 SFTP 和 SCP 协议<br />
    * 支持批处理脚本和命令行方式<br />
    * 多种半自动、自动的目录同步方式<br />
    * 内置文本编辑器<br />
    * 支持 SSH 密码、键盘交互、公钥和 Kerberos(GSS) 验证<br />
    * 通过与 Pageant(PuTTY Agent)集成支持各种类型公钥验证<br />
    * 提供 Windows Explorer 与 Norton Commander 界面<br />
    * 可选地存储会话信息<br />
    * 可将设置存在配置文件中而非注册表中，适合在移动介质上操作</p></blockquote>
</li>
</ul>
<p><b>FileZilla简介：</b><br />
官方网址：http://filezilla-project.org/<br />
<a href="http://www.flickr.com/photos/yobbozhu/4803935240/" title="Flickr 上 大宇 的 Filezilla_logo"><img src="http://farm5.static.flickr.com/4134/4803935240_c49f86b556_s.jpg" width="75" height="75" alt="Filezilla_logo" /></a></p>
<blockquote><p>FileZilla是一个免费开源且跨平台的FTP解决方案，分为客户端版本和服务器版本，具备所有的FTP软件功能。在Windows, Linux, MacOS X下的均有对应的版本。软件许可证为GPL。可控性、有条理的界面和管理多站点的简化方式使得Filezilla客户端版成为一个方便高效的FTP客户端工具，而FileZilla Server则是一个小巧并且可靠的支持FTP&#038;SFTP的FTP服务器软件。</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.dayu.name/p/562.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用ADSL架设属于自己的服务器，完全独立域名访问</title>
		<link>http://www.dayu.name/p/552.html</link>
		<comments>http://www.dayu.name/p/552.html#comments</comments>
		<pubDate>Mon, 05 Jul 2010 06:37:35 +0000</pubDate>
		<dc:creator>DAYU</dc:creator>
				<category><![CDATA[技术教程]]></category>

		<guid isPermaLink="false">http://www.dayu.name/?p=552</guid>
		<description><![CDATA[相信有很多人都想有属于自己的独立服务器，这样可以最大程度拥有对系统的控制权限，并且还可以尽可能的减少代码被窃取，或因为共享空间而被黑客抓住漏洞产生的安全问题。 下面，我们将为大家介绍一种通过3322.org的免费动态域名解析服务，将我们注册的任意域名，解析到家中通过ADSL上网的普通电脑的方法。 相当于将自己家中的电脑配置成服务器，再将域名解析到这台完全属于自己的独立服务器上。 这种方法，为我们剩下了大笔的主机托管费用，但带宽方面稍微有点慢，毕竟ADSL的上传速率不是很高。不过应付一般的个人网站来说也还是可以的，这对于刚刚开始入门的朋友来说，还是非常实用的一种方法。真的要是你的站点ADSL的上传速率都应付不过来了，那时再花点钱租个空间升级一下也是值得的。 建议大家在起步的时候尽量用比较少的花销，先尝试熟悉一下，有比较好的结果后，再持续的投入。 下面是具体的解决方案： 1、将电脑接入互联网 首先，让我们的电脑通过ADSL可以24小时不间断的连接到互联网。 其实很简单，让拨号程序可以自动重拨就可以了（这里我们暂且特指Windows操作系统）。 2、注册域名 选择一个自己喜欢的域名，例如：hfphp.org（这是国际顶级域名）。 3、设置二级域名 通常我们访问的都是www.hfphp.org，这是该顶级域名的www二级域名。我们通过希网提供的动态域名服务，设置该二级域名为动态IP。 在希网注册用户 新建动态域名 填写新创建的动态域名参数 主机名：填写一个在希网上不重复的二级域名，例如zkyc123；注意这里的二级域名是相对于3322.org的。 IP地址：默认即可，不用设置；因为我们的服务器是通过ADSL拨号接入互联网的，本身的IP就是动态变化的，所以这里暂时不用设置具体IP地址。 其他参数默认即可。 这样我们就在3322.org这个网站拥有了一个二级域名。 4、将服务器的动态IP不断的汇报给希网 因为通过ADSL拨号的IP是不断更换的，而域名解析的话需要一个固定的IP地址，这就需要在ADSL更换IP的时候告诉互联网上的其他人，最新的IP地址。 最简单的额方法，就是每隔一段具体时间，服务器自动将最新的IP汇报给希网。有两种方法可以做到自动汇报： 通过希网的客户端软件 通过命令行脚本 5、自定义域名的别名记录 现在无论ADSL的IP怎样变化，服务器的最新地址都可以通过希网的二级域名访问。现在完全可以将我们自己的域名通过希网的这个二级域名来访问服务器了，效果上完全就等同于通过我们的域名去访问不断变化IP的服务器。只要将我们自己的域名实际使用中的二级域名，设立一个cname别名，指向刚才我们在希网设置的动态二级域名即可。 OK！到此为止，我们所有的工作就都做完了，剩下的就需要一点点的耐心等待，域名解析需要些时间生效。]]></description>
			<content:encoded><![CDATA[<p>相信有很多人都想有属于自己的独立服务器，这样可以最大程度拥有对系统的控制权限，并且还可以尽可能的减少代码被窃取，或因为共享空间而被黑客抓住漏洞产生的安全问题。</p>
<p>下面，我们将为大家介绍一种通过3322.org的免费动态域名解析服务，将我们注册的任意域名，解析到家中通过ADSL上网的普通电脑的方法。</p>
<p>相当于将自己家中的电脑配置成服务器，再将域名解析到这台完全属于自己的独立服务器上。<span id="more-552"></span></p>
<p>这种方法，为我们剩下了大笔的主机托管费用，但带宽方面稍微有点慢，毕竟ADSL的上传速率不是很高。不过应付一般的个人网站来说也还是可以的，这对于刚刚开始入门的朋友来说，还是非常实用的一种方法。真的要是你的站点ADSL的上传速率都应付不过来了，那时再花点钱租个空间升级一下也是值得的。</p>
<p>建议大家在起步的时候尽量用比较少的花销，先尝试熟悉一下，有比较好的结果后，再持续的投入。</p>
<p>下面是具体的解决方案：<br />
<strong>1、将电脑接入互联网</strong><br />
首先，让我们的电脑通过ADSL可以24小时不间断的连接到互联网。<br />
其实很简单，让拨号程序可以自动重拨就可以了（这里我们暂且特指Windows操作系统）。</p>
<p><strong>2、注册域名</strong><br />
选择一个自己喜欢的域名，例如：hfphp.org（这是国际顶级域名）。</p>
<p><strong>3、设置二级域名</strong><br />
通常我们访问的都是www.hfphp.org，这是该顶级域名的www二级域名。我们通过<a href="http://www.3322.org">希网</a>提供的动态域名服务，设置该二级域名为动态IP。</p>
<ol type="i">
<li>在希网注册用户<br />
<img src="http://farm5.static.flickr.com/4098/4762560631_0c5d803f01.jpg" alt="注册希网用户名" /></li>
<li>新建动态域名<br />
<img src="http://farm5.static.flickr.com/4116/4762565059_56d6bd019e.jpg" alt="新建动态域名" /></li>
<li>填写新创建的动态域名参数<br />
<img src="http://farm5.static.flickr.com/4119/4762567957_0b783a7442.jpg" alt="新建动态域名参数" /><br />
主机名：填写一个在希网上不重复的二级域名，例如zkyc123；注意这里的二级域名是相对于3322.org的。<br />
IP地址：默认即可，不用设置；因为我们的服务器是通过ADSL拨号接入互联网的，本身的IP就是动态变化的，所以这里暂时不用设置具体IP地址。<br />
<em>其他参数默认即可。</em></li>
</ol>
<p>这样我们就在3322.org这个网站拥有了一个二级域名。</p>
<p><strong>4、将服务器的动态IP不断的汇报给希网</strong><br />
因为通过ADSL拨号的IP是不断更换的，而域名解析的话需要一个固定的IP地址，这就需要在ADSL更换IP的时候告诉互联网上的其他人，最新的IP地址。<br />
最简单的额方法，就是每隔一段具体时间，服务器自动将最新的IP汇报给希网。有两种方法可以做到自动汇报：</p>
<ol type="i">
<li>通过希网的客户端软件</li>
<li>通过命令行脚本</li>
</ol>
<p><img src="http://farm5.static.flickr.com/4116/4762596151_42cd27b4ab_b.jpg" alt="希网客户端+命令行脚本" /></p>
<p><strong>5、自定义域名的别名记录</strong><br />
现在无论ADSL的IP怎样变化，服务器的最新地址都可以通过希网的二级域名访问。现在完全可以将我们自己的域名通过希网的这个二级域名来访问服务器了，效果上完全就等同于通过我们的域名去访问不断变化IP的服务器。只要将我们自己的域名实际使用中的二级域名，设立一个cname别名，指向刚才我们在希网设置的动态二级域名即可。<br />
<img src="http://farm5.static.flickr.com/4134/4762608295_96f00a549f_b.jpg" alt="域名的cname别名记录设置" /></p>
<p>OK！到此为止，我们所有的工作就都做完了，剩下的就需要一点点的耐心等待，域名解析需要些时间生效。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dayu.name/p/552.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>动态IP情况下的定时汇报IP脚本</title>
		<link>http://www.dayu.name/p/550.html</link>
		<comments>http://www.dayu.name/p/550.html#comments</comments>
		<pubDate>Sun, 27 Jun 2010 16:19:48 +0000</pubDate>
		<dc:creator>DAYU</dc:creator>
				<category><![CDATA[Linux-CentOS-Ubuntu]]></category>

		<guid isPermaLink="false">http://www.dayu.name/?p=550</guid>
		<description><![CDATA[wget -O /root/ip.txt http://www.ip138.com/ip2city.asp echo newIP &#124; mutt -s newIP -a /root/ip.txt root 将以上保存为脚本，再加入cron计划定时执行即可]]></description>
			<content:encoded><![CDATA[<p><code>wget -O /root/ip.txt http://www.ip138.com/ip2city.asp<br />
echo newIP | mutt -s newIP -a /root/ip.txt root</code></p>
<p>将以上保存为脚本，再加入cron计划定时执行即可</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dayu.name/p/550.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VMware三种网络模式根本区别：Bridged &amp; NAT &amp; Host-Only</title>
		<link>http://www.dayu.name/p/547.html</link>
		<comments>http://www.dayu.name/p/547.html#comments</comments>
		<pubDate>Sat, 26 Jun 2010 03:49:37 +0000</pubDate>
		<dc:creator>DAYU</dc:creator>
				<category><![CDATA[技术教程]]></category>

		<guid isPermaLink="false">http://www.dayu.name/?p=547</guid>
		<description><![CDATA[提到VMware大家就想起了虚拟机技术，虚拟机技术在最近的几年中得到了广泛的发展，一些大型网络服务商都开始采用虚拟机技术，不仅节省了投资成本，更节约了能源的消耗。 我们知道VMware也分几种版本，普通用户最常用的就是 Workstation，但是不管使用哪种版本，我们都能发现在安装过程中让我们选择网络模式。在默认情况下会选中桥接模式，但有用户会问其他模式是干什么用的？有时候选择了其他模式之后就不能上网了。今天小编就和大家一起探讨一下VMware 3种网络模式的功能和通信规则。 网络模式 我们首先说一下VMware的几个虚拟设备 VMnet0：用于虚拟桥接网络下的虚拟交换机 VMnet1：用于虚拟Host-Only网络下的虚拟交换机 VMnet8：用于虚拟NAT网络下的虚拟交换机 VMware Network Adepter VMnet1：Host用于与Host-Only虚拟网络进行通信的虚拟网卡 VMware Network Adepter VMnet8：Host用于与NAT虚拟网络进行通信的虚拟网卡 安装了VMware虚拟机后，会在网络连接对话框中多出两个虚拟 网卡，如图： 网络连接 一.桥接网络（Bridged Networking） 桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机 进行桥接，物理网卡和虚拟网卡在拓扑图上处于同等地位（虚拟网卡既不是Adepter VMnet1也不是Adepter VMnet8）。 桥接网络拓扑图 那么物理网卡和虚拟网卡就相当于处于同一个网段，虚拟交换机就相 当于一台现实网络中的交换机。所以两个网卡的IP地址也要设置为同一网段。 物理网卡IP地址 虚拟网卡IP地址 我们看到，物理网卡和虚拟网卡的IP地址处于同一个网段，子网掩 码、网关、DNS等参数都相同。两个网卡在拓扑结构中是相对独立的。 ping结果 我们在192.168.15.111上 ping192.168.15.96，结果显示两个网卡能够互相通信。如果在网络中存在DHCP服务器，那么虚拟网卡同样可以从DHCP服务器上获取IP 地址。所以桥接网络模式是VMware虚拟机中最简单直接的模式。安装虚拟机时它为默认选项。 二.NAT模式 在NAT网络中，会用到VMware Network Adepter VMnet8虚拟网卡，主机上的VMware Network Adepter VMnet8虚拟网卡被直接连接到VMnet8虚拟交换机上与虚拟网卡进行通信。 NAT网络模式 VMware Network Adepter VMnet8虚拟网卡的作用仅限于和VMnet8网段进行通信，它不给VMnet8网段提供路由功能，所以虚拟机虚拟一个NAT服务器，使虚拟网卡可以连 接到Internet。在这种情况下，我们就可以使用端口映射功能，让访问主机80端口的请求映射到虚拟机的80端口上。 VMware Network Adepter VMnet8虚拟网卡的IP地址是在安装VMware时由系统指定生成的，我们不要修改这个数值，否则会使主机和虚拟机无法通信。 [...]]]></description>
			<content:encoded><![CDATA[<p>提到VMware大家就想起了虚拟机技术，虚拟机技术在最近的几年中得到了广泛的发展，一些大型网络服务商都开始采用虚拟机技术，不仅节省了投资成本，更节约了能源的消耗。</p>
<p>我们知道VMware也分几种版本，普通用户最常用的就是 Workstation，但是不管使用哪种版本，我们都能发现在安装过程中让我们选择网络模式。在默认情况下会选中桥接模式，但有用户会问其他模式是干什么用的？有时候选择了其他模式之后就不能上网了。今天小编就和大家一起探讨一下VMware 3种网络模式的功能和通信规则。</p>
<div><img src="http://www.net130.com/CMS/Files/Uploadimages/1731865.jpg" alt="" /><span id="more-547"></span></div>
<div>
<div>网络模式</div>
<p>我们首先说一下VMware的几个虚拟设备</p>
<p>VMnet0：用于虚拟桥接网络下的虚拟交换机</p>
<p>VMnet1：用于虚拟Host-Only网络下的虚拟交换机</p>
<p>VMnet8：用于虚拟NAT网络下的虚拟交换机</p>
<p>VMware Network Adepter  VMnet1：Host用于与Host-Only虚拟网络进行通信的虚拟网卡</p>
<p>VMware Network Adepter  VMnet8：Host用于与NAT虚拟网络进行通信的虚拟网卡</p>
<p>安装了VMware虚拟机后，会在网络连接对话框中多出两个虚拟 网卡，如图：</p>
<div><img src="http://www.net130.com/CMS/Files/Uploadimages/1731867.jpg" alt="" /></div>
<div>网络连接</div>
<div>
<p><strong>一.桥接网络（Bridged Networking）</strong></p>
<p>桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机 进行桥接，物理网卡和虚拟网卡在拓扑图上处于同等地位（虚拟网卡既不是Adepter VMnet1也不是Adepter VMnet8）。</p>
<div><img src="http://www.net130.com/CMS/Files/Uploadimages/1731869.jpg" alt="" /></div>
<div>桥接网络拓扑图</div>
<p>那么物理网卡和虚拟网卡就相当于处于同一个网段，虚拟交换机就相 当于一台现实网络中的交换机。所以两个网卡的IP地址也要设置为同一网段。</p>
<div><img src="http://www.net130.com/CMS/Files/Uploadimages/1731871.jpg" alt="" /></div>
<div>物理网卡IP地址</div>
<div><img src="http://www.net130.com/CMS/Files/Uploadimages/1731873.jpg" alt="" /></div>
<div>虚拟网卡IP地址</div>
<p>我们看到，物理网卡和虚拟网卡的IP地址处于同一个网段，子网掩 码、网关、DNS等参数都相同。两个网卡在拓扑结构中是相对独立的。</p>
<div><img src="http://www.net130.com/CMS/Files/Uploadimages/1731875.jpg" alt="" /></div>
<div>ping结果</div>
<p>我们在192.168.15.111上 ping192.168.15.96，结果显示两个网卡能够互相通信。如果在网络中存在DHCP服务器，那么虚拟网卡同样可以从DHCP服务器上获取IP 地址。所以桥接网络模式是VMware虚拟机中最简单直接的模式。安装虚拟机时它为默认选项。</p>
<p><strong>二.NAT模式</strong></p>
<p>在NAT网络中，会用到VMware Network  Adepter VMnet8虚拟网卡，主机上的VMware Network Adepter  VMnet8虚拟网卡被直接连接到VMnet8虚拟交换机上与虚拟网卡进行通信。</p>
<div><img src="http://www.net130.com/CMS/Files/Uploadimages/1731877.jpg" alt="" /></div>
<div>NAT网络模式</div>
<p>VMware Network Adepter  VMnet8虚拟网卡的作用仅限于和VMnet8网段进行通信，它不给VMnet8网段提供路由功能，所以虚拟机虚拟一个NAT服务器，使虚拟网卡可以连 接到Internet。在这种情况下，我们就可以使用端口映射功能，让访问主机80端口的请求映射到虚拟机的80端口上。</p>
<p>VMware Network Adepter  VMnet8虚拟网卡的IP地址是在安装VMware时由系统指定生成的，我们不要修改这个数值，否则会使主机和虚拟机无法通信。</p>
<div><img src="http://www.net130.com/CMS/Files/Uploadimages/1731879.jpg" alt="" /></div>
<div>NAT虚拟网卡IP地址</div>
<div><img src="http://www.net130.com/CMS/Files/Uploadimages/1731881.jpg" alt="" /></div>
<div>物理网卡IP地址</div>
<p>虚拟出来的网段和NAT模式虚拟网卡的网段是一样的，都为 192.168.111.X，包括NAT服务器的IP地址也是这个网段。在安装VMware之后同样会生成一个虚拟DHCP服务器，为NAT服务器分配 IP地址。</p>
<p>当主机和虚拟机进行通信的时候就会调用VMware  Network Adepter VMnet8虚拟网卡，因为他们都在一个网段，所以通信就不成问题了。</p>
<p>实际上，VMware Network Adepter  VMnet8虚拟网卡的作用就是为主机和虚拟机的通信提供一个接口，即使主机的物理网卡被关闭，虚拟机仍然可以连接到Internet，但是主机和虚拟机 之间就不能互访了。</p>
<p><strong>三.Host-Only模式</strong></p>
<p>在Host-Only模式下，虚拟网络是一个全封闭的网络，它唯 一能够访问的就是主机。其实Host-Only网络和NAT网络很相似，不同的地方就是Host-Only网络没有NAT服务，所以虚拟网络不能连接到 Internet。主机和虚拟机之间的通信是通过VMware Network Adepter VMnet1虚拟网卡来实现的。</p>
<div><img src="http://www.net130.com/CMS/Files/Uploadimages/1731883.jpg" alt="" /></div>
<div>Host-Only模式</div>
<p>同NAT一样，VMware Network Adepter  VMnet1虚拟网卡的IP地址也是VMware系统指定的，同时生成的虚拟DHCP服务器和虚拟网卡的IP地址位于同一网段，但和物理网卡的IP地址不 在同一网段。</p>
<div><img src="http://www.net130.com/CMS/Files/Uploadimages/1731885.jpg" alt="" /></div>
<div>Host-Only虚拟网卡IP地址</div>
<div><img src="http://www.net130.com/CMS/Files/Uploadimages/1731887.jpg" alt="" /></div>
<div>物理网卡IP地址</div>
<p>Host-Only的宗旨就是建立一个与外界隔绝的内部网络，来 提高内网的安全性。这个功能或许对普通用户来说没有多大意义，但大型服务商会常常利用这个功能。如果你想为VMnet1网段提供路由功能，那就需要使用 RRAS，而不能使用XP或2000的ICS，因为ICS会把内网的IP地址改为192.168.0.1，但虚拟机是不会给VMnet1虚拟网卡分配这个 地址的，那么主机和虚拟机之间就不能通信了。</p>
<p><strong>综述</strong></p>
<p>在VMware的3中网络模式中，NAT模式是最简单的，基本不 需要手动配置IP地址等相关参数。至于桥接模式则需要额外的IP地址，如果是在内网环境中还很容易，如果是ADSL宽带就比较麻烦了，ISP一般是不会大 方的多提供一个公网IP的。</p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.dayu.name/p/547.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在线教程必备工具——专业截图Snagit+网络图片Flickr+Firefox插件</title>
		<link>http://www.dayu.name/p/539.html</link>
		<comments>http://www.dayu.name/p/539.html#comments</comments>
		<pubDate>Thu, 24 Jun 2010 07:41:02 +0000</pubDate>
		<dc:creator>DAYU</dc:creator>
				<category><![CDATA[技术教程]]></category>

		<guid isPermaLink="false">http://www.dayu.name/?p=539</guid>
		<description><![CDATA[这里所用的是在线写教程必须要用到的一些技巧。 基本需求是： 能够方便的截图，并对所截取的图片进行简单的编辑修改； 方便的将截图上传到第三方图片存放服务空间中，例如Flickr； 能够在常用的浏览器中整合，例如可以在Firefox中以插件的形式激活调用； 详细的说明： 1、专业截图——Snagit 一个非常优秀的屏幕、文本和视频捕获与转换程序。 可以捕获Windows屏幕、DOS屏幕；RM电影、游戏画面；菜单、窗口、客户区窗口、最后一个激活的窗口或用鼠标定义的区域。图象可被存为BMP、 PCX、TIF、GIF或JPEG格式，也可以存为系列动画。使用JPEG可以指定所需的压缩级(从1%到99%)。可以选择是否包括光标，添加水印。另外还具有自动缩放，颜色减少，单色转换，抖动，以及转换为灰度级。 此外，保存屏幕捕获的图象前，可以用其自带的编辑器编辑；也可以选择自动将其送至SnagIt打印机或Windows剪贴板中，也可以直接用E-mail 发送。 SnagIt具有将显示在Windows桌面上的文本块转换为机器可读文本的独特能力，这里甚至无需CUT和PASTE。 程序支持DDE，所以其他程序可以控制和自动捕获屏幕。新版还能嵌入Word、PowerPoint和IE浏览器中。 这是商业软件，但国内已有较好的破解了，在绿色下载站就用。 Snagit可以支持几乎所有类型的截图方式，并提供了一个相对强大的截图图片编辑处理工具。 2、图片存放——Flickr 为了节约服务器的带宽资源与存储空间，图片需要找到一个长期、稳定、可靠、高效的存储服务空间，这里推荐使用Flickr。 幸运的是，Snagit10之后提供了插件，其中就有一个Flickr的分享插件，在其网站上就有，下载安装激活、配置即可使用。这样“截图——编辑——上传——获取图片URL”一条龙操作。 3、整合Firefox浏览器 Snagit还提供了一个Firefox浏览器的插件，让调用更轻松。]]></description>
			<content:encoded><![CDATA[<p>这里所用的是在线写教程必须要用到的一些技巧。</p>
<p>基本需求是：</p>
<ol>
<li>能够方便的截图，并对所截取的图片进行简单的编辑修改；</li>
<li>方便的将截图上传到第三方图片存放服务空间中，例如Flickr；</li>
<li>能够在常用的浏览器中整合，例如可以在Firefox中以插件的形式激活调用；</li>
</ol>
<p><span id="more-539"></span></p>
<p>详细的说明：<br />
1、专业截图——Snagit</p>
<blockquote><p><img src="http://www.92cm.com/jiazilong/2010/01/snagit.jpg" alt="Snagit" align="left" style="height:150px"/>一个非常优秀的屏幕、文本和视频捕获与转换程序。 可以捕获Windows屏幕、DOS屏幕；RM电影、游戏画面；菜单、窗口、客户区窗口、最后一个激活的窗口或用鼠标定义的区域。图象可被存为BMP、 PCX、TIF、GIF或JPEG格式，也可以存为系列动画。使用JPEG可以指定所需的压缩级(从1%到99%)。可以选择是否包括光标，添加水印。另外还具有自动缩放，颜色减少，单色转换，抖动，以及转换为灰度级。 此外，保存屏幕捕获的图象前，可以用其自带的编辑器编辑；也可以选择自动将其送至SnagIt打印机或Windows剪贴板中，也可以直接用E-mail 发送。 SnagIt具有将显示在Windows桌面上的文本块转换为机器可读文本的独特能力，这里甚至无需CUT和PASTE。 程序支持DDE，所以其他程序可以控制和自动捕获屏幕。新版还能嵌入Word、PowerPoint和IE浏览器中。</p></blockquote>
<p>这是商业软件，但国内已有较好的破解了，在<a href="http://www.greendown.cn">绿色下载站</a>就用。<br />
Snagit可以支持几乎所有类型的截图方式，并提供了一个相对强大的截图图片编辑处理工具。</p>
<p>2、图片存放——Flickr<br />
为了节约服务器的带宽资源与存储空间，图片需要找到一个长期、稳定、可靠、高效的存储服务空间，这里推荐使用Flickr。<br />
幸运的是，Snagit10之后提供了插件，其中就有一个<a href="http://www.techsmith.com/snagit/accessories/flickr.asp">Flickr的分享插件</a>，在其网站上就有，下载安装激活、配置即可使用。这样“截图——编辑——上传——获取图片URL”一条龙操作。</p>
<p>3、整合Firefox浏览器<br />
Snagit还提供了一个<a href="http://www.techsmith.com/snagit/accessories/firefox.asp">Firefox浏览器的插件</a>，让调用更轻松。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dayu.name/p/539.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS5下安装Memcached缓存优化系统</title>
		<link>http://www.dayu.name/p/519.html</link>
		<comments>http://www.dayu.name/p/519.html#comments</comments>
		<pubDate>Tue, 22 Jun 2010 06:21:15 +0000</pubDate>
		<dc:creator>DAYU</dc:creator>
				<category><![CDATA[Linux-CentOS-Ubuntu]]></category>

		<guid isPermaLink="false">http://www.dayu.name/?p=519</guid>
		<description><![CDATA[Memcached是高性能的，分布式的内存对象缓存系统，用于在动态应用中减少数据库负载，提升访问速度。 Memcached由Danga Interactive开发，用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次，用户700万。Memcached将数据库负载大幅度降低，更好的分配资源，更快速访问。 一.linux下安装Memcache服务器端 1.安装libevent： # ./configure –prefix=/usr # make # make install 2.测试libevent是否安装成功 # ls -al /usr/lib &#124; grep libevent 3.安装Memcache # ./configure –with-libevent=/usr # make #make install 安装完成后memcached的路径为：/usr/local/bin/memcached 4.测试是否成功安装memcached： # ls -al /usr/local/bin/mem* 二.安装Memcache的PHP扩展 1.安装Memcache的PHP扩展 # whereis phpize phpize: /usr/local/bin/phpize # phpize: /usr/local/bin/phpize Configuring for: PHP Api Version: 20041225 Zend Module Api No: [...]]]></description>
			<content:encoded><![CDATA[<p>Memcached是高性能的，分布式的内存对象缓存系统，用于在动态应用中减少数据库负载，提升访问速度。<br />
Memcached由Danga Interactive开发，用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次，用户700万。Memcached将数据库负载大幅度降低，更好的分配资源，更快速访问。 <span id="more-519"></span></p>
<p>一.linux下安装Memcache服务器端<br />
1.安装libevent：<br />
<code># ./configure –prefix=/usr<br />
# make<br />
# make install</code></p>
<p>2.测试libevent是否安装成功<br />
<code># ls -al /usr/lib | grep libevent</code></p>
<p>3.安装Memcache<br />
<code># ./configure –with-libevent=/usr<br />
# make<br />
#make install</code><br />
安装完成后memcached的路径为：/usr/local/bin/memcached</p>
<p>4.测试是否成功安装memcached：<br />
<code># ls -al /usr/local/bin/mem*</code></p>
<p>二.安装Memcache的PHP扩展<br />
1.安装Memcache的PHP扩展<br />
<code># whereis phpize<br />
phpize: /usr/local/bin/phpize<br />
# phpize: /usr/local/bin/phpize<br />
Configuring for:<br />
PHP Api Version:         20041225<br />
Zend Module Api No:      20060613<br />
Zend Extension Api No:   220060519<br />
# whereis php-config<br />
php-config: /usr/local/bin/php-config<br />
# ./configure –enable-memcache –with-php-config=/usr/local/bin/php-config –with-zlib-dir<br />
# make<br />
# make install</code><br />
如果不报错，安装以后会出现：<br />
<code>Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20060613/</code></p>
<p>2.把php.ini中的extension_dir = “./”修改为<br />
<code>extension_dir = “/usr/local/lib/php/extensions/no-debug-non-zts-20060613/”</code><br />
然后在下面添加：extension=memcache.so 来加载</p>
<p>3.启动Memcache的服务器端：<br />
<code># /usr/local/bin/memcached -p 11211 -u root -d -m 50 - 192.168.1.4 -c 256 -P /tm/memcached.pid</code><br />
命令行参数解释：<br />
-d选项是启动一个守护进程，<br />
-m是分配给Memcache使用的内存数量，单位是MB，我这里是10MB，<br />
-u是运行Memcache的用户，我这里是root，<br />
-l是监听的服务器IP地址，如果有多个地址的话，我这里指定了服务器的IP地址192.168.0.200，<br />
-p是设置Memcache监听的端口，我这里设置了12000，最好是1024以上的端口，<br />
-c选项是最大运行的并发连接数，默认是1024，我这里设置了256，按照你服务器的负载量来设定，<br />
-P是设置保存Memcache的pid文件，我这里是保存在 /tmp/memcached.pid，<br />
要注意的是如果你的服务器有防火墙的话注意端口问题。</p>
<p>4.如果要结束Memcache进程，执行：<br />
<code># kill `cat /tmp/memcached.pid`</code><br />
或者ps -ef找到pid，直接kill</p>
<p>5.重启apache</p>
<p>6.测试你的Memcache环境<br />
<code>< ?php<br />
$mem = new Memcache;<br />
$mem->connect("192.168.1.4",12000);<br />
$mem->set('key', 'This is a test!', 0, 60);<br />
$val = $mem->get('key');<br />
echo $val;<br />
?></code></p>
<p>7.让memcache在linux启动是自动启动，请编辑 /etc/rc.d/rc.local.加入：<br />
<code>/usr/local/bin/memcached -p 11211 -u root -d -m 50 - 192.168.1.4 -c 256 -P /tm/memcached.pid</code></p>
<p>三.wordpress启用memcache:<br />
1.安装object-cache.php；下载object-cache.php放到wp-content/目录下<br />
2.修改wp-config.php，添加进去一下内容：<br />
<code>global $memcached_servers;<br />
$memcached_servers = array('default' => array('192.168.1.4:11211'));</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dayu.name/p/519.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>让proftpd也可以用mysql轻松管理用户实现ftp磁盘配额</title>
		<link>http://www.dayu.name/p/516.html</link>
		<comments>http://www.dayu.name/p/516.html#comments</comments>
		<pubDate>Mon, 21 Jun 2010 10:03:05 +0000</pubDate>
		<dc:creator>DAYU</dc:creator>
				<category><![CDATA[Linux-CentOS-Ubuntu]]></category>

		<guid isPermaLink="false">http://www.dayu.name/?p=516</guid>
		<description><![CDATA[linux下配置ftp可以用proftpd，因为它可以与mysql深入整合，轻松实现用户管理，而且每个用户还能单独控制其磁盘使用配额。 一、源码安装 ./configure &#8211;with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql \ &#8211;with-includes=/data/amp/mysql/include/mysql \ &#8211;with-libraries=/data/amp/mysql/lib/mysql \ &#8211;prefix=/data/amp/proftpd make make install 二、设置proftpd的启动服务 (1)#cp proftpd.1.2.xxx/contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/proftpd (2)编辑proftpd文件 # vi /etc/rc.d/init.d/proftpd 将PATH=&#8221;$PATH:/usr/local/sbin&#8221;修改为 PATH=&#8221;$PATH:/usr/local/sbin:/data/amp/proftpd/sbin&#8221; (3)设置proftpd权限为可执行 #chmod +x /etc/rc.d/init.d/proftpd (4)将proftpd加入系统服务 #chkonfig &#8211;add proftpd 这样就可以用service proftpd start和service proftpd stop 和service proftpd restart来分别执行开启服务，停止服务与重启服务 三、启动ftp服务 # proftpd/sbin/proftpd &#8211; Fatal: Group: Unknown group &#8216;nogroup&#8217; on line 30 of &#8216;/data/amp/proftpd/etc/proftpd.conf&#8217; 若有报错，修改配置文件proftpd.conf Group [...]]]></description>
			<content:encoded><![CDATA[<p>linux下配置ftp可以用proftpd，因为它可以与mysql深入整合，轻松实现用户管理，而且每个用户还能单独控制其磁盘使用配额。<span id="more-516"></span><br />
一、源码安装</p>
<p>./configure &#8211;with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql \<br />
&#8211;with-includes=/data/amp/mysql/include/mysql \<br />
&#8211;with-libraries=/data/amp/mysql/lib/mysql \<br />
&#8211;prefix=/data/amp/proftpd</p>
<p>make</p>
<p>make install</p>
<p>二、设置proftpd的启动服务<br />
(1)#cp proftpd.1.2.xxx/contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/proftpd<br />
(2)编辑proftpd文件<br />
# vi /etc/rc.d/init.d/proftpd<br />
将PATH=&#8221;$PATH:/usr/local/sbin&#8221;修改为<br />
PATH=&#8221;$PATH:/usr/local/sbin:/data/amp/proftpd/sbin&#8221;<br />
(3)设置proftpd权限为可执行<br />
#chmod +x /etc/rc.d/init.d/proftpd<br />
(4)将proftpd加入系统服务<br />
#chkonfig &#8211;add proftpd<br />
这样就可以用service proftpd start和service proftpd stop 和service proftpd restart来分别执行开启服务，停止服务与重启服务</p>
<p>三、启动ftp服务<br />
# proftpd/sbin/proftpd<br />
 &#8211; Fatal: Group: Unknown group &#8216;nogroup&#8217; on line 30 of &#8216;/data/amp/proftpd/etc/proftpd.conf&#8217;<br />
 若有报错，修改配置文件proftpd.conf<br />
	Group				nobody<br />
默认是禁止匿名用户访问的</p>
<p>四、打开iptables中的21端口<br />
# vi /etc/sysconfig/iptables<br />
增加：<br />
-A RH-Firewall-1-INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 21 -j ACCEPT<br />
重启iptables<br />
# /etc/rc.d/init.d/iptables restart</p>
<p>五、整合mysql<br />
（1）增加mysql数据库用户： 账号proftpd : 密码password，并赋予proftpd数据库的权限</p>
<p>（2）proftpd配置文件增加如下内容：</p>
<p>##&#8212;&#8212;&#8212;&#8212; add by dayu for mysql users &#8212;&#8212;&#8212;&#8212;&#8212;##</p>
<p>##提高连接速度<br />
IdentLookups off<br />
UseReverseDNS off</p>
<p>#启用passiveport模式（若不配置也可以，但有的ftp客户端软件需要用这个尤其内网）<br />
PassivePorts 50000 50100</p>
<p>#&#8212;&#8212;&#8211; MySQL验证：load sql.mod for mysql authoritative &#8212;&#8212;&#8211;#<br />
# 配置FTP用户为MySQL数据库认证方式<br />
#SQLConnectInfo databaseName@hostName:port userName password<br />
SQLConnectInfo proftpd@localhost 账号proftpd 密码password<br />
#Backend表示用户认证方式为MySQL数据库的认证方式<br />
#Plaintext表示明文认证方式，排在最前面的为最先使用的方式<br />
SQLAuthTypes Backend Plaintext<br />
#校验数据表<br />
#SQLAuthenticate users groups usersetfast groupsetfast<br />
SQLAuthenticate users<br />
#指定 ftp用户数据表的名字和其中的字段名，表名可自行定义，字段名不要改动。<br />
SQLUserInfo ftpusers userid passwd uid gid homedir shell<br />
#指定ftp用户组数据表的名字和其中的字段名，这个数据表是可选的，字段名不要改动。<br />
#SQLGroupInfo ftpGroup groupname gid members<br />
#指定是否必须为FTP用户指定一个系统shell，off表示不用指定，on表示必须指定。为了系统安全应该指定为off。<br />
RequireValidShell off<br />
# 如果用户主目录不存在，则系统会根据此用户在用户数据表中的homedir字段的值新建一个目录<br />
#SQLHomedirOnDemand on<br />
SQLNegativeCache   on<br />
#SQLLogFile /var/log/proftpd.sql.log</p>
<p>#用户登录欢迎窗口中显示登录用户已访问次数<br />
SQLNamedQuery getlogins SELECT &#8220;count from ftpusers where userid=&#8217;%u&#8217;&#8221;<br />
SQLNamedQuery getlastlogin SELECT &#8220;lastlogin from ftpuser where userid=&#8217;%u&#8217;&#8221;<br />
SQLNamedQuery updatelogins UPDATE &#8220;count=count+1,host=&#8217;%h&#8217;,lastlogin=current_timestamp() WHERE userid=&#8217;%u&#8217;&#8221; ftpusers<br />
SQLShowInfo PASS &#8220;230&#8243; &#8220;You&#8217;ve logged on %{getlogins} times!&#8221;<br />
SQLLog PASS updatelogins</p>
<p>#&#8212;&#8212;&#8211; load sql.mod for mysql authoritative &#8212;&#8212;&#8211;#</p>
<p>#&#8212;&#8212;&#8211; 磁盘配额：load qudes.mod for Quota limit &#8212;&#8212;&#8211;#<br />
#打开磁盘限额引擎<br />
QuotaEngine on<br />
#设置磁盘限额<br />
QuotaDirectoryTally on<br />
#设置磁盘容量显示时的单位<br />
QuotaDisplayUnits Mb<br />
#设置磁盘限额日志文件<br />
QuotaLog &#8220;/var/log/proftpd.quota.log&#8221;<br />
#允许显示磁盘限额信息，ftp登录后可执行quote site quota命令查看当前磁盘使用情况<br />
QuotaShowQuotas on<br />
# 指定磁盘限额模块使用的数据库信息<br />
SQLNamedQuery get-quota-limit SELECT &#8220;name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM quotalimits \<br />
WHERE name = &#8216;%{0}&#8217; AND quota_type = &#8216;%{1}&#8217;&#8221;</p>
<p>SQLNamedQuery get-quota-tally SELECT &#8220;name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM quotatallies \<br />
WHERE name = &#8216;%{0}&#8217; AND quota_type = &#8216;%{1}&#8217;&#8221;</p>
<p>SQLNamedQuery update-quota-tally UPDATE &#8220;bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, \<br />
files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} \<br />
WHERE name = &#8216;%{6}&#8217; AND quota_type = &#8216;%{7}&#8217;&#8221; quotatallies</p>
<p>SQLNamedQuery insert-quota-tally INSERT &#8220;%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}&#8221;   quotatallies</p>
<p>QuotaLimitTable sql:/get-quota-limit<br />
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally<br />
#&#8212;&#8212;&#8212; load qudes.mod for Quota limit &#8212;&#8212;&#8211;#</p>
<p>（3）在iptables中增加passiveprot端口<br />
-A RH-Firewall-1-INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 50000:50100 -j ACCEPT</p>
<p>（4）建立mysql数据表<br />
CREATE TABLE `ftpusers` (<br />
  `userid` varchar(30) NOT NULL,<br />
  `passwd` varchar(80) NOT NULL,<br />
  `uid` int(11) unsigned NOT NULL,<br />
  `gid` int(11) unsigned NOT NULL,<br />
  `homedir` varchar(255) DEFAULT NULL,<br />
  `shell` varchar(255) DEFAULT NULL,<br />
  `count` int(10) unsigned NOT NULL,<br />
  `host` varchar(30) NOT NULL,<br />
  `lastlogin` datetime NOT NULL,<br />
  UNIQUE KEY `userid` (`userid`),<br />
  UNIQUE KEY `uid` (`uid`)<br />
);<br />
CREATE TABLE `quotalimits` (<br />
  `name` varchar(30) NOT NULL,<br />
  `quota_type` enum(&#8216;user&#8217;,'group&#8217;,'class&#8217;,'all&#8217;) NOT NULL,<br />
  `per_session` enum(&#8216;false&#8217;,'true&#8217;) NOT NULL,<br />
  `limit_type` enum(&#8216;soft&#8217;,'hard&#8217;) NOT NULL,<br />
  `bytes_in_avail` float unsigned NOT NULL,<br />
  `bytes_out_avail` float unsigned NOT NULL,<br />
  `bytes_xfer_avail` float unsigned NOT NULL,<br />
  `files_in_avail` int(10) unsigned NOT NULL,<br />
  `files_out_avail` int(10) unsigned NOT NULL,<br />
  `files_xfer_avail` int(10) unsigned NOT NULL<br />
);<br />
CREATE TABLE `quotatallies` (<br />
  `name` varchar(30) NOT NULL,<br />
  `quota_type` enum(&#8216;user&#8217;,'group&#8217;,'class&#8217;,'all&#8217;) NOT NULL,<br />
  `bytes_in_used` float unsigned NOT NULL,<br />
  `bytes_out_used` float unsigned NOT NULL,<br />
  `bytes_xfer_used` float unsigned NOT NULL,<br />
  `files_in_used` int(10) unsigned NOT NULL,<br />
  `files_out_used` int(10) unsigned NOT NULL,<br />
  `files_xfer_used` int(10) unsigned NOT NULL<br />
);</p>
<p>说明：<br />
#以上quotalimits表是FTP用户的磁盘限额配置信息，quotatallies表存放的是用户磁盘限额变动的信息。<br />
#quotatallies 表不需要作修改，由程序自动记录<br />
#下面是quotalimits 表中各字段的含意：<br />
quota_type 磁盘限额的鉴别<br />
bytes_in_avail 上传最大字节数，就是FTP用户空间容量<br />
bytes_out_avail 下载最大字节数<br />
bytes_xfer_avail 总共可传输的文件的最大字节数(上传和下载流量)<br />
files_in_avail 总共能上传文件的数目<br />
files_out_avail 能从服务器上下载文件的总数目<br />
files_xfer_avail 总共可传输文件的数目(上传和下载)</p>
<p>（5）建立用户：</p>
<p>如果想要一次增加一个新记录，可以使用INSERT语句：<br />
 INSERT INTO ftpUsers (userid, passwd, uid, gid, homedir, shell) values (&#8216;centre&#8217;, password(&#8216;centre&#8217;), 2001,2000, &#8216;/home/ftp&#8217;,'/usr/sbin/nologin&#8217;);</p>
<p>建立磁盘配额：</p>
<p>test 用户512000000byte限制</p>
<p>INSERT INTO quotalimits (name,quota_type,per_session,limit_type,bytes_in_avail,bytes_out_avail,bytes_xfer_avail,files_in_avail,files_out_avail,files_xfer_avail) VALUES (&#8216;test&#8217;, &#8216;user&#8217;, &#8216;true&#8217;, &#8216;hard&#8217;, 512000000, 0,0,0,0,0);</p>
<p>手动建立homedir，然后赋权777</p>
<p>（6）限制用户只在自己的主目录<br />
在配置文件中找到 DefaultRoot ~，去掉注释，使其激活</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dayu.name/p/516.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
