<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Marshal的博客]]></title> 
<link>http://www.marshal.sh.cn/index.php</link> 
<description><![CDATA[Marshal的个人博客，记叙自己的生活。]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Marshal的博客]]></copyright>
<item>
<link>http://www.marshal.sh.cn/post/489/</link>
<title><![CDATA[PHP获取当前url路径的函数及服务器变量]]></title> 
<author>Marshal &lt;admin@yourname.com&gt;</author>
<category><![CDATA[php]]></category>
<pubDate>Mon, 09 Aug 2010 03:27:16 +0000</pubDate> 
<guid>http://www.marshal.sh.cn/post/489/</guid> 
<description>
<![CDATA[ 
	说明：查询(query)的字符串 <br/>2，$_SERVER["REQUEST_URI"]<br/>说明：访问此页面所需的URI<br/><br/>3，$_SERVER["SCRIPT_NAME"]<br/>说明：包含当前脚本的路径<br/><br/>4，$_SERVER["PHP_SELF"]<br/>说明：当前正在执行脚本的文件名<br/><br/>实例：<br/>1，<a href="http://www.marshal.sh.cn/" target="_blank">http://www.marshal.sh.cn/</a> (直接打开主页)<br/>结果：<br/>$_SERVER["QUERY_STRING"] = ""<br/>$_SERVER["REQUEST_URI"] = "/"<br/>$_SERVER["SCRIPT_NAME"] = "/index.php"<br/>$_SERVER["PHP_SELF"]&nbsp;&nbsp;&nbsp;&nbsp; = "/index.php"<br/><br/>2，<a href="http://www.marshal.sh.cn/?p=222" target="_blank">http://www.marshal.sh.cn/?...</a> (附带查询)<br/>结果：<br/>$_SERVER["QUERY_STRING"] = "p=222"<br/>$_SERVER["REQUEST_URI"] = "/?p=222"<br/>$_SERVER["SCRIPT_NAME"] = "/index.php"<br/>$_SERVER["PHP_SELF"]&nbsp;&nbsp;&nbsp;&nbsp; = "/index.php"<br/><br/>3，<a href="http://www.marshal.sh.cn/index.php?p=222&q=biuuu" target="_blank">http://www.marshal.sh.cn/i...</a><br/>结果：<br/>$_SERVER["QUERY_STRING"] = "p=222&q=biuuu"<br/>$_SERVER["REQUEST_URI"] = "/index.php?p=222&q=biuuu"<br/>$_SERVER["SCRIPT_NAME"] = "/index.php"<br/>$_SERVER["PHP_SELF"]&nbsp;&nbsp;&nbsp;&nbsp; = "/index.php"<br/><br/>$_SERVER["QUERY_STRING"]获取查询语句，实例中可知，获取的是?后面的值<br/>$_SERVER["REQUEST_URI"] 获取<a href="http://www.marshal.sh.cn" target="_blank">http://www.marshal.sh.cn</a>后面的值，包括/<br/>$_SERVER["SCRIPT_NAME"] 获取当前脚本的路径，如：index.php<br/>$_SERVER["PHP_SELF"] 当前正在执行脚本的文件名<br/><br/><br/><br/><br/>当前url："http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']<br/><br/><br/><br/><br/><br/>总结一下，对于QUERY_STRING，REQUEST_URI，SCRIPT_NAME和PHP_SELF，深入了解将有利于我们在$_SERVER函数中正确调用这四个值。通过实例详解$_SERVER函数中 QUERY_STRING，REQUEST_URI，SCRIPT_NAME和PHP_SELF掌握四个变量之间的区别。<br/><br/>代码如下：<br/><br/><br/><br/>代码 <br/><br/><div class="code">&lt;?php<br/>echo $_SERVER&#91;&#039;DOCUMENT_ROOT&#039;&#93;.&quot;&lt;br&gt;&quot;; // 获得服务器文档根变量<br/>echo $_SERVER&#91;&#039;PHP_SELF&#039;&#93;.&quot;&lt;br&gt;&quot;; //获得执行该代码的文件服务器绝对路径的变量<br/>echo __FILE__.&quot;&lt;br&gt;&quot;; //获得文件的文件系统绝对路径的变量<br/>echo dirname(__FILE__); // 获得文件所在的文件夹路径的函数<br/>?&gt;<br/> </div><br/><br/><br/><div class="code">//server函数<br/>$_SERVER&#91;&quot;HTTP_REFERER&quot;&#93;=http://localhost/example/<br/>$_SERVER&#91;&quot;HTTP_ACCEPT_LANGUAGE&quot;&#93;=zh-cn<br/>$_SERVER&#91;&quot;HTTP_ACCEPT_ENCODING&quot;&#93;=gzip, deflate<br/>$_SERVER&#91;&quot;HTTP_USER_AGENT&quot;&#93;=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)<br/>$_SERVER&#91;&quot;HTTP_HOST&quot;&#93;=localhost<br/>$_SERVER&#91;&quot;HTTP_CONNECTION&quot;&#93;=Keep-Alive<br/>$_SERVER&#91;&quot;PATH&quot;&#93;=C:&#92;WINDOWS&#92;system32;C:&#92;WINDOWS;C:&#92;WINDOWS&#92;System32&#92;Wbem;C:&#92;Program Files&#92;Common Files&#92;Adobe&#92;AGL;C:&#92;Program Files&#92;MySQL&#92;MySQL Server 5.0&#92;bin;C:&#92;php;C:&#92;php&#92;ext<br/>$_SERVER&#91;&quot;SystemRoot&quot;&#93;=C:&#92;WINDOWS<br/>$_SERVER&#91;&quot;COMSPEC&quot;&#93;=C:&#92;WINDOWS&#92;system32&#92;cmd.exe<br/>$_SERVER&#91;&quot;PATHEXT&quot;&#93;=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH<br/>$_SERVER&#91;&quot;WINDIR&quot;&#93;=C:&#92;WINDOWS<br/>$_SERVER&#91;&quot;SERVER_SIGNATURE&quot;&#93;=<br/>Apache/2.0.55 (Win32) PHP/5.1.1 Server at localhost Port 80 &#92;&#92;使用的何服务器<br/>$_SERVER&#91;&quot;SERVER_SOFTWARE&quot;&#93;=Apache/2.0.55 (Win32) PHP/5.1.1<br/>$_SERVER&#91;&quot;SERVER_NAME&quot;&#93;=localhost &#92;&#92;服务器名称<br/>$_SERVER&#91;&quot;SERVER_ADDR&quot;&#93;=127.0.0.1<br/>$_SERVER&#91;&quot;SERVER_PORT&quot;&#93;=80 &#92;&#92;服务器端口<br/>$_SERVER&#91;&quot;REMOTE_ADDR&quot;&#93;=127.0.0.1<br/>$_SERVER&#91;&quot;DOCUMENT_ROOT&quot;&#93;=D:/example &#92;&#92;网站的主目录<br/>$_SERVER&#91;&quot;SERVER_ADMIN&quot;&#93;=sss@163.com &#92;&#92;安装APACHE时设置的邮箱<br/>$_SERVER&#91;&quot;SCRIPT_FILENAME&quot;&#93;=D:/example/example/servervalues.php &#92;&#92;当前的网页的绝对路径，<br/>$_SERVER&#91;&quot;REMOTE_PORT&quot;&#93;=1076 &#92;&#92;远程端口<br/>$_SERVER&#91;&quot;GATEWAY_INTERFACE&quot;&#93;=CGI/1.1<br/>$_SERVER&#91;&quot;SERVER_PROTOCOL&quot;&#93;=HTTP/1.1<br/>$_SERVER&#91;&quot;REQUEST_METHOD&quot;&#93;=GET<br/>$_SERVER&#91;&quot;QUERY_STRING&quot;&#93;=&#92;&#92; 获取？号后面的内容<br/>$_SERVER&#91;&quot;REQUEST_URI&quot;&#93;=例子：/example/servervalues.php?a=1&amp; amp;b=2<br/>$_SERVER&#91;&quot;SCRIPT_NAME&quot;&#93;=例子：/example/servervalues.php<br/>$_SERVER&#91;&quot;PHP_SELF&quot;&#93;=/example/servervalues.php &#92;&#92;返回当前网页的相对路径.<br/>$_SERVER&#91;&quot;REQUEST_TIME&quot;&#93;=1179190013 &#92;&#92;运行时间 单位为十万分之一毫秒<br/>$_SERVER&#91;&quot;argv&quot;&#93;=Array<br/>$_SERVER&#91;&quot;argc&quot;&#93;=0</div><br/><br/>1，$_SERVER["QUERY_STRING"]<br/>说明：查询(query)的字符串<br/>2，$_SERVER["REQUEST_URI"]<br/>说明：访问此页面所需的URI<br/>3，$_SERVER["SCRIPT_NAME"]<br/>说明：包含当前脚本的路径<br/>4，$_SERVER["PHP_SELF"]<br/>说明：当前正在执行脚本的文件名<br/>实例：<br/>1，<a href="http://www.marshal.sh.cn" target="_blank">http://www.marshal.sh.cn</a> / (直接打开主页)<br/>结果：<br/>$_SERVER["QUERY_STRING"] = “”<br/>$_SERVER["REQUEST_URI"] = “/”<br/>$_SERVER["SCRIPT_NAME"] = “/index.php”<br/>$_SERVER["PHP_SELF"] = “/index.php”<br/>2，<a href="http://www.marshal.sh.cn/?p=222" target="_blank">http://www.marshal.sh.cn/?...</a> (附带查询)<br/>结果：<br/>$_SERVER["QUERY_STRING"] = “p=222″<br/>$_SERVER["REQUEST_URI"] = “/?p=222″<br/>$_SERVER["SCRIPT_NAME"] = “/index.php”<br/>$_SERVER["PHP_SELF"] = “/index.php”<br/>3，<a href="http://www.marshal.sh.cn" target="_blank">http://www.marshal.sh.cn</a> /index.php?p=222&q=biuuu<br/>结果：<br/>$_SERVER["QUERY_STRING"] = “p=222&q=biuuu”<br/>$_SERVER["REQUEST_URI"] = “/index.php?p=222&q=biuuu”<br/>$_SERVER["SCRIPT_NAME"] = “/index.php”<br/>$_SERVER["PHP_SELF"] = “/index.php”<br/>$_SERVER["QUERY_STRING"]获取查询语句，实例中可知，获取的是?后面的值<br/>$_SERVER["REQUEST_URI"] 获取<a href="http://www.marshal.sh.cn" target="_blank">http://www.marshal.sh.cn</a>后面的值，包括/<br/>$_SERVER["SCRIPT_NAME"] 获取当前脚本的路径，如：index.php<br/>$_SERVER["PHP_SELF"] 当前正在执行脚本的文件名<br/><br/><br/>----------------------<br/><br/>代码 <br/><br/><br/><?php<br/>/**<br/>__FILE__ ,<br/>getcwd(),<br/>$_SERVER["REQUEST_URI"],<br/>$_SERVER["SCRIPT_NAME"],<br/>$_SERVER["PHP_SELF"],<br/>$_SERVER["SCRIPT_FILENAME"],<br/><br/>来观察一下这些变量或函数的异同.<br/>假设有一个请求地址为: <a href="http://localhost:8080/test.php/age=20" target="_blank">http://localhost:8080/test...</a><br/>而 test.php 的完整路径是: D:/server/www/example/test.php<br/>1) getcwd()<br/>将得到浏览器请求的页面文件所在的目录. 即test.php 文件所在的目录: D:/server/www/example/ ,<br/>如果在 test.php 执行了 require 或 include 语句, 比如 inculde(”test_dir/test2.php”),<br/>那么在 test2.php 里 getcwd()函数 返回的也将是 test.php 所在的目录.<br/>2) __FILE__<br/>一个魔术变量, 用它将得到 __FILE__ 变量所在文件的完整路径,<br/>比如: test.php 里 __FILE__ 将得到 D:/server /www/example/test.php ,<br/>test_dir/test2.php 里的 __FILE__ 将得到 D:/server /www/example/test_dir/test2.php<br/><br/>3) $_SERVER["SCRIPT_FILENAME"]<br/>将得到浏览器请求的页面文件的完整路径.<br/>test.php 和 test_dir/test2.php 里用 $_SERVER["SCRIPT_NAME"] 都将得到 D:/server/www/example/test.php.<br/><br/>4) $_SERVER["SCRIPT_NAME"]<br/>将得到浏览器请求的页面文件的文件名,注意: 与 $_SERVER["SCRIPT_NAME"] 不同, 此变量只得到文件名而不包含路径,<br/>在 test.php 与 test_dir/test2.php 用$_SERVER["SCRIPT_NAME"] 得到的都将是 test.php.<br/>当然, 在test.php 与 test_dir/test2.php 执行 basename($_SERVER["SCRIPT_FILENAME"]) 与 $_SERVER["SCRIPT_NAME"] 相同.<br/>执行 在test.php 与 test_dir/test2.php 执行 realpath(”test.php”) 得到的结果与 $_SERVER["SCRIPT_FILENAME"] 相同.<br/><br/>5) $_SERVER["PHP_SELF"]<br/>将得到浏览器请求页面的文件名, 并剥掉问号 ? 后的内容, 注意:不包含路径,<br/>比如在客户端里请求 <a href="http://localhost:8080" target="_blank">http://localhost:8080</a> /test.php?age=20&name=Tom,<br/>那么 test.php 和 test_dir/test2.php 的 $_SERVER["PHP_SELF"] 都将得到 “test.php”。 “age=20&name=Tom”被剥掉。<br/>而如果客户端里请求 <a href="http://localhost:8080/test.php" target="_blank">http://localhost:8080/test...</a> /age=20&name=Tom,<br/>那么 test.php 和 test_dir/test2.php 的 $_SERVER["PHP_SELF"] 都将得到 “test.php /age=20&name=Tom”。<br/><br/>6) $_SERVER["REQUEST_URI"]<br/>将得到浏览器请求页面的文件名, 以及文件名之后的所有内容(注意: 井号 # 之后的内容将被略去),<br/>比如在客户端里请求 <a href="http://localhost:8080" target="_blank">http://localhost:8080</a> /test.php?age=20&name=Tom,<br/>那么 test.php 和 test_dir/test2.php 的 $_SERVER["REUEST_URI"] 都将得到 “test.php”。 “age=20&name=Tom”被剥掉。<br/>而如果客户端里请求 <a href="http://localhost:8080/test.php" target="_blank">http://localhost:8080/test...</a> /age=20&name=Tom,<br/>那么 test.php 和 test_dir/test2.php 的 $_SERVER["REQUEST_URI"] 都将得到 “test.php /age=20&name=Tom”。<br/>*/<br/><br/>// test.php:<br/>echo “test1.php variables <br />”;<br/>echo “getcwd: “, getcwd(), “<br />”;<br/>echo “__FILE__: “, __FILE__, “<br />”;<br/>echo “REQUEST_URI: “, $_SERVER["REQUEST_URI"], “<br />”;<br/>echo “SCRIPT_NAME: “, $_SERVER["SCRIPT_NAME"], “<br />”;<br/>echo “PHP_SELF: “, $_SERVER["PHP_SELF"], “<br />”;<br/>echo “SCRIPT_FILENAME “, $_SERVER["SCRIPT_FILENAME"] , “<br />”;<br/><br/>// 把 test2.php 包含进来, 在 test2.php 里输出上面的变量,看有什么不同:<br/>include_once(”test2/test2.php”);<br/><br/>?><br/>Tags - <a href="http://www.marshal.sh.cn/tags/php/" rel="tag">php</a> , <a href="http://www.marshal.sh.cn/tags/%25E8%258E%25B7%25E5%258F%2596/" rel="tag">获取</a> , <a href="http://www.marshal.sh.cn/tags/%25E8%25B7%25AF%25E5%25BE%2584/" rel="tag">路径</a>
]]>
</description>
</item><item>
<link>http://www.marshal.sh.cn/post/475/</link>
<title><![CDATA[优化的my.ini[mysql]．1500在线．突破最大连接数]]></title> 
<author>Marshal &lt;admin@yourname.com&gt;</author>
<category><![CDATA[php]]></category>
<pubDate>Tue, 08 Dec 2009 02:59:35 +0000</pubDate> 
<guid>http://www.marshal.sh.cn/post/475/</guid> 
<description>
<![CDATA[ 
	<div class="code"><br/>&#91;mysqld&#93;<br/>basedir=D:/mysql<br/>#bind-address=ip<br/>datadir=D:/mysql/data<br/>#language=D:/mysql/share/your language directory<br/>#slow query log#=<br/>#tmpdir#=<br/>#port=3306<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;= max_connections=1500<br/>skip-locking<br/>#skip-networking<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= key_buffer=384M<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= max_allowed_packet=1M<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= table_cache=512<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= sort_buffer=2M<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= record_buffer=2M<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= thread_cache=8<br/># Try number of CPU&#039;s*2 for thread_concurrency<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= thread_concurrency=8<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= myisam_sort_buffer_size=64M<br/>#set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= connect_timeout=5<br/>#set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= wait_timeout=5<br/>server-id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 1<br/>&#91;isamchk&#93;<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= key_buffer=128M<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= sort_buffer=128M<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= read_buffer=2M<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= write_buffer=2M<br/>&#91;myisamchk&#93;<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= key_buffer=128M<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= sort_buffer=128M<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= read_buffer=2M<br/>set-variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= write_buffer=2M<br/>&#91;WinMySQLadmin&#93;<br/>Server=D:/mysql/bin/mysqld-nt.exe</div><br/>Tags - <a href="http://www.marshal.sh.cn/tags/mysql/" rel="tag">mysql</a> , <a href="http://www.marshal.sh.cn/tags/my/" rel="tag">my</a> , <a href="http://www.marshal.sh.cn/tags/ini/" rel="tag">ini</a> , <a href="http://www.marshal.sh.cn/tags/%25E4%25BC%2598%25E5%258C%2596/" rel="tag">优化</a> , <a href="http://www.marshal.sh.cn/tags/%25E8%25AE%25BE%25E7%25BD%25AE/" rel="tag">设置</a>
]]>
</description>
</item><item>
<link>http://www.marshal.sh.cn/post/462/</link>
<title><![CDATA[Discuz积分合并或删减的sql语句]]></title> 
<author>Marshal &lt;admin@yourname.com&gt;</author>
<category><![CDATA[php]]></category>
<pubDate>Sun, 30 Aug 2009 11:33:50 +0000</pubDate> 
<guid>http://www.marshal.sh.cn/post/462/</guid> 
<description>
<![CDATA[ 
	注明：extcredits1=积分1 extcredits2=积分2 extcredits3=积分3<br/><br/>删除积分1，把积分2转移到积分1的sql<br/>清空积分1：UPDATE cdb_members SET extcredits1=0<br/>转移积分2：UPDATE cdb_members SET extcredits1=extcredits2<br/><br/>把积分1、积分2合并，最终取用积分1<br/>积分合并：UPDATE cdb_members SET extcredits1=extcredits1+extcredits2<br/>清空积分2：UPDATE cdb_members SET extcredits2=0<br/><br/>把积分2、积分3合并成积分1<br/>积分合并：UPDATE cdb_members SET extcredits1=extcredits2+extcredits3<br/>清空积分2：UPDATE cdb_members SET extcredits2=0<br/>清空积分3：UPDATE cdb_members SET extcredits3=0<br/><br/>在合并积分时，你也可以使用减的方法<br/>例如将积分2减去积分3得出积分1：UPDATE cdb_members SET extcredits1=extcredits2-extcredits3<br/>Tags - <a href="http://www.marshal.sh.cn/tags/discuz/" rel="tag">discuz</a> , <a href="http://www.marshal.sh.cn/tags/%25E7%25A7%25AF%25E5%2588%2586/" rel="tag">积分</a>
]]>
</description>
</item><item>
<link>http://www.marshal.sh.cn/php-base64_decode-gzinflate-compression-encoding-and-decoding-code/</link>
<title><![CDATA[PHP base64_decode+gzinflate压缩编码和解码代码]]></title> 
<author>Marshal &lt;admin@yourname.com&gt;</author>
<category><![CDATA[php]]></category>
<pubDate>Tue, 24 Mar 2009 15:44:07 +0000</pubDate> 
<guid>http://www.marshal.sh.cn/php-base64_decode-gzinflate-compression-encoding-and-decoding-code/</guid> 
<description>
<![CDATA[ 
	这两天服务器有被人挂马了，找到了木马，却被加密，找了很多破解方法都不行，也就是上两篇日志发的内容，<br/>试了这个方法不错！<br/><br/><strong>PHP目前在网络中被用的越来越多，加密解密的话题也一直没有停息过。下面简单介绍一下base64_decode+gzinflate压缩编码和解码代码方法，就是通常我们在程序中见的eval(gzinflate(base64_decode(&#039;加密代码&#039;))); 形式的加密方法。<br/>网山有此类方法，但是由于局部缺少了某些字符，导致了加密后无法使用的情况，大家有兴趣可以去试试看，本人在原基础上做了简单修改，经本人测试无错。</strong><br/><span style="color: #FF0000;">注意：解密时请不要用汉语及带空格的名字做文件名</span><br/><br/><br/><div class="code">&lt;?php<br/>function encode_file_contents($filename) &#123;<br/>$type=strtolower(substr(strrchr($filename,&#039;.&#039;),1));<br/>if(&#039;php&#039;==$type &amp;&amp; is_file($filename) &amp;&amp; is_writable($filename))&#123;// 如果是PHP文件 并且可写 则进行压缩编码<br/>$contents = file_get_contents($filename);// 判断文件是否已经被编码处理<br/>$pos = strpos($contents,&#039;powered by arzn QQ:1314778&#039;);<br/>if(false === $pos &#124;&#124; $pos&gt;100)&#123; // 去除PHP文件注释和空白，减少文件大小<br/>$contents = php_strip_whitespace($filename);<br/>// 去除PHP头部和尾部标识<br/>$headerPos = strpos($contents,&#039;&lt;?php&#039;);<br/>$footerPos = strrpos($contents,&#039;?&gt;&#039;);<br/>$contents = substr($contents,$headerPos+5,$footerPos-$headerPos);<br/>$encode = base64_encode(gzdeflate($contents));// 开始编码<br/>$encode = &#039;&lt;?php&#039;.&quot;&#92;n eval(gzinflate(base64_decode(&quot;.&quot;&#039;&quot;.$encode.&quot;&#039;&quot;.&quot;)));&#92;n&#92;n?&gt;&quot;;<br/>return file_put_contents($filename,$encode);<br/>&#125;<br/>&#125;<br/>return false;<br/>&#125;<br/>//调用函数<br/>$filename=&#039;code.php&#039;;<br/>encode_file_contents($filename);<br/>echo &quot;OK,加密完成！&quot;<br/>?&gt;</div><br/><br/>压缩解码（解密）代码：<br/><br/><br/><br/><div class="code">&lt;?php <br/>$Code = &#039;这里填写要解密的编码&#039;; // base64编码 <br/>$File = &#039;decoded.php&#039;;//解码后保存的文件 <br/>$Temp = base64_decode($Code); <br/>$temp = gzinflate($Temp); <br/>$FP = fopen($File,&quot;w&quot;); <br/>fwrite($FP,$temp); <br/>fclose($FP); <br/>echo &quot;解密成功！&quot;; <br/>?&gt;</div><br/><br/><br/>Tags - <a href="http://www.marshal.sh.cn/tags/php/" rel="tag">php</a> , <a href="http://www.marshal.sh.cn/tags/base64/" rel="tag">base64</a> , <a href="http://www.marshal.sh.cn/tags/decode/" rel="tag">decode</a> , <a href="http://www.marshal.sh.cn/tags/gzinflate/" rel="tag">gzinflate</a> , <a href="http://www.marshal.sh.cn/tags/%25E8%25A7%25A3%25E7%25A0%2581/" rel="tag">解码</a> , <a href="http://www.marshal.sh.cn/tags/%25E5%258A%25A0%25E5%25AF%2586/" rel="tag">加密</a>
]]>
</description>
</item><item>
<link>http://www.marshal.sh.cn/post/431/</link>
<title><![CDATA[PHP base64_decode+gzinflate压缩编码和解码代码]]></title> 
<author>Marshal &lt;admin@yourname.com&gt;</author>
<category><![CDATA[php]]></category>
<pubDate>Tue, 24 Mar 2009 07:42:54 +0000</pubDate> 
<guid>http://www.marshal.sh.cn/post/431/</guid> 
<description>
<![CDATA[ 
	刚换了一个主题，却发现页脚footer.php被加密了，里面只有下面这样一段代码：<br/><br/><br/><div class="code">&lt;? eval(gzinflate(base64_decode(&#039; <br/>bZC9bsMwDITnFOg7XD21g+PdVWSgS7t1CZCxkCLa <br/>EixLqqTECNCHrxX3ZwkXHu7IDyA7zh7qGpIG49B7 <br/>nymirvn93WbDGmXOq+qCDhgofySjSIr4+PSMrkR/ <br/>M0UvEkbtqhVTFRtggUNRMoMjBXlpwQR0pH5X6ZxD <br/>2zTzPG8nMdLnyRzH7dFPFX931jjCgWQymfByMlZR <br/>ZI3gEE7dRswktU/ZuGEgGtMKWgh4W12U9dcS4Qvi <br/>LIwV0hL6SASRW+x9uIXNPswha5roB4mDjypESgn7 <br/>q124rAnLtVjq9yH/XXp1uQqdJ8tZ9w0= <br/>‘))); ?&gt;</div><br/><br/>这让我咋整，我想添加一段统计代码都不知道加到哪里好，其实我也明白作者的意思，主要是不想有些人随便修改自己的版权和作者信息而已。可是我想加入自己的一些东西就比较麻烦了。怎么办？<a href="http://www.marshal.sh.cn/tags/google/" target="_blank" title="http://www.marshal.sh.cn/tags/google/" class="mykeyword">Google</a>之。<br/><br/>在网上看到这样一篇文章PHP base64_decode+gzinflate压缩编码和解码代码，详细介绍了PHP base64_decode+gzinflate加密和解密的方法。<br/><br/>注意：解密时请不要用汉语及带空格的名字做文件名。<br/><br/>加密代码：<br/><br/><br/><div class="code">&lt;?php <br/>function encode_file_contents($filename) &#123; <br/>$type=strtolower(substr(strrchr($filename,’.&#039;),1)); <br/>if(’php’==$type &amp;&amp; is_file($filename) &amp;&amp; is_writable($filename))&#123;// 如果是PHP文件 并且可写 则进行压缩编码 <br/>$contents = file_get_contents($filename);// 判断文件是否已经被编码处理 <br/>$pos = strpos($contents,’powered by arzn QQ:1314778′); <br/>if(false === $pos &#124;&#124; $pos&gt;100)&#123; // 去除PHP文件注释和空白，减少文件大小 <br/>$contents = php_strip_whitespace($filename); <br/>// 去除PHP头部和尾部标识 <br/>$headerPos = strpos($contents,’&lt;?php’); <br/>$footerPos = strrpos($contents,’?&gt;’); <br/>$contents = substr($contents,$headerPos+5,$footerPos-$headerPos); <br/>$encode = base64_encode(gzdeflate($contents));// 开始编码 <br/>$encode = ‘&lt;?php’.&quot;&#92;n eval(gzinflate(base64_decode(&quot;.&quot;’&quot;.$encode.&quot;’&quot;.&quot;)));&#92;n&#92;n?&gt;&quot;; <br/>return file_put_contents($filename,$encode); <br/>&#125; <br/>&#125; <br/>return false; <br/>&#125; <br/>//调用函数 <br/>$filename=’code.php’; <br/>encode_file_contents($filename); <br/>echo &quot;OK,加密完成！&quot; <br/>?&gt;</div><br/><br/>解密代码：<br/><br/><br/><div class="code">&lt;?php&nbsp;&nbsp;<br/>$Code = ‘这里填写要解密的编码’; // base64编码&nbsp;&nbsp;<br/>$File = ‘decoded.php’;//解码后保存的文件&nbsp;&nbsp;<br/>$Temp = base64_decode($Code);&nbsp;&nbsp;<br/>$temp = gzinflate($Temp);&nbsp;&nbsp;<br/>$FP = fopen($File,&quot;w&quot;);&nbsp;&nbsp;<br/>fwrite($FP,$temp);&nbsp;&nbsp;<br/>fclose($FP);&nbsp;&nbsp;<br/>echo &quot;解密成功！&quot;;&nbsp;&nbsp;<br/>?&gt;</div><br/><br/>然后下面请注意，尤其是不懂PHP的筒子们！下面讲讲我这样一个没有PHP知识的人，解密那段代码的详细过程！<br/><br/>首先，打开你的文本编辑器，比如记事本，我用的是Notepad++，新建一个文本文件，按照那个解密代码，把我的那个footer.php文件里的密码输入进去，然后就类似下面：<br/><br/><br/><div class="code">&lt;?php <br/>$Code = ‘bZC9bsMwDITnFOg7XD21g+PdVWSgS7t1CZCxkCLa <br/>EixLqqTECNCHrxX3ZwkXHu7IDyA7zh7qGpIG49B7 <br/>nymirvn93WbDGmXOq+qCDhgofySjSIr4+PSMrkR/ <br/>M0UvEkbtqhVTFRtggUNRMoMjBXlpwQR0pH5X6ZxD <br/>2zTzPG8nMdLnyRzH7dFPFX931jjCgWQymfByMlZR <br/>ZI3gEE7dRswktU/ZuGEgGtMKWgh4W12U9dcS4Qvi <br/>LIwV0hL6SASRW+x9uIXNPswha5roB4mDjypESgn7 <br/>q124rAnLtVjq9yH/XXp1uQqdJ8tZ9w0=‘; // base64编码 <br/>$File = ‘decoded.php’;//解码后保存的文件 <br/>$Temp = base64_decode($Code); <br/>$temp = gzinflate($Temp); <br/>$FP = fopen($File,&quot;w&quot;); <br/>fwrite($FP,$temp); <br/>fclose($FP); <br/>echo &quot;解密成功！&quot;; <br/>?&gt;</div><br/><br/>那段红色的部分，就是我footer.php文件里面本身的加密的代码。然后把这个文件保存，随便起个名字，但是一定要是PHP格式，我的是test.php。注意：上面那个decoded.php就是解密完成后的文件名，这个你也可以修改。<br/><br/>然后，把这个test.php文件上传到你空间的根目录，其实其他目录也可以，但是需要能够web访问。我就直接放在博客的根目录了。<br/><br/>然后通过web访问，我的是<a href="http://www.nonozone.net/test.php" target="_blank">http://www.nonozone.net/te...</a>。本来应该提示“解密成功”的，但是我没有看到，但是在服务器已经看到多了一个decoded.php文件了，打开一看，呵呵已经解密啦！！！解密后的文件是这样的！<br/><br/><br/><div class="code">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;?php get_sidebar(); ?&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;footer&quot;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt; designed by: &lt;a href=&quot;http://www.makequick.com&quot;&gt;Online Website Builder&lt;/a&gt; and: &lt;a href=&quot;http://www.webhostinggeeks.com&quot;&gt;Web Hosting &lt;/a&gt;Geeks &#124; available free at: Top&lt;a href=&quot;http://www.topwpthemes.com&quot;&gt; Wordpress Themes&lt;/a&gt;&lt;/p&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; <br/>&lt;/div&gt; <br/>&lt;/body&gt; <br/>&lt;/html&gt;</div><br/><br/>怎么样，这样看就比较正常了。然后把这个decoded.php修改为footer.php替代原本的文件，就OK了！<br/><br/>好啦，就这样了。写这个文章真累！<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>Tags - <a href="http://www.marshal.sh.cn/tags/base64%252C/" rel="tag">base64,</a> , <a href="http://www.marshal.sh.cn/tags/php%252C/" rel="tag">php,</a> , <a href="http://www.marshal.sh.cn/tags/wordpress%252C/" rel="tag">wordpress,</a> , <a href="http://www.marshal.sh.cn/tags/%25E5%258A%25A0%25E5%25AF%2586/" rel="tag">加密</a>
]]>
</description>
</item><item>
<link>http://www.marshal.sh.cn/post/430/</link>
<title><![CDATA[PHP使用eval(gzinflate(str_rot13(base64_decode(BASE64加密后内容))))核心代码的解密]]></title> 
<author>Marshal &lt;admin@yourname.com&gt;</author>
<category><![CDATA[php]]></category>
<pubDate>Tue, 24 Mar 2009 07:41:22 +0000</pubDate> 
<guid>http://www.marshal.sh.cn/post/430/</guid> 
<description>
<![CDATA[ 
	如果您要是找Gzinflate(Base64_decode("codes"))的破解方法,另一篇Php使用N层加密eval(Gzinflate(Base64_decode("codes")))的破解才是您要寻找的正确答案.点这里打开.<br/><br/>下非扩展方式的php加密方法：<br/>这里有个在线的，还不错。木马防杀还行，要保护代码可就不行了。<br/>对应的写了一个简单的解密的，<br/>专门针对eval。这个原理很有用途。<br/>特别说明:此解密程序好像一定得在PHP5上面使用,<br/>我在PHP4上面测试eval(gzinflate(str_rot13(base64_decode('BASE64加密后内容'))))内加密的代码始终无法正常解密.<br/><br/><div class="code">&lt;?php<br/>//已经加密的文件内容 <br/>$a=&quot;eval(gzinflate(str_rot13(base64_decode(&#039;这里面放BASE64代码&#039;))));&quot;; <br/>function decodephp($a) &#123;&nbsp;&nbsp;<br/>$max_level=300; //最大层数&nbsp;&nbsp;<br/> for($i=0;$i&lt;$max_level;$i++) &#123;&nbsp;&nbsp; <br/>&nbsp;&nbsp;ob_start();&nbsp;&nbsp; <br/>&nbsp;&nbsp;eval(str_replace(&#039;eval&#039;,&#039;echo&#039;,$a));&nbsp;&nbsp; <br/>&nbsp;&nbsp;$a = ob_get_clean();&nbsp;&nbsp; <br/>&nbsp;&nbsp;if(strpos($a,&#039;eval(gzinflate(str_rot13(base64_decode&#039;)===false) &#123;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp; return $a;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/> &#125; <br/>&#125; <br/>echo decodephp($a);<br/>?&gt;</div><br/><br/><br/>Tags - <a href="http://www.marshal.sh.cn/tags/base64%252C/" rel="tag">base64,</a> , <a href="http://www.marshal.sh.cn/tags/gzinflate%252C/" rel="tag">gzinflate,</a> , <a href="http://www.marshal.sh.cn/tags/eval%2528gzinflate%2528str_rot13%2528%2528base64_decode%2528%2526quot%253Bcodes%2526quot%253B%2529%2529%2529%2529%253B/" rel="tag">eval(gzinflate(str rot13((base64 decode(&quot;codes&quot;))));</a>
]]>
</description>
</item><item>
<link>http://www.marshal.sh.cn/post/333/</link>
<title><![CDATA[freebsd上虚拟主机配置全过程]]></title> 
<author>Marshal &lt;admin@yourname.com&gt;</author>
<category><![CDATA[php]]></category>
<pubDate>Tue, 11 Mar 2008 08:52:14 +0000</pubDate> 
<guid>http://www.marshal.sh.cn/post/333/</guid> 
<description>
<![CDATA[ 
	1、了解所需软件下载并建立软件安装目录（个人习惯方便管理）<br/>#mkdir -p /data/soft/<a href="http://www.marshal.sh.cn/tags/apache/" target="_blank" title="http://www.marshal.sh.cn/tags/apache/" class="mykeyword">apache</a>20<br/>#mkdir /data/soft/mysql50<br/>#mkdir /data/soft/php5<br/>#mkdir /data/soft/proftpd<br/>#mkdir /data/www<br/>#mkdir /data/dba<br/><br/><br/>2、安装apache<br/><br/>#tar jxvf httpd-2.0.59.tar.bz2<br/>#cd httpd-2.0.59<br/>#./configure --prefix=/data/soft/apache20 --enable-so<br/>#make ; make install<br/><br/>3、安装mysql<br/>#pw groupadd mysql -g 500<br/>#pw useradd -n mysql -u 500 -g mysql -d /data/soft/mysql50 -m -s /sbin/nologin<br/>#tar zxvf mysql-5.0.37.tar.gz<br/>#cd mysql-5.0.37<br/>#./configure --prefix=/data/soft/mysql50 --with-charset=gbk<br/>#make ; make install<br/>#cp support-files/my-medium.cnf /etc/my.cnf<br/>#./scripts/mysql_install_db --user=mysql<br/># chown -R root /data/soft/mysql50<br/># chown -R root /data/soft/mysql50/bin<br/># chown -R root /data/soft/mysql50/var<br/># chown -R root /data/soft/mysql50/var/mysql<br/># chown -R root /data/soft/mysql50/var/mysql/*<br/># chgrp -R mysql /data/soft/mysql50<br/># chgrp -R mysql /data/soft/mysql50/bin<br/># chgrp -R mysql /data/soft/mysql50/var<br/># chgrp -R mysql /data/soft/mysql50/var/mysql<br/># chgrp -R mysql /data/soft/mysql50/var/mysql/*<br/># chmod 777 /data/soft/mysql50/var<br/># chmod 777 /data/soft/mysql50/var/mysql<br/># chmod 777 /data/soft/mysql50/var/mysql/*<br/>#/data/soft/mysql50/bin/mysqld_safe --user=mysql &<br/>#/data/soft/mysql50/bin/mysqladmin -u root password 'new-password'<br/><br/>3、安装php<br/># tar jxvf php-5.2.1.tar.bz2<br/># cd php-5.2.1<br/># ./configure --prefix=/data/soft/php5 --with-apxs2=/data/soft/apache20/bin/apxs --with-mysql=/data/soft/mysql50 --enable-track-vars --enable-force-cgi-redirect --enable-pic --enable-inline-optimiation --enable-memory-limit --enable-bcmath --enable-shmop --enable-versioning --enable-calendar --enable-dbx --enable-dio --enable-mcal --with-config-file-path=/data/soft/apache20/conf<br/># make ; make install<br/># cp php.ini-dist /data/soft/apache22/conf/php.ini<br/><br/>4、整合apache与php<br/># cd /data/soft/apache22/conf/<br/># ee httpd.conf<br/>修改 Listen xxx.xxx.xxx.xxx:80 //你自己的ip<br/>找到 LoadModule php5_module&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modules/libphp5.so<br/>加入 AddType application/x-httpd-php .php <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddType application/x-httpd-php .php3 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddType application/x-httpd-php .phtml<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddType application/x-httpd-php-source.phps <br/>查找 ServerAdmin 将邮箱改为你自己的邮箱<br/>查找 DocumentRoot "/data/soft/apache22/htdocs"将目录更改为你自己站点的目录<br/>查找 DirectoryIndex 加入 index.php index.php3<br/>查找 AddDefaultCharset ISO-8859-1 将其改为 gb2312<br/>保存退出<br/><br/>Tags - <a href="http://www.marshal.sh.cn/tags/freebsdphp/" rel="tag">freebsdphp</a> , <a href="http://www.marshal.sh.cn/tags/apache/" rel="tag">apache</a> , <a href="http://www.marshal.sh.cn/tags/sever/" rel="tag">sever</a> , <a href="http://www.marshal.sh.cn/tags/%25E9%2585%258D%25E7%25BD%25AE/" rel="tag">配置</a>
]]>
</description>
</item><item>
<link>http://www.marshal.sh.cn/post/315/</link>
<title><![CDATA[apache服务器限制IP连接数]]></title> 
<author>Marshal &lt;admin@yourname.com&gt;</author>
<category><![CDATA[php]]></category>
<pubDate>Fri, 22 Feb 2008 08:19:51 +0000</pubDate> 
<guid>http://www.marshal.sh.cn/post/315/</guid> 
<description>
<![CDATA[ 
	要使<a href="http://www.marshal.sh.cn/tags/apache/" target="_blank" title="http://www.marshal.sh.cn/tags/apache/" class="mykeyword">apache</a>服务器做对同一IP地址的连接限制，需要mod_limitipconn来实现。一般需要手动编译。不过模块作者也提供了一些编译好的模块，根据自己的apache版本可以直接使用。<br/>1。编译方式：<br/>tar zxvf mod_limitipconn-0.XX.tar.gz<br/>cd mod_limitipconn-0.XX<br/>make apxs=/usr/local/apache/bin/apxs&nbsp;&nbsp;-----这里要按你自己的路径设置<br/>make install apxs=/usr/local/apache/bin/apxs -----这里要按你自己的路径设置<br/>2.rpm安装方式：<br/>直接下载mod_limitipconn-0.xx.rpm<br/>rpm -Uhv mod_limitipconn-0.xx.rpm<br/>然后确认产生的mod_limitipconn.so文件在apache服务器模块目录里。<br/><br/>3。编辑httpd.conf文件：<br/>ExtendedStatus On<br/>LoadModule limitipconn_module modules/mod_limitipconn.so < IfModule mod_limitipconn.c ><br/>&nbsp;&nbsp;　　&nbsp;&nbsp;< Location / >&nbsp;&nbsp; # 所有虚拟主机的/目录<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　MaxConnPerIP 3&nbsp;&nbsp;&nbsp;&nbsp; # 每IP只允许3个并发连接<br/>　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NoIPLimit image/*&nbsp;&nbsp;# 对图片不做IP限制<br/>&nbsp;&nbsp;&nbsp;&nbsp;< /Location>　　<br/>&nbsp;&nbsp;&nbsp;&nbsp;< Location /mp3 >&nbsp;&nbsp;# 所有主机的/mp3目录<br/>　　　　MaxConnPerIP 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 每IP只允许一个连接请求&nbsp;&nbsp;&nbsp;&nbsp;<br/>　　　　OnlyIPLimit audio/mpeg video&nbsp;&nbsp;&nbsp;&nbsp;# 该限制只对视频和音频格式的文件<br/>&nbsp;&nbsp;&nbsp;&nbsp;< /Location ><br/>< /IfModule> <br/><br/>Tags - <a href="http://www.marshal.sh.cn/tags/apache/" rel="tag">apache</a> , <a href="http://www.marshal.sh.cn/tags/sever/" rel="tag">sever</a> , <a href="http://www.marshal.sh.cn/tags/ip/" rel="tag">ip</a> , <a href="http://www.marshal.sh.cn/tags/%25E9%2593%25BE%25E6%258E%25A5/" rel="tag">链接</a> , <a href="http://www.marshal.sh.cn/tags/%25E9%2599%2590%25E5%2588%25B6/" rel="tag">限制</a>
]]>
</description>
</item><item>
<link>http://www.marshal.sh.cn/post/300/</link>
<title><![CDATA[让APACHE防止多线程下载]]></title> 
<author>Marshal &lt;admin@yourname.com&gt;</author>
<category><![CDATA[php]]></category>
<pubDate>Fri, 08 Feb 2008 11:55:29 +0000</pubDate> 
<guid>http://www.marshal.sh.cn/post/300/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mod_limitipconn.c 是一个非官方的<a href="http://www.marshal.sh.cn/tags/apache/" target="_blank" title="http://www.marshal.sh.cn/tags/apache/" class="mykeyword">apache</a>模块，可以用来作为WEB 文件的下载限制，但是它是使用ExtendedStatus On 形式，工作在应用层。当同一个IP的连接到达限制的时候，apache对get 请求发送：<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HTTP/1.1 503 Service Temporarily Unavailable<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;从而使用户不能下载，但并不能阻止这种攻击，仍旧允许连接的。不过这个东东对<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;网管来说还是很有用的，特别是下载站的网管。简单介绍一下安装（动态模块方式<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;安装，假设你的apache已经装在/usr/local/apache目录下）：<br/>&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz">点击这里下载文件</a><br/>&nbsp;&nbsp;&nbsp;&nbsp;# tar xzf mod_limitipconn-0.04.tar.gz<br/>&nbsp;&nbsp;&nbsp;&nbsp;# cd mod_limitipconn-0.04<br/>&nbsp;&nbsp;&nbsp;&nbsp;# vi Makefile<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;把第一行的：&nbsp;&nbsp;<br/><div class="code">APXS = apxs</div><br/>&nbsp;&nbsp;&nbsp;&nbsp;改为<br/><br/><div class="code">APXS = /usr/local/apache/bin/apxs</div><br/>&nbsp;&nbsp;&nbsp;&nbsp;然后：<br/><br/><br/><div class="code"># make<br/># make install</div><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;修改apache配置文件：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;# vi /usr/local/apache/conf/httpd.conf<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;欢迎访问互联网技术在线<a href="http://www.chinaitlab.com" target="_blank">http://www.chinaitlab.com</a><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;ExtendedStatus On ###make install时这句前面的#没有去掉，一定要去掉<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;###make install已经加了下面两句，确认存在就行了<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;LoadModule limitipconn_module libexec/mod_limitipconn.so<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;AddModule mod_limitipconn.c<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;###下面就是对web目录下的文件下载限制<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;MaxConnPerIP 3 ###限制web根目录同一个IP只能同时开3进程下载<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;# 还有其它选项，如：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;# NoIPLimit image/*<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;# OnlyIPLimit audio/mpeg video<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;# 可以设置多个Location<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;重启apache，用多线程的下载工具下载时，大于3个线程，其余的将得到信息：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;HTTP/1.1 503 Service Temporarily Unavailable<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;或者根据User_Agent判断，把已知的多线程工具都给deny 掉<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;in httpd.conf<br/>&nbsp;&nbsp;&nbsp;&nbsp; .....<br/>&nbsp;&nbsp;&nbsp;&nbsp;BrowserMatch "NetAnt" badguy<br/>&nbsp;&nbsp;&nbsp;&nbsp;BrowserMatch "GetRight" badguy<br/>&nbsp;&nbsp;&nbsp;&nbsp;BrowserMatch "JetCar" badguy<br/>&nbsp;&nbsp;&nbsp;&nbsp;BrowserMatch "Mass Downloader" badguy<br/>&nbsp;&nbsp;&nbsp;&nbsp;BrowserMatch "ReGet" badguy<br/>&nbsp;&nbsp;&nbsp;&nbsp;BrowserMatch "DLExpert" badguy<br/>&nbsp;&nbsp;&nbsp;&nbsp;BrowserMatch "FlashGet" badguy<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;欢迎访问互联网技术在线<a href="http://www.chinaitlab.com" target="_blank">http://www.chinaitlab.com</a><br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;BrowserMatch "Offline Explorer" badguy<br/>&nbsp;&nbsp;&nbsp;&nbsp;BrowserMatch "Teleport" badguy<br/>&nbsp;&nbsp;&nbsp;&nbsp;...........<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;order deny,allow<br/>&nbsp;&nbsp;&nbsp;&nbsp;deny from env=badguy<br/>&nbsp;&nbsp;&nbsp;&nbsp;allow from all<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;注意httpd里面应该有 mod_setenvif模块。<br/><br/><br/>Tags - <a href="http://www.marshal.sh.cn/tags/php/" rel="tag">php</a> , <a href="http://www.marshal.sh.cn/tags/apache/" rel="tag">apache</a> , <a href="http://www.marshal.sh.cn/tags/%25E9%2599%2590%25E5%2588%25B6/" rel="tag">限制</a> , <a href="http://www.marshal.sh.cn/tags/%25E7%25BA%25BF%25E7%25A8%258B/" rel="tag">线程</a>
]]>
</description>
</item><item>
<link>http://www.marshal.sh.cn/post/299/</link>
<title><![CDATA[如何清空MYSQL数据库 ]]></title> 
<author>Marshal &lt;admin@yourname.com&gt;</author>
<category><![CDATA[php]]></category>
<pubDate>Thu, 07 Feb 2008 08:53:29 +0000</pubDate> 
<guid>http://www.marshal.sh.cn/post/299/</guid> 
<description>
<![CDATA[ 
	好久没有收集<a href="http://www.marshal.sh.cn/tags/apache/" target="_blank" title="http://www.marshal.sh.cn/tags/apache/" class="mykeyword">apache</a>的文章了。今天在冰剑博客看到<a href="http://www.is28.cn/read.php/101.htm" target="_blank">这篇</a>，觉得不错。<br/><br/><div class="code">&lt;?php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>$user = &quot;&quot;; //数据库用户名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>$password = &quot;&quot;;//数据库密码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>$db_name = &quot;i&quot;;//数据库名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>$link = mysql_connect(&quot;localhost:3306&quot;,$user,$password);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>mysql_select_db(&quot;$db_name&quot;,$link);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>echo &quot;&lt;p&gt;正在清空数据库,请稍等....&lt;br&gt;&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>$result=mysql_query(&quot;SHOW tables&quot;,$link);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>while ($currow=mysql_fetch_array($result)) &#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>mysql_query(&quot;drop TABLE IF EXISTS $currow&#91;0&#93;&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>echo $currow&#91;0&#93;.&quot;&lt;br&gt;&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#125;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>echo &quot;&lt;br&gt;恭喜你清理MYSQL成功&lt;br&gt;&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>?&gt; </div><br/>Tags - <a href="http://www.marshal.sh.cn/tags/%25E5%25A6%2582%25E4%25BD%2595/" rel="tag">如何</a> , <a href="http://www.marshal.sh.cn/tags/%25E6%25B8%2585%25E7%25A9%25BA/" rel="tag">清空</a> , <a href="http://www.marshal.sh.cn/tags/mysql/" rel="tag">mysql</a> , <a href="http://www.marshal.sh.cn/tags/%25E6%2595%25B0%25E6%258D%25AE%25E5%25BA%2593/" rel="tag">数据库</a> , <a href="http://www.marshal.sh.cn/tags/apache/" rel="tag">apache</a> , <a href="http://www.marshal.sh.cn/tags/php/" rel="tag">php</a> , <a href="http://www.marshal.sh.cn/tags/sever/" rel="tag">sever</a>
]]>
</description>
</item><item>
<link>http://www.marshal.sh.cn/post/240/</link>
<title><![CDATA[关闭apache, error.log,access.log日志,防止输出 ]]></title> 
<author>Marshal &lt;admin@yourname.com&gt;</author>
<category><![CDATA[php]]></category>
<pubDate>Mon, 31 Dec 2007 03:13:56 +0000</pubDate> 
<guid>http://www.marshal.sh.cn/post/240/</guid> 
<description>
<![CDATA[ 
	vi http.conf<br/>ErrorLog logs/error.log<br/><br/>#<br/># LogLevel: Control the number of messages logged to the error.log.<br/># Possible values include: debug, info, notice, warn, error, crit,<br/># alert, emerg.<br/>#<br/>LogLevel warn<br/> <br/>#<br/># The following directives define some format nicknames for use with<br/># a CustomLog directive (see below).<br/>#<br/>LogFormat "%h %l %u %t &#92;"%r&#92;" %>s %b &#92;"%&#123;Referer&#125;i&#92;" &#92;"%&#123;User-Agent&#125;i&#92;"" combined<br/>LogFormat "%h %l %u %t &#92;"%r&#92;" %>s %b" common<br/>LogFormat "%&#123;Referer&#125;i -> %U" referer<br/>LogFormat "%&#123;User-agent&#125;i" agent<br/> <br/>CustomLog logs/access.log common<br/>&nbsp;&nbsp;<br/>在前面加“#”号应该就可以了。<br/><br/><br/><br/>Tags - <a href="http://www.marshal.sh.cn/tags/php/" rel="tag">php</a> , <a href="http://www.marshal.sh.cn/tags/sever/" rel="tag">sever</a> , <a href="http://www.marshal.sh.cn/tags/apache/" rel="tag">apache</a> , <a href="http://www.marshal.sh.cn/tags/error.log/" rel="tag">error.log</a> , <a href="http://www.marshal.sh.cn/tags/%25E8%25BE%2593%25E5%2587%25BA/" rel="tag">输出</a> , <a href="http://www.marshal.sh.cn/tags/%25E5%2585%25B3%25E9%2597%25AD/" rel="tag">关闭</a>
]]>
</description>
</item><item>
<link>http://www.marshal.sh.cn/post/211/</link>
<title><![CDATA[网络流量监控器mrtg]]></title> 
<author>Marshal &lt;admin@yourname.com&gt;</author>
<category><![CDATA[php]]></category>
<pubDate>Sat, 22 Dec 2007 06:50:05 +0000</pubDate> 
<guid>http://www.marshal.sh.cn/post/211/</guid> 
<description>
<![CDATA[ 
	Mrtg(Multi Router Traffic Grapher,MRTG)是一个监控网络链路流量负载的工具软件， 它通过snmp协议从设备得到设备的流量信息，并将流量负载以包含PNG格式的图形的HTML 文档方式显示给用户，以非常直观的形式显示流量负载(可以在网站<a href="http://www.stat.ee.ethz.ch/mrtg/" target="_blank">http://www.stat.ee.ethz.ch...</a>得到mrtg的输出结果示例)。<br/><br/>关于mrtg的最详细的信息可以从<a href="http://people.ee.ethz.ch/" target="_blank">http://people.ee.ethz.ch/</a>"oetiker/webtools/mrtg得到。<br/><br/>mrtg具有以下特色：<br/><br/>可移植性：目前可以运行在大多数Unix系统和Windows NT之上。 <br/>源码开放：Mrtg是用perl编写的，源代码完全开放。 <br/>高可移植性的SNMP支持：Mrtg采用了Simon Leinen编写的具有高可移植性的SNMP实现模 块，从而不依赖于操作系统的SNMP模块支持。 <br/>支持SNMPv2c：MRTG可以读取SNMPv2c的64位的记数器，从而大大减少了记数器回转次数。<br/>可靠的接口标识：被监控的设备的接口可以以IP地址、设备描述、SNMP对接口的编号及 Mac地址来标识。 <br/>常量大小的日志文件：MRTG的日志不会变大，因为这里使用了独特的数据合并算法。 <br/>自动配置功能：MRTG自身有配置工具套件，使得配置过程非常简单。 <br/>性能：时间敏感的部分使用C代码编写，因此具有很好的性能。 <br/>PNG格式图形：图形采用GD库直接产生PNG格式。 <br/>可定制性：MRTG产生的web页面是完全可以定制的。 <br/>mrtg的主页是<a href="http://www.mrtg.org" target="_blank">http://www.mrtg.org</a>，可以从这里下载软件。<br/><br/>Mrtg兼容性<br/><br/>mrtg软件可以运行在以下的操作系统上：<br/><br/>Linux 1.2.x, 2.0.x, 2.2.x, 2.4.x (Intel and Alpha and Sparc and PowerPC) <br/>Linux MIPS, Linux S/390 <br/>SunOS 4.1.3 <br/>Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8 <br/>AIX 4.1.4, 4.2.0.0, 4.3.2 <br/>HPUX 9,10,11 <br/>WindowsNT 3.51, 4.0, 2k, XP<br/>IRIX 5.3, 6.2 <br/>BSDI BSD/OS 2.1, 4.x, 3.1 <br/>NetBSD 1.5.x <br/>FreeBSD 2.1.x, 2.2.x, 3.1, 3.4, 4.x <br/>OpenBSD 2.x <br/>Digital Unix 4.0 <br/>SCO Open Server 5.0 <br/>Reliant UNIX <br/>NeXTStep 3.3 <br/>OpenStep 4.2 <br/>Mac OS X 10.1 <br/>And about and other sensible Unix<br/><br/>可以通过mrtg监控的设备(目前市场上绝大多数产品都支持SNMP协议，只要支持SNMP协议 的设备就都可以使用MRTG来监控)：<br/><br/>3Com NETBuilders, LANplex 6012 and 2500 <br/>3Com etherswitches and hubs <br/>3Com Linkswitch 1000 1100 3300 <br/>3Com Superstack II switch 3900, 3300 MX <br/>3Com 812 ADSL Router <br/>Alantec powerhub 7000 <br/>Allied Telesyn - 8224XL and 8324XL 24 port managed switches <br/>Annex terminal server <br/>Asante Hub <br/>Ascend (Lucent) Max 600, [24]00x, Pipeline 50, TNT, APX-8000, MAX-6000 <br/>Alcatel (Assured Access) x1600, OmniSR9, OmniCore 5022 <br/>AT&T Wave Point, Lan <br/>BayNetworks (Wellfleet) 7.80 and up, BayStack 350T, Instant Internet, see Nortel <br/>BreezeCom AP,SA <br/>Cabletron ESX-820 Etherswitch, Smartswitch 2000,6000 and router <br/>Centillion Token Ring SpeedSwtich 100 (IBM 8251 Token Ring Switch) <br/>About every Cisco Kit there is ... <br/>CentreCOM 8116 <br/>Compatible Systems <br/>DECBridge 620, DEC 900EF, 900EE, Gigaswitch <br/>ELSA Lancom L 11 (Wireless Router) <br/>Enterasys Matrix E5, VH-4802 and VH-2402S Switche <br/>Ericsson Tirgis Series RAS Servers <br/>Extreme Networks -- Blackdiamond 6808 & Alpine 3808 Layer 3 Switches <br/>Fore ASX200 ATM <br/>FlowPoint 2200 ATM/DSL Router <br/>Formula 8200 series <br/>Foundry BigIron 8000 Gigabit, FastIron Switch, ServerIron Switch <br/>Cable Modems from Lancity, Terayon and DOCSIS <br/>HP - network interfaces, disks, database Informix <br/>HP AdvanceStack/Procurve Switch 2000 and 2524, AdvanceStack Switch 200 <br/>HP Procurve Switches , model 4000m, 2424m and 2400m <br/>IBM 8260 swtich (with 155MB ATM blades installed), IBM 2210 ISDN Routers. <br/>Intel switches (details) -- 510T, Intel Gigabit Server adapter <br/>IMV Victron NetPro 3000 UPS <br/>Kentrox Pacesetter Pro <br/>Lantronix Bridge <br/>Lucent/Xedia Access PointT 450, 1000 <br/>Livingston (Lucent) IRX 3.2.1R, IRX 114, PM2E(R) PM3-2E OR-U <br/>Motorola 6560 Regional Node, SB3100 CableModem, 320, 6430 and 6455 routers <br/>Morningstar terminal servers/routers <br/>MGE (Merlin Gerin) UPSes (details) <br/>Network Appliance <br/>Netopia R7100C SDSL <br/>Netscreen 5 / 10 / 100 <br/>Nortel Networks, Bay Routers BCN, BLN, ASN, ARN, AN, Passport 1k and Passport 8k3 series L3 switches, BayStack 450 L2 switches. <br/>Nortel Networks, Accelar L3 Switches <br/>Nokia IP 330/440/650 <br/>Nbase ethernet switch <br/>Novell 3.11, 4.11 <br/>Rmon probes <br/>SGI-Server (Irix 5.3) <br/>Any server server running HP-UX, Ultrix, Solaris, SunOS, OSF, NetBSD, FreeBSD, BSDi, Linux, AIX, OpenBSD, Irix or even Windows operating systems (badly), when using NET-SNMP (former UCD-SNMP). <br/>Apple Mac (An snmp service is included on the OS CD >= 8.5 ) <br/>Shiva Accesport <br/>Solaris Server <br/>Squid Web cache <br/>US-Robotics Total Control Modemracks <br/>Wellfleet (later Bay Networks): see Nortel routers <br/>WaveWireless SpeedLan 8x00 RF Routers <br/>WinNT, MS Proxy <br/>Xylan (today Alcatel) 4024C 24port 10/100 OmniStack Switch, 9k devices, including ATM links. <br/>Yamaha rt100i <br/>Zyxel Prestige P310, 153X, 642. <br/>不支持mrtg的设备：<br/>D-Link switches (details) <br/><br/>SNMP简介<br/><br/>一个网络管理系统一般要包含以下几个元素：①若干个(可能很多个)需要被管理的网络设 备节点，如路由器、服务器等设备，每个节点上都运行着一个称为设备代理(agent)的应 用进程，其实现对被管理设备的各种被管理对象的信息如流量等的搜集和对这些被管对象 的访问的支持；②至少一个管理工作站，该管理站运行着管理平台应用系统，实现为管理 员提供对被管设备的可视化的图形界面，从而使管理员可以方便的进行管理；③一个管理 协议，用来定义设备代理和管理工作站之间管理信息传送的规程。其中管理协议的操作是 在管理框架下进行的，管理框架定义了和安全相关的认证,授权,访问控制和加密策略等各 种安全防护框架。<br/><br/>在运行TCP/IP协议的互联网环境中，管理协议标准是简单网络管理协议(Simple Network Management Protocol,SNMP)，其定义了传送管理信息的协议消息格式及管理站和设备代 理相互之间进行消息传送的规程。<br/><br/>出于业界对网络管理协议标准化的迫切要求的驱动，IETF于1990发布了SNMPv1的正式RFC 文档；其设计思想重点放在保证协议的简单性、灵活性和可扩展性上，并希望把SNMP作为 一个过渡性的网管协议来作为实现对互连的网络设备进行管理时遵循的标准，待OSI的网 络管理协议—CMIP的开发、实现和标准化成熟和完善到可以在业界推广之后，再用CMIP来 替换SNMP。但是由于各种的原因，CMIP并没有替代SNMP，而SNMP发展为业界的标准。<br/><br/>SNMP一共发展有3个主版本，分别为SNMPv1 ，SNMPv2和SNMPv3。其中SNMPv2又分为若干个 子版本，其中SNMPv2c应用最为广泛:<br/><br/>SNMPv1: 是第一个正式协议版本，在RFC1155-RFC1158中定义，该版本采用了基于共同体 名的安全机制； <br/>SNMPv2c: 这个版本被称为基于共同体名的SNMPv2，使用基于共同体名的安全机制和 SNMPv2p做出的协议操作方面的扩充，由RFC1901-RFC1906定义； <br/>SNMPv3: 该协议版本采用基于用户的安全机制，其安全机制是在SNMPv2u和SNMPv2*基础上 进行大量的评议以后进行了更新，并且对协议机的逻辑功能模块的进行了划分而保证了良 好的可扩充性，由RFC2271-RFC2275所定义。 <br/><br/>运行SNMP管理系统的原理及SNMP协议<br/><br/>使用SNMP协议的网络管理系统管理结构工作一般包括：管理进程通过定时向各个设备的设 备代理进程发送查询请求消息(以轮询方式)，来跟踪各个设备的状态；而当设备出现异常 事件如设备冷启动等时，设备代理进程主动向管理进程发送陷阱消息，汇报出现的异常事 件。这些轮询消息和陷阱消息的发送和接受规程及其格式定义都是由SNMP协议定义的；而 被管理设备将其各种管理对象的信息都存放在一个称为管理信息库（Management Information Base）库结构中。<br/><br/>其中SNMP协议是运行在UDP协议之上，它利用的是UDP协议的161/162端口。其中161端口被 设备代理监听，等待接受管理者进程发送的管理信息查询请求消息；162端口由管理者进 程监听等待设备代理进程发送的异常事件报告陷阱消息，如Trap。<br/><br/>设备的所有的需要被管理的信息被看作一个各种被管理对象的集合，这些被管理对象由 OSI定义在一个被称作管理信息库(Management Information Base,MIB)的虚拟的信息库 中。<br/><br/>管理对象库MIB<br/><br/>MIB是一个按照层次结构组织的树状结构（定义方式类似于域名系统），管理对象为定义 为树中的相应叶子节点。管理对象是按照模块的形式组织，每个对象的父节点表示该种对 象属于上层的哪一个模块。而且OSI为树中每一层的每个节点定义唯一的一个数字标识， 每层中的该数字标识从1开始递增，这样树中的每个节点都可以用从根开始到目的节点的 相应的标识对应的一连串的数字来表示，如1.3.6.1.2.1.1表示了MIBII中系统组子树,而 1.3.6.1.2.1.1.1.0表示系统组中的系统描述(sytem Descrption)对象。每个对象的一连 串数字表示被称为对象标识符（Object Indentifier,OID）。<br/><br/>相关的一组对象的集合被定义为一个MIB模块。这些模块使用OSI的抽象语法标记 (Abstract Syntax Notation One，ASN.1)的一个子集写成。该子集被定义为管理信息结 构(Management Information，SMI)。<br/><br/>SNMP的消息在发送和传输时消息是采用基本编码规则（BER）对消息进行编码。<br/><br/>SNMP基本的标准MIB库是MIBII，具体请参考RFC 1213。<br/><br/>SNMP协议操作<br/><br/>SNMP提供有三类操作，分别为Get，Set和Trap。<br/><br/>Get操作实现对被管理对象所表示的管理信息的读操作。在SNMPv1中，GET操作具体一共有 两种形式<br/><br/>Get和GetNext操作： Get操作指示直接读取操作参数指定的OID所表示的被管理对象的管 理信息值。GetNext操作指示读取操作参数指定的OID所表示的被管理对象在MIB树中按照 字典顺序的下一个被管理对象的管理信息的值。在SNMPv2中，增加了一种GetBulk操作， 其是Get和GetNext的综合，是为了提高对被管理信息的访问的效率而增加的。<br/><br/>Set操作实现对被管理对象的管理信息进行写操作，其实现直接对操作参数指定的OID所表 示的被管理对象对应的管理信息的值的设置。<br/><br/>前面几种消息是由管理工作站主动实现对被管理设备进行轮询访问时发出以得到被管理设 备的各种信息；而在被管理设备出现异常事件需要及时向管理工作站报告时，就需要Trap 操作，该操作实现被管理设备向管理工作站报告设备上出现的异常事件，如网络接口出现 故障或恢复工作，设备重新启动等信息。另外在SNMPv2中新增加了一种Inform操作来实现 管理站与管理站之间的通信。<br/><br/>其中上述操作的消息都可以在操作参数中一次指定一个或多个管理对象OID信息，也就是 说一个消息一次可以实现对多个被管理对象的操作。<br/><br/>SNMPv1和SNMPv2c采用了一种简单的基于共同体名的安全机制：<br/><br/>管理站和被管设备上都存储有该充当密码作用的共同体名；消息发送者(一般是管理者)在 要发送的消息中的共同体名字段中填入对应于接收者的共同体名，然后以明文方式在网络 上发送消息，接收方(被管理设备)接收到消息以后，如果消息格式是正确的，则读取该字 段，与自身保存的共同体名相比较，来实现对发送消息者的认证。在一些实现中，对应于 每个共同体名还有一个机器地址列表，来表示只有地址在这个列表中的机器使用该共同体 名发送的消息才认为是可信的。这里的共同体名就担任密码的作用。同时对应于每个共同 体名都有一个访问控制权限，可能值为读或读写。只有请求的操作和使用的共同体名的权 限一致才允许进行。<br/><br/>详细情况请参考RFC 1157、RFC 1902、RFC 2273、RFC 2274。<br/><br/>MRTG的安装配置<br/><br/>安装支持软件<br/><br/>我们这里以Rehat7.2为例子讨论MRTG的配置和安装。要安装MRTG需要安装以下软件 包：GCC、Perl、gd、libpng和zlib。可以使用下面的命令来判断系统是否安装有这些软 件包：<br/><br/>[root@mail doc]# rpm -qa&#124;grep gd<br/>gd-1.8.4-4<br/>gd-devel-1.8.4-4<br/><br/>[root@mail doc]# rpm -qa&#124;grep perl<br/>perl-5.6.0-17<br/>mod_perl-1.24_01-3<br/><br/>[root@mail doc]# rpm -qa&#124;grep libp<br/>libpng-1.0.12-2<br/>libpng-devel-1.0.12-2<br/><br/>[root@mail doc]# rpm -qa&#124;grep zlib<br/>zlib-1.1.3-24<br/>zlib-devel-1.1.3-24<br/>[root@mail doc]# rpm -qa&#124;grep gcc <br/>gcc-2.96-98<br/>gcc-g77-2.96-98<br/>gcc-c -2.96-98<br/><br/>如果发现哪个软件包没有安装，只需直接从redhat安装盘安装对应的rpm包即可，例如：<br/>root@mail doc]# rpm -ivh zlib-1.1.3-24 zlib-devel-1.1.3-24<br/><br/>MRTG的安装<br/><br/>目前mrtg的最新版本为2.9.17：<br/><br/>[root@mail src]# tar xvfz mrtg-2.9.17.tar.gz <br/>[root@mail src]# cd mrtg-2.9.17<br/>[root@mail mrtg-2.9.17]# ./configure --prefix=/usr/local/mrtg-2<br/>[root@mail mrtg-2.9.17]# make<br/>[root@mail mrtg-2.9.17]# make install<br/><br/>到现在我们就已经正确地安装了MRTG系统。<br/><br/>配置SNMP服务<br/><br/>对于不同的设备，配置SNMP支持的方法是不一致的，具体请参考设备的随机文档，一般里 面都有详细的介绍。这里我们讨论在Linux环境下配置SNMP服务器，以实现对本机流出流 入数据的分析和报表(我的应用环境是使用Linux带动一个小型局域网上网，监控本机进出 流量)。<br/><br/>在linux环境下安装snmp软件包是很容易的，只需要安装相应的软件包即可：<br/><br/>[root@mail doc]# rpm -qa&#124;grep snmp <br/>ucd-snmp-4.2.1-7<br/>ucd-snmp-utils-4.2.1-7<br/>ucd-snmp-devel-4.2.1-7<br/><br/>这时候运行下面的命令：<br/><br/>[root@mail doc]# /etc/rc.d/init.d/snmpd start<br/>Starting snmpd: [ OK ]<br/><br/>如果命令输出如上所示，就表示snmp服务器启动正常。<br/><br/>为了配合mrtg使用，还要修改snmpd的配置，以使其允许mrtg读取其interface(网络接口) 流量数据。<br/><br/>vi /etc/snmp/snmpd.conf<br/><br/>将<br/><br/>#view systemview included mib2<br/><br/>的内容修改为：<br/><br/>view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc<br/><br/>然后将<br/><br/>access notConfigGroup "" any noauth exact systemview none none<br/><br/>修改为：<br/><br/>access notConfigGroup "" any noauth exact mib2 none none<br/><br/>然后再重新启动snmpd：<br/><br/>/etc/rc.d/init.d/snmpd restart<br/><br/>配置MRTG<br/><br/>下一步就是要配置mrtg，实现对网络设备的监控。mrtg的配置信息都是保存在mrtg.cfg文 件中的，创建该文件并且在其中定义希望的监控特性。幸运的是一般不需要直接手工编辑 该配置文件，因为mrtg软件包提供有cfgmaker配置工具，这是一个脚本文件，根据运行参 数可以自动生成mrtg.cfg配置文件。在mrtg源码目录的bin子目录下你可以得到该工具。<br/><br/>首先在www服务器的DocumentRoot目录下创建一个子目录用来存放mrtg生成的统计文件， 这里假设<a href="http://www.marshal.sh.cn/tags/apache/" target="_blank" title="http://www.marshal.sh.cn/tags/apache/" class="mykeyword">apache</a>是默认安装，因此DocumentRoot在/var/www/html目录下，我们在该目录 下创建子目录mrtg：<br/><br/>mkdir /var/www/html/mrtg<br/><br/>这里的/var/www/html/mrtg就是mrtg的工作目录。下面就生成mrtg配置文件：<br/><br/>cfgmaker --global "WorkDir: /var/www/html/mrtg" <br/>--global "Options[_]: growright,bits" <br/>--ifref=ip <br/>--output /etc/mrtg.cfg <br/>public@192.168.0.1<br/><br/>这里的--global参数表示后面的选项是对后面指定的设备都是有效的(如果希望对多个设 备进行监控时，该参数就会发生作用)。WorkDir用来指示mrtg的工作目录；Options用来 指定一些特定的选项，这里的growright,bits是用来指定默认options配置的，对于常见 的应用来说默认options配置就可以满足需求了。ifref用来指示用什么选项来标识设备接 口，这里指定使用IP地址来标识网络设备接口。ifref可以指定为 nr、ip、eth、descr、name。nr表示用接口在MIBII库中Interface接口的ifIndex来识别 接口；IP表示使用ip地址识别接口；eth表示使用接口的物理地址标识接口；descr表示使 用接口的描述信息来标识接口；name表示使用接口名来标识接口。一般来说ip地址是唯一 的，但是有些情况下接口是没有IP地址的，例如交换机就会出现这种情况。对于接口来说 nr(接口号)是唯一的，因此对于一般情况使用IP地址就可以了，而对于其他一些情况则需 要采用nr了。"--output /etc/mrtg.cfg"标识将生成的配置文件存放在/etc/目录 下。"public@192.168.0.1"表示监控IP地址为192.168.0.1的设备，采用public作为共同 体名通过snmp协议来监控设备192.168.0.1。<br/><br/>对于希望使用mrtg来对多个设备进行监控的情况，举例如下：<br/><br/>cfgmaker --global "WorkDir: /var/www/html/mrtg" <br/>--global "Options[_]: growright,bits" <br/>--ifref=descr <br/>--ifdesc=alias <br/>public@router1.place.xyz <br/>public@router2.place.xyz <br/>--global "Options[_]: growright" <br/>--ifref=name <br/>--ifdesc=descr <br/>public@switch1.place.xyz <br/>--ifdesc=name <br/>public@switch2.place.xyz > mrtg.cfg<br/><br/>这里指示监控四个设备：router1.place.xyz、router2.place.xyz、switch1.place.xyz<br/>和switch2.place.xyz，所有的设备都采用共同体名public来进行监控。并且两个路由器 采用descr来作为设备的描述信息，而两个交换机则采用alias作为设备描述(这两者是不 同的，例如对于cisco路由器来说，对于descr来说设备描述为"Serial0"，而对于aliasl 来说则为"Link to HQ")。<br/><br/>对于我这里的应用环境来说，生成的mrtg.cfg内容如下：<br/><br/># Created by <br/># /usr/local/mrtg-2/bin/cfgmaker --global WorkDir: /var/www/html/mrtg --global Options[_]: growright,bits<br/>--output /etc/mrtg.cfg --ifref=ip public@192.168.0.1<br/><br/>### Global Config Options<br/><br/># for UNIX<br/># WorkDir: /home/http/mrtg<br/><br/># or for NT<br/># WorkDir: c:mrtgdata<br/><br/>### Global Defaults<br/><br/># to get bits instead of bytes and graphs growing to the right<br/># Options[_]: growright, bits<br/><br/>WorkDir: /var/www/html/mrtg<br/>Options[_]: growright,bits<br/><br/>######################################################################<br/># System: 192.168.0.1<br/># Description: Linux 192.168.0.1 2.4.7-10smp #1 SMP Thu Sep 6 17:09:31 EDT 2001 i686<br/># Contact: Root (configure /etc/snmp/snmp.local.conf)<br/># Location: Unknown (edit /etc/snmp/snmpd.conf)<br/>######################################################################<br/><br/>### Interface 1 >> Descr: lo &#124; Name: &#124; Ip: 127.0.0.1 &#124; Eth: ###<br/>### The following interface is commented out because:<br/>### * it is a Software Loopback interface<br/># <br/># Target[192.168.0.1_127.0.0.1]: /127.0.0.1: public@192.168.0.1:<br/># SetEnv[192.168.0.1_127.0.0.1]: MRTG_INT_IP="127.0.0.1" MRTG_INT_DESCR="lo"<br/># MaxBytes[192.168.0.1_127.0.0.1]: 1250000<br/># Title[192.168.0.1_127.0.0.1]: Traffic Analysis for 127.0.0.1 -- 192.168.0.1<br/># PageTop[192.168.0.1_127.0.0.1]:<br/><br/>Traffic Analysis for 127.0.0.1 -- 192.168.0.1<br/><br/>#<br/>#<br/><br/>#<br/><br/>#<br/><br/>#<br/><br/>#<br/><br/>#<br/><br/>#<br/><br/>#<br/><br/>System:<br/>192.168.0.1 in Unknown (edit /etc/snmp/snmpd.conf)<br/><br/>Maintainer:<br/>Root (configure /etc/snmp/ snmp.local.conf)<br/><br/>Description:<br/>lo<br/><br/>ifType:<br/>softwareLoopback (24)<br/><br/>ifName:<br/><br/>Max Speed:<br/>10.0 Mbits/s<br/><br/>Ip:<br/>127.0.0.1 (localhost)<br/><br/>### Interface 2 >> Descr: eth0 &#124; Name: &#124; Ip: 211.99.43.111 &#124; Eth:<br/><br/>Target[192.168.0.1_211.99.43.158]: /211.99.43.158: public@192.168.0.1:<br/>SetEnv[192.168.0.1_211.99.43.158]: MRTG_INT_IP="211.99.43.158" MRTG_INT_DESCR="eth0"<br/>MaxBytes[192.168.0.1_211.99.43.158]: 1250000<br/>Title[192.168.0.1_211.99.43.158]: Traffic Analysis for 211.99.43.158 -- 192.168.0.1<br/>PageTop[192.168.0.1_211.99.43.158]:<br/><br/>Traffic Analysis for 211.99.43.158 - - 192.168.0.1<br/><br/>System:<br/>192.168.0.1 in Unknown (edit /etc/snmp/snmpd.conf)<br/><br/>Maintainer:<br/>Root (configure /etc/snmp/ snmp.local.conf)<br/><br/>Description:<br/>eth0<br/><br/>ifType:<br/>ethernetCsmacd (6)<br/><br/>ifName:<br/><br/>Max Speed:<br/>10.0 Mbits/s<br/><br/>Ip:<br/>211.99.43.158 (192.168.0.1)<br/><br/>### Interface 3 >> Descr: eth1 &#124; Name: &#124; Ip: 192.168.0.1 &#124; Eth:<br/><br/>Target[192.168.0.1_192.168.0.1]: /192.168.0.1: public@192.168.0.1:<br/>SetEnv[192.168.0.1_192.168.0.1]: MRTG_INT_IP="192.168.0.1" MRTG_INT_DESCR="eth1"<br/>MaxBytes[192.168.0.1_192.168.0.1]: 1250000<br/>Title[192.168.0.1_192.168.0.1]: Traffic Analysis for 192.168.0.1 -- 192.168.0.1<br/>PageTop[192.168.0.1_192.168.0.1]:<br/><br/>Traffic Analysis for 192.168.0.1 -- 192.168.0.1<br/><br/>><br/><br/>System:<br/>192.168.0.1 in Unknown (edit /etc/snmp/snmpd.conf)<br/><br/>Maintainer:<br/>Root (configure /etc/snmp/ snmp.local.conf)<br/><br/>Description:<br/>eth1<br/><br/>ifType:<br/>ethernetCsmacd (6)<br/><br/>ifName:<br/><br/>Max Speed:<br/>10.0 Mbits/s<br/><br/>Ip:<br/>192.168.0.1 (192.168.0.1)<br/><br/>运行mrtg<br/><br/>一旦生成正确的配置文件，就运行下面的命令：<br/><br/>/usr/local/mrtg-2/bin/mrtg /etc/mrtg.cfg<br/><br/>这将查询被监控的设备并在工作目录下创建初始的流量图和web页面，在前三次运行时可 能会报告遗失日志文件的告警信息，不要理睬这些信息，只需要连续运行三次以后再运行 就不会产生告警信息了。如果仍然出现告警那么就需要察看问题出在哪里了。<br/><br/>使用手工运行mrtg并不能定时产生适当的统计信息，因此最好还是定时自动运行mrtg来生 成统计信息，默认为五分钟运行一次。作为root身份crontab -e进入编辑状态，添加内容 如下：<br/><br/>*/5 * * * * /usr/local/mrtg-2/bin/mrtg /etc/mrtg.cfg<br/><br/>然后就可以通过浏览器访问地址<a href="http://192.168.0.1/mrtg/" target="_blank">http://192.168.0.1/mrtg/</a>选择适当的接口地址察看流量 信息了。如果希望生成类似于<a href="http://www.stat.ee.ethz.ch/mrtg/" target="_blank">http://www.stat.ee.ethz.ch...</a>的信息，就需要自己手工编辑一个index.html文档存放在/var/www/html/mrtg目录下，内容为接口说明以及该接 口的日统计信息的图即<br/><br/>Tags - <a href="http://www.marshal.sh.cn/tags/mrtg/" rel="tag">mrtg</a> , <a href="http://www.marshal.sh.cn/tags/%25E7%25BD%2591%25E7%25BB%259C%25E6%25B5%2581%25E9%2587%258F%25E7%259B%2591%25E6%258E%25A7/" rel="tag">网络流量监控</a> , <a href="http://www.marshal.sh.cn/tags/php/" rel="tag">php</a> , <a href="http://www.marshal.sh.cn/tags/sever/" rel="tag">sever</a> , <a href="http://www.marshal.sh.cn/tags/apache/" rel="tag">apache</a>
]]>
</description>
</item><item>
<link>http://www.marshal.sh.cn/post/202/</link>
<title><![CDATA[Fport是查看系统进程与端口关联的命令]]></title> 
<author>Marshal &lt;admin@yourname.com&gt;</author>
<category><![CDATA[php]]></category>
<pubDate>Thu, 20 Dec 2007 09:17:05 +0000</pubDate> 
<guid>http://www.marshal.sh.cn/post/202/</guid> 
<description>
<![CDATA[ 
	Fport是查看系统进程与端口关联的命令， <br/>使用方法 <br/>开始-〉运行 输入 D:&#92;>fport.exe （假设在d:&#92;根目录） <br/><br/>输出结果格式如下： <br/><br/>Pid Process Port Proto Path <br/>472 svchost -> 135 TCP C:&#92;WINNT&#92;system32&#92;svchost.exe <br/>8 System -> 445 TCP <br/>580 MSTask -> 1025 TCP C:&#92;WINNT&#92;system32&#92;MSTask.exe <br/>8 System -> 1026 TCP <br/>8 System -> 445 UDP <br/>444 rtvscan -> 2967 UDP C:&#92;Program Files&#92;NavNT&#92;rtvscan.exe <br/>812 MsgSys -> 38037 UDP C:&#92;WINNT&#92;System32&#92;MsgSys.EXE <br/><br/>这其中port下面代表的是系统当前开放的端口而path下面列出的是与该端口关联的程序及其所在位置。 <br/>从上面这个结果看，系统上135、445端口是与C:&#92;winnt&#92;system32&#92;svchost.exe程序关联的1025、1026、445（udp)端口与 c:&#92;winnt&#92;system32&#92;mstask.exe程序关联的2967(udp)端口是与C:&#92;Program Files&#92;NavNT&#92;rtvscan.exe程序关联的38027(udp)端口是与 C:&#92;WINNT&#92;System32&#92;MsgSys.EXE程序关联的 <br/><br/>注：fport仅适用于winnt、win2000和winxp，在win98下无法使用<br/>Tags - <a href="http://www.marshal.sh.cn/tags/fport/" rel="tag">fport</a> , <a href="http://www.marshal.sh.cn/tags/%25E7%25AB%25AF%25E5%258F%25A3/" rel="tag">端口</a>
]]>
</description>
</item><item>
<link>http://www.marshal.sh.cn/post/176/</link>
<title><![CDATA[Windows Vista IIS 7.0 下安装配置php环境]]></title> 
<author>Marshal &lt;admin@yourname.com&gt;</author>
<category><![CDATA[php]]></category>
<pubDate>Sat, 15 Dec 2007 07:17:51 +0000</pubDate> 
<guid>http://www.marshal.sh.cn/post/176/</guid> 
<description>
<![CDATA[ 
	如果您是一位网络应用开发者的话，可能需要在本机安装Web服务器搭建一个测试环境。同Windows XP类似，在Windows Vista的大部分版本——除 Home Basic 与 Starter 外——中也集成了IIS (Internet 信息服务)，同时，版本升级为 7.0 。相对于早先的版本，IIS 7.0 带来了许多引人注目的新特色新功能，比如基于 Microsoft .NET Framework 的全局配置文件，可简单地通过文本编辑器或 Microsoft Visual Studio 编辑；全新的 IIS 管理器，可同时管理 IIS 和 ASP.NET，操作更加方便；以及引入了命令行工具 Appcmd.exe ，给 Web 服务器的日常管理、监视和配置提供了除图形接口外的另一种方式，更为简单、高效。这可能是大多数朋友的首选，当然，如果愿意，同样可以在Windows Vista中安装使用 Apache（不知道是由于 Vista 的权限问题还是其他什么原因，我在本地调试 Apache 没有成功）。<br/><br/>由于我的计算机装的Vista Ultimate，在网上 <a href="http://www.marshal.sh.cn/tags/google/" target="_blank" title="http://www.marshal.sh.cn/tags/google/" class="mykeyword">Google</a> 和 Baidu 了一下，都是一些关于 Win2K3 和 XP 下的 IIS 6.0 和 Apache 配置的 PHP 环境。其实方法都是大同小异，下面我的配置环境是：IIS 7.0 + PHP 5.2.3 + MySQL 5.0.41 + phpMyAdmin 2.10.2 + Zend Optimizer 3.2.6 .<br/><br/>一、安装 IIS<br/>同Windows XP一样，在Windows Vista的默认设置下，IIS (Internet 信息服务) 7.0未予安装，要想使用它，必须首先安装IIS。下面简单介绍IIS的安装过程：<br/><br/>依次点击“开始” => “控制面板” => “程序”，选择“打开或关闭Windows功能”，直接选中“Internet信息服务”，将所所有选项全部选中：<br/><br/>点击“确定”，Windows Vista即启动IIS的安装过程；<br/><br/>安装完成后，打开浏览器输入 “<a href="http://localhost/" target="_blank">http://localhost/</a>”，检查IIS是否正常。<br/><br/>出现上图所示的画面就代表 IIS 安装成功。为了方便和直观的控制 IIS，我们将管理工具调到开始菜单中来，“开始” => 右键“属性” => “自定义”：<br/><br/><br/>这样我们就可以在开始菜单中看见“Internet信息服务(IIS)管理器”了：<br/><br/><br/>二、安装 PHP<br/>由于我这里的 php 是一个 zip 文件(非 install 版)，安装较为简单，将下载到的 php 压缩包直接解压到需要安装的目录（这里我是以D:&#92;Www&#92;PHP5为安装路径）下。然后<br/>1. 找到php5目录下的 php.ini-dist 文件，重命名为 php.ini ，并复制到系统盘的Windows目录下(以C:&#92;Windows为例).<br/><br/>2. 再把php5目录下的 php5ts.dll , libmysql.dll 复制到目录 C:&#92;Windows&#92;System32下.<br/><br/>3. 把php5&#92;ext目录下的 php_gd2.dll , php_mysql.dll , php_mbstring.dll 文件也复制到C:&#92;Windows&#92;System32下。（如果没有加载 php_gd2.dll php将不能处理图像。没有加载php_mysql.dll php将不支持mysql函数库，php_mbstring.dll在后面使用phpmyadmin时支持宽字符）<br/><br/>三、IIS 整合 PHP<br/>安装了 IIS 和 PHP 后，我们就可以将其整合到一起了。<br/>1.打开Internet信息服务(IIS)管理器，在Default Web Site中打开“ISAPI 筛选器”，点击右边侧栏的添加，如下图：（这里的路径都以PHP安装目录为准）<br/> <br/><br/>2.返回到“Default Web Site”主页，打开“处理程序映射”，点击右边侧栏的“添加脚本映射”，如下图：<br/><br/><br/>3.再次返回到“Default Web Site”主页，打开“默认文档”，在输入框里添加“index.php”（逗号后面有一个空格）<br/><br/><br/>4.如果网站根目录不是默认的路径“%SystemDrive%&#92;inetpub （C:&#92;inetpub） ”，还需要修改“基本设置”，我的网站根目录是：“D:&#92;Www”，如下图：<br/><br/><br/>四、安装 MySQL<br/>点击MySQL安装包，在第二步的时候，默认的安装路径是Typical，如果想修改安装路径的话就选择custom，但不能含有中文！我的安装路径为：“D:&#92;Www&#92;MySQL5&#92;”。<br/><br/><br/>安装完毕后，我们点击“Finish”进入配置。直接点击“Next”，到这一步需要设置mysql的默认编码，默认是latin1，也是标准的编码，第二种是UTF8，第三种是手动设置。这个按自己的需要选择，我选择的是UTF8。<br/><br/><br/>下面这一步是是否要把 mysql 设置成 windows 的服务，一般都选择设成服务，这样以后就可以通过服务中启动和关闭 mysql 数据库了，所以推荐将下面的复选框也勾选上。这样，在 cmd 模式下，不必非到 mysql 的 bin 目录下执行命令。<br/><br/><br/>这一步是设置 mysql 的超级用户密码，这个超级用户非常重要，对 mysql 拥有全部的权限，请设置好并牢记超级用户的密码。下面有个复选框是表示创建一个匿名账号，这会使数据库系统不安全，如果有这个需求,也可以勾选。<br/><br/><br/>然后点击“Execute”进行配置。<br/><br/>最后点击“Finish”就配置完毕了。<br/><br/>下面我们可以开始使用mysql了，“开始” => “所有程序” => “MySQL”里打开“MySQL Command Line Client”，输入密码，出现这个界面说明mysql已经安装好了。<br/> <br/><br/>五、配置 PHP 关联 MySQL<br/>编辑“C:&#92;Windows&#92;php.ini”文件<br/>1. 设置扩展路径<br/>查找 extension_dir = “./”<br/>将此行改成 extension_dir = “D:&#92;Www&#92;PHP5&#92;ext”<br/>其中“D:&#92;Www&#92;PHP5&#92;” 是安装PHP的路径，如果路径不正确将无法加载 dll 。<br/><br/>2.加载所需的 dll，分别查找<br/>;extension=php_mbstring.dll<br/>;extension=php_gd2.dll<br/>;extension=php_mysql.dl<br/>将这三项前面的分号“;”去掉，这样 IIS 启动时就可以加载这些 dll 了。（同样的方法，以后要加载所需的 dll 时，将前面的分号去掉即可）<br/><br/>3.设置会话保存路径<br/>查找<br/>; session.save_path = “N;/path”<br/>在此行下面加入一行<br/>session.save_path = “C:&#92;WINDOWS&#92;Temp”<br/>这里我们完全可以保存到 Windows 临时目录Temp下。<br/>当然我们也可以自己创建“session”目录，即在“D:&#92;Www&#92;PHP5&#92;”下建立一个“session”文件夹，并设置给予完全控制权限。<br/><br/>4.PHP5时差问题<br/>PHP5系列版本新增了时区设置，默认为格林威治时间，与中国所在的东8区正好相差8个小时<br/>查找<br/>;date.timezone =<br/>改成<br/>date.timezone = PRC<br/>其中PRC：People’s Republic of China 中华人民共和国<br/><br/>5.保存文件，基本设置就完成了。在网站根目录“D:&#92;Www&#92;”下创建一个 phpinfo.php 文件，放置如下代码：<br/><br/><?php<br/>phpinfo();<br/>?><br/><br/>然后在浏览器中打开 <a href="http://localhost/phpinfo.php" target="_blank">http://localhost/phpinfo.p...</a>，如果出现如下页面则说明PHP已经配置好了。<br/><br/><br/>下面再测试PHP和MySQL的关联，在网站根目录“D:&#92;Www&#92;”下创建一个 test.php 文件，内容为<br/><br/><?php<br/>$host = "localhost";<br/>$user = "root";<br/>$password = "123456";//123456改成你的mysql密码<br/>$link=mysql_connect($host,$user,$password);<br/>if(!$link) echo "<h1>失败!</h1>";<br/>else echo "<h1>成功!</h1>";<br/>mysql_close();<br/>?><br/><br/>然后在浏览器中打开 <a href="http://localhost/test.php" target="_blank">http://localhost/test.php</a> ，如果页面输出如下信息就说明大功告成了。<br/><br/><br/>到此为止，我们就可以开始使用这个本地Web服务器了。至于其它的扩展，自己可以在 php.ini 中设置启用就可以了，但是修改 php.ini 似乎需要重启 IIS 服务器才能使修改生效。<br/><br/>六、为了方便管理MySQL，我们需要安装phpMyAdmin来配合使用<br/>把下载下来的压缩包解压到与MySQL同一目录下，然后将 config.sample.inc.php 更名为 config.inc.php，然后打开进行编辑：<br/>找到 $cfg[’blowfish_secret’] = ”，因为程序默认设置为cookie登陆，所以我们在单引号中任意输入一些字符串就可以了，其他都按默认。<br/>下面我们就可以通过phpMyAdmin来登陆管理MySQL了，在浏览器中打开<a href="http://localhost/phpmyadmin" target="_blank">http://localhost/phpmyadmi...</a>，登陆后可以任意创建用户。<br/> <br/><br/>七、如果需要优化PHP程序来提高他的执行速度的话，我们还可以选择安装 Zend Optimizer<br/>Zend Optimizer用优化代码的方法来提高PHP应用程序的执行速度。执行使用Zend Optimizer的PHP程序比不使用的要快40%到100%。而且一些用Zend SafeGuard 加密过的文件,必须装了Zend Optimizer才可以运行。<br/>1.点击安装Zend Optimizer 3.2.6，这里我选择的安装路径是 D:&#92;Www&#92;Zend ，然后我们发现Zend Optimizer是可以自动识别 IIS 7.0 的：<br/> <br/><br/>2.选定 php.ini 的位置，我们的是在 C:&#92;WINDOWS&#92; 下（默认即可）：<br/><br/><br/>3.选定 IIS 默认安装路径，由于我这里前面就是 D:&#92;Www&#92;<br/><br/><br/>4.这里是提示我们安装程序自动完成配置和服务器重启，选择“是”<br/><br/><br/><br/>Tags - <a href="http://www.marshal.sh.cn/tags/apache/" rel="tag">apache</a> , <a href="http://www.marshal.sh.cn/tags/php/" rel="tag">php</a> , <a href="http://www.marshal.sh.cn/tags/vista/" rel="tag">vista</a> , <a href="http://www.marshal.sh.cn/tags/sever/" rel="tag">sever</a>
]]>
</description>
</item><item>
<link>http://www.marshal.sh.cn/post/153/</link>
<title><![CDATA[.htaccess 防盗链，防列目录]]></title> 
<author>Marshal &lt;admin@yourname.com&gt;</author>
<category><![CDATA[php]]></category>
<pubDate>Sat, 08 Dec 2007 11:51:25 +0000</pubDate> 
<guid>http://www.marshal.sh.cn/post/153/</guid> 
<description>
<![CDATA[ 
	防盗链的<br/><br/>order allow,deny<br/>deny from all<br/><br/>ServerSignature Off<br/><br/>防止APACHE没有INDEX之类的列目录<br/><br/># disable directory browsing<br/>Options All -Indexes<br/><br/>一下代码保存为.htaccess 放到服务器根目录下就可以生效了！ <br/>Tags - <a href="http://www.marshal.sh.cn/tags/php/" rel="tag">php</a> , <a href="http://www.marshal.sh.cn/tags/apache/" rel="tag">apache</a> , <a href="http://www.marshal.sh.cn/tags/.htaccess/" rel="tag">.htaccess</a>
]]>
</description>
</item>
</channel>
</rss>