<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[空城's Blog]]></title> 
<link>http://blog.520.at/index.php</link> 
<description><![CDATA[什么是爱情?]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[空城's Blog]]></copyright>
<item>
<link>http://blog.520.at/file_get_contents/</link>
<title><![CDATA[file_get_contents函数发送User_agent的方法]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Sun, 16 May 2010 10:20:36 +0000</pubDate> 
<guid>http://blog.520.at/file_get_contents/</guid> 
<description>
<![CDATA[ 
	在用file_get_contents函数采集网站时，有时会遇到明明用浏览器可以看，但就是采不到内容的问题。这很有可能是服务器上做了设置，根据 User_agent判断是否为正常的浏览器请求，默认PHP的file_get_contents函数是不发送ua的，如果要采集这样的网站，我们就要 让PHP模拟浏览器发送UA，这样对方的服务器就会以为我们是用浏览器是浏览，而返回正常的内容。<br/>发送UA方法很简单，在使用file_get_contents函数前加上这一句:<br/><br/><div class="code"><br/>ini_set(&#039;user_agent&#039;,&#039;Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; GreenBrowser)&#039;);<br/>$url=&#039;http://www.baidu.com&#039;;<br/>echo $flg=@file_get_contents($url);<br/></div><br/>其中Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; GreenBrowser)是 IE7 WindowsXP GreenBrowser环境下的UA，可根据需要自行修改成其他的，甚至可以伪装蜘蛛。<br/><div class="code"><br/>Baiduspider+(+http://www.baidu.com/search/spider.htm)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 百度蜘蛛User_agent<br/>Sosospider+(+http://help.soso.com/webspider.htm)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SOSO蜘蛛User_agent<br/>Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GOOGLE蜘蛛User_agent<br/>Mozilla/5.0+(compatible;+Yahoo!+Slurp;+http://help.yahoo.com/help/us/ysearch/slurp)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yahoo蜘蛛User_agent<br/>Mozilla/5.0 (compatible; YoudaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有道蜘蛛User_agent<br/></div><br/>
]]>
</description>
</item><item>
<link>http://blog.520.at/post/558/</link>
<title><![CDATA[php连接纯真数据库查询ip地址归属地（从discuz 7.2提取）]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Wed, 21 Apr 2010 18:14:23 +0000</pubDate> 
<guid>http://blog.520.at/post/558/</guid> 
<description>
<![CDATA[ 
	discuz7.2默认为一个精简IP库，如果要使用纯真数据库，得先把ipdata/tinyipdata.dat，删除或改名。然后上传纯真数据库到ipdata/wry.dat。他使用了三个函数来完成IP库查询。我现在主要要连接纯真数据库查询ip的功能。所以就把他的判断函数合并了一下，改成了一个函数。<br/><br/><div class="code">&lt;?php<br/><br/>$ip=$_SERVER&#91;&#039;REMOTE_ADDR&#039;&#93;;<br/>//测试1<br/>echo convertip($ip).&#039;&lt;br /&gt;&#039;;<br/>//测试2<br/>echo convertip(&#039;123.114.33.77&#039;);<br/><br/>function convertip($ip) &#123;<br/>&nbsp;&nbsp;if(!preg_match(&quot;/^&#92;d&#123;1,3&#125;&#92;.&#92;d&#123;1,3&#125;&#92;.&#92;d&#123;1,3&#125;&#92;.&#92;d&#123;1,3&#125;$/&quot;, $ip)) return &#039;Invalid IP Address&#039;;<br/><br/>&nbsp;&nbsp;$iparray = explode(&#039;.&#039;, $ip);<br/><br/>&nbsp;&nbsp;if($iparray&#91;0&#93; == 10 &#124;&#124; $iparray&#91;0&#93; == 127 &#124;&#124; ($iparray&#91;0&#93; == 192 &amp;&amp; $iparray&#91;1&#93; == 168) &#124;&#124; ($iparray&#91;0&#93; == 172 &amp;&amp; ($iparray&#91;1&#93; &gt;= 16 &amp;&amp; $iparray&#91;1&#93; &lt;= 31))) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return &#039;LAN&#039;;<br/>&nbsp;&nbsp;&#125; elseif($iparray&#91;0&#93; &gt; 255 &#124;&#124; $iparray&#91;1&#93; &gt; 255 &#124;&#124; $iparray&#91;2&#93; &gt; 255 &#124;&#124; $iparray&#91;3&#93; &gt; 255) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return &#039;Invalid IP Address&#039;;<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;if(!$fd = @fopen(&#039;QQWry.Dat&#039;, &#039;rb&#039;)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return &#039;Invalid IP data file&#039;;<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;$ip = explode(&#039;.&#039;, $ip);<br/>&nbsp;&nbsp;$ipNum = $ip&#91;0&#93; * 16777216 + $ip&#91;1&#93; * 65536 + $ip&#91;2&#93; * 256 + $ip&#91;3&#93;;<br/><br/>&nbsp;&nbsp;if(!($DataBegin = fread($fd, 4)) &#124;&#124; !($DataEnd = fread($fd, 4)) ) return;<br/>&nbsp;&nbsp;@$ipbegin = implode(&#039;&#039;, unpack(&#039;L&#039;, $DataBegin));<br/>&nbsp;&nbsp;if($ipbegin &lt; 0) $ipbegin += pow(2, 32);<br/>&nbsp;&nbsp;@$ipend = implode(&#039;&#039;, unpack(&#039;L&#039;, $DataEnd));<br/>&nbsp;&nbsp;if($ipend &lt; 0) $ipend += pow(2, 32);<br/>&nbsp;&nbsp;$ipAllNum = ($ipend - $ipbegin) / 7 + 1;<br/><br/>&nbsp;&nbsp;$BeginNum = $ip2num = $ip1num = 0;<br/>&nbsp;&nbsp;$ipAddr1 = $ipAddr2 = &#039;&#039;;<br/>&nbsp;&nbsp;$EndNum = $ipAllNum;<br/><br/>&nbsp;&nbsp;while($ip1num &gt; $ipNum &#124;&#124; $ip2num &lt; $ipNum) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$Middle= intval(($EndNum + $BeginNum) / 2);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, $ipbegin + 7 * $Middle);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipData1 = fread($fd, 4);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(strlen($ipData1) &lt; 4) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;System Error&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ip1num = implode(&#039;&#039;, unpack(&#039;L&#039;, $ipData1));<br/>&nbsp;&nbsp;&nbsp;&nbsp;if($ip1num &lt; 0) $ip1num += pow(2, 32);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;if($ip1num &gt; $ipNum) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$EndNum = $Middle;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$DataSeek = fread($fd, 3);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(strlen($DataSeek) &lt; 3) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;System Error&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$DataSeek = implode(&#039;&#039;, unpack(&#039;L&#039;, $DataSeek.chr(0)));<br/>&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, $DataSeek);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipData2 = fread($fd, 4);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(strlen($ipData2) &lt; 4) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;System Error&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ip2num = implode(&#039;&#039;, unpack(&#039;L&#039;, $ipData2));<br/>&nbsp;&nbsp;&nbsp;&nbsp;if($ip2num &lt; 0) $ip2num += pow(2, 32);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;if($ip2num &lt; $ipNum) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($Middle == $BeginNum) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;Unknown&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$BeginNum = $Middle;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;$ipFlag = fread($fd, 1);<br/>&nbsp;&nbsp;if($ipFlag == chr(1)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipSeek = fread($fd, 3);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(strlen($ipSeek) &lt; 3) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;System Error&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipSeek = implode(&#039;&#039;, unpack(&#039;L&#039;, $ipSeek.chr(0)));<br/>&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, $ipSeek);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipFlag = fread($fd, 1);<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;if($ipFlag == chr(2)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$AddrSeek = fread($fd, 3);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(strlen($AddrSeek) &lt; 3) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;System Error&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipFlag = fread($fd, 1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if($ipFlag == chr(2)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$AddrSeek2 = fread($fd, 3);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(strlen($AddrSeek2) &lt; 3) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;System Error&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$AddrSeek2 = implode(&#039;&#039;, unpack(&#039;L&#039;, $AddrSeek2.chr(0)));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, $AddrSeek2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, -1, SEEK_CUR);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;while(($char = fread($fd, 1)) != chr(0))<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipAddr2 .= $char;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$AddrSeek = implode(&#039;&#039;, unpack(&#039;L&#039;, $AddrSeek.chr(0)));<br/>&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, $AddrSeek);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;while(($char = fread($fd, 1)) != chr(0))<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipAddr1 .= $char;<br/>&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, -1, SEEK_CUR);<br/>&nbsp;&nbsp;&nbsp;&nbsp;while(($char = fread($fd, 1)) != chr(0))<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipAddr1 .= $char;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipFlag = fread($fd, 1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if($ipFlag == chr(2)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$AddrSeek2 = fread($fd, 3);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(strlen($AddrSeek2) &lt; 3) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fd);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;System Error&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$AddrSeek2 = implode(&#039;&#039;, unpack(&#039;L&#039;, $AddrSeek2.chr(0)));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, $AddrSeek2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fseek($fd, -1, SEEK_CUR);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;while(($char = fread($fd, 1)) != chr(0))<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipAddr2 .= $char;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;fclose($fd);<br/><br/>&nbsp;&nbsp;if(preg_match(&#039;/http/i&#039;, $ipAddr2)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipAddr2 = &#039;&#039;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;$ipaddr = &quot;$ipAddr1 $ipAddr2&quot;;<br/>&nbsp;&nbsp;$ipaddr = preg_replace(&#039;/CZ88&#92;.NET/is&#039;, &#039;&#039;, $ipaddr);<br/>&nbsp;&nbsp;$ipaddr = preg_replace(&#039;/^&#92;s*/is&#039;, &#039;&#039;, $ipaddr);<br/>&nbsp;&nbsp;$ipaddr = preg_replace(&#039;/&#92;s*$/is&#039;, &#039;&#039;, $ipaddr);<br/>&nbsp;&nbsp;if(preg_match(&#039;/http/i&#039;, $ipaddr) &#124;&#124; $ipaddr == &#039;&#039;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ipaddr = &#039;Unknown&#039;;<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;return $ipaddr;<br/>&#125;<br/><br/><br/>?&gt;</div><br/>Tags - <a href="http://blog.520.at/tags/php/" rel="tag">php</a> , <a href="http://blog.520.at/tags/%25E7%25BA%25AF%25E7%259C%259F/" rel="tag">纯真</a> , <a href="http://blog.520.at/tags/%25E6%2595%25B0%25E6%258D%25AE%25E5%25BA%2593/" rel="tag">数据库</a> , <a href="http://blog.520.at/tags/ip/" rel="tag">ip</a>
]]>
</description>
</item><item>
<link>http://blog.520.at/post/557/</link>
<title><![CDATA[PHP下编码转换函数mb_convert_encoding与iconv的使用]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Fri, 02 Apr 2010 16:37:15 +0000</pubDate> 
<guid>http://blog.520.at/post/557/</guid> 
<description>
<![CDATA[ 
	一般情况下用 iconv，只有当遇到无法确定原编码是何种编码，或者iconv转化后无法正常显示时才用mb_convert_encoding 函数. <br/><br/>注意：<br/>mb_convert_encoding把在utf8可编码的字符而在gbk中不可编码的字符都转成了&#92;0x00&#92;0x80<br/><br/>在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉 <br/>mb_convert_encoding 可以指定多种输入编码，它会根据内容自动识别,但是执行效率比iconv差太多； 
]]>
</description>
</item><item>
<link>http://blog.520.at/post/554/</link>
<title><![CDATA[让Nginx下PHP 也能使用PATH_INFO]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Wed, 16 Dec 2009 03:55:22 +0000</pubDate> 
<guid>http://blog.520.at/post/554/</guid> 
<description>
<![CDATA[ 
	<div class="code">nginx.conf内<br/><br/>location &#92;.php$&nbsp;&nbsp;&nbsp;&nbsp;#去掉.php后边的$，$在正则里表示结束，这样就无法取得www.xxx.com/index.php/1.html中/1.html这段<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_pass 127.0.0.1:9000;<br/>&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_index index.php;<br/>&nbsp;&nbsp;&nbsp;&nbsp;……<br/>&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_param&nbsp;&nbsp;PATH_INFO $fastcgi_script_name; #增加这句，将Nginx的系统变量$fastcgi_script_name赋给PATH_INFO<br/>&#125;<br/></div>
]]>
</description>
</item><item>
<link>http://blog.520.at/post/550/</link>
<title><![CDATA[html,asp,php,jsp不IE缓存网页的办法]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Wed, 14 Oct 2009 15:24:54 +0000</pubDate> 
<guid>http://blog.520.at/post/550/</guid> 
<description>
<![CDATA[ 
	<div class="code"><br/>ASP实例源码浏览次数:4 一般地，我们要查看Internet网上的一个网页，那么当您第一次访问这个网页的时候，系统首先要将这个网页下载到您的本地计算机的一个临时文件夹中进行缓存，当在一定的时间内，您第二次、第三次来访问这个网页的时候，浏览器就直接从您的本地计算机的临时文件夹中读取这个文件显示，这样做的好处就是避免每次都要重新下载而占用大量的时间和网络资源，不得不说页面的缓存加快了网页的显示，当然也有它的坏处，例如当服务器上的网页己经更新，而本地显示的还是没有更新的网页，这样就不能及时的显示更新后的内容，在某些情况下，我们需要禁止浏览器缓存，以使我们每次看到的页面都是最新的页面（例如后台操作、大型网站的时时新闻页面），这时我们就要禁用浏览器缓存，下面分别说明了在四种不同的页面环境下来禁止网页缓存：<br/>一、对于静态页：<br/><br/>可以利用&lt;meta&gt;标记符的另一种用法来实现，其用法为：<br/><br/>&lt;meta http-equiv=&quot;Pragma&quot; content=&quot;no-cache&quot;&gt;<br/><br/>特别说明：有很多人问到，这样设置了没有用，网页仍有缓存，那是因为您没有设置页面过期时间的原因，您必须同时指定当前页面的过期时间，例如：<br/>&lt;meta http-equiv=&quot;expires&quot; content=&quot;Wed, 23 Aug 2006 12:40:27 UTC&quot; /&gt;<br/>这儿的meta标签用来定义页面过期时间为：2006年8月23日 23:40:27<br/>需要特别注意的是content的值必须是一个UTC格式的标准时间（有关UTC格式的时间，请参见本站javascript教程）或者GMT时间（由于GMT时间己过时，所以建议用UTC标准格式），如果您要让网页立即过期，您可以设置一个过期时间远小于现在的时间，例如：<br/>Mon,1 Jan 2001 0:0:0 UTC<br/><br/>二、对于ASP页面：<br/><br/>可利用以下语句下实现：<br/><br/>&lt;%<br/>Response.Buffer=true<br/>Response.CacheControl=&quot;no-cache&quot;&nbsp;&nbsp;&nbsp;&nbsp;&#039;禁止代理服务器缓存本页面<br/>Response.Expires=-1000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#039;让页面立即过期(这儿最好设置一个绝对值较大的负数)<br/>%&gt;<br/><br/>三、对于JSP页面：<br/><br/>&lt;%<br/>if (request.getProtocol().compareTo(&quot;HTTP/1.0&quot;)==0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setHeader(&quot;Pragma&quot;,&quot;no-cache&quot;);<br/>if (request.getProtocol().compareTo(&quot;HTTP/1.1&quot;)==0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setHeader(&quot;Cache-Control&quot;,&quot;no-cache&quot;);<br/>response.setDateHeader(&quot;Expires&quot;,0);<br/>%&gt;<br/><br/>四、对于PHP页面：<br/><br/>&lt;?php<br/>&nbsp;&nbsp;&nbsp;&nbsp;header (&quot;Cache-Control: no-cache, must-revalidate&quot;); <br/>&nbsp;&nbsp;&nbsp;&nbsp;header (&quot;Pragma: no-cache&quot;); <br/>?&gt;<br/></div>
]]>
</description>
</item><item>
<link>http://blog.520.at/post/549/</link>
<title><![CDATA[解除 PHP max_execution_time 的限制]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Wed, 07 Oct 2009 02:13:31 +0000</pubDate> 
<guid>http://blog.520.at/post/549/</guid> 
<description>
<![CDATA[ 
	很多人都知 道 php.ini 中缺省的最长执行时间是 30 秒，这是由 php.ini 中的 max_execution_time 变量指定，倘若你有一个需要颇多时间才能完成的工作，例如要发送很多电子邮件给大量收件者，或者要进行繁重的数据分析工作，服务器会在 30 秒后强行中止正在执行的程序，这个问题其实有解决办法的。<br/><br/>最简单当然是修改 php.ini 中 max_execution_time 的数值，不过不是所有人都有权修改 php.ini，例如使用网页寄存的开发人员，服务器上的 php.ini 由很多网站共同使用，所以不能随意修改。<br/><br/>另一个办法是在 PHP 程序头部加入 ini_set('max_execution_time', '0')或set_time_limit('0')，数值 0 表示没有执行时间的限制，你的程序需要跑多久便跑多久。若果你的程序仍在测试阶段，推荐你把时限设置一个实数，以免程序的错误把服务器当掉。<br/>Tags - <a href="http://blog.520.at/tags/php/" rel="tag">php</a> , <a href="http://blog.520.at/tags/max_execution_time/" rel="tag">max execution time</a>
]]>
</description>
</item><item>
<link>http://blog.520.at/post/541/</link>
<title><![CDATA[研究一下。Discuz 和 PHPWind 的缓存机制 小结。。]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Wed, 12 Aug 2009 04:43:24 +0000</pubDate> 
<guid>http://blog.520.at/post/541/</guid> 
<description>
<![CDATA[ 
	PS：记录一下，方便以后看到自己的进步。。。<br/><br/><br/><br/>我刚才。。研究一下。dz 和pw的缓存机制。。<br/><br/>好像都是一样的原理，都是把一些不变的数据转变成数组。生成数组缓存文件。。<br/>DZ在 forumdata&#92;cache 文件夹下<br/>PW在 data&#92;bbscache 和 data&#92;groupdb 文件夹下<br/><br/><br/>关于模板机制是在第一次访问时，或者模板有更改时，或者模板缓存文件不存在生，或者后台执行更新模板缓存时。才会更新缓存。。<br/><br/>DZ在 forumdata&#92;templates 文件夹下<br/>PW在 data&#92;style 和 data&#92;tplcache 文件夹下<br/><br/>DZ是生成为php预编译的文件<br/>而PW是生成为html模板文件（这样的话好像PW比DZ还要再多转换一下？这样岂不是应该比dz慢呢？但为什么感觉pw比dz快？我也不太明白。我全新安装了一套DZ和PW;刷新看他下面的程序执行时间,改乎都在0.0xxxxx(s)之间跳动。从程序执行时间来看，dz和pw差不多。不过为什么我在网上闲逛时，访问pw论坛和dz论坛。普片感觉pw的要快呢。难到是我的错觉，还是因为PW的模板，比dz更简洁？不过我看访问的HTML代码量，好像pw比dz还多呢?看来现在脑子里充满了问号。。。。）<br/><br/><br/>最后一个重要问题不是很明白。照这样的推理，那岂不是，每次刷新页面时，dz或者pw都会去数据库查询？那这样的话，岂不是数据库的查询次数就非常高了？<br/><br/>而不像smarty这样，可以生成一个html的缓存文件。<br/><br/>看来看还是smarty好啊。。我用他做缓存时。每次刷新时，可以把程序执行时间 在0.00xxxxx(s)之间跳动。整整比dz ,pw大10倍。。。<br/>Tags - <a href="http://blog.520.at/tags/discuz/" rel="tag">discuz</a> , <a href="http://blog.520.at/tags/phpwind/" rel="tag">phpwind</a> , <a href="http://blog.520.at/tags/%25E7%25BC%2593%25E5%25AD%2598/" rel="tag">缓存</a>
]]>
</description>
</item><item>
<link>http://blog.520.at/post/540/</link>
<title><![CDATA[APMServ启用DISCUZ伪静态]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Tue, 11 Aug 2009 14:21:10 +0000</pubDate> 
<guid>http://blog.520.at/post/540/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp; 配置APMSERV，按照顺序以此打开Apache目录下的conf目录，总的就是D:&#92;APMServ5.2.6（5.2.0和5.2.6都适用此方法）&#92;Apache&#92;conf&#92;&nbsp;&nbsp;用记事本打开 httpd.conf&nbsp;&nbsp;查找 <span style="color: #FF4500;">LoadModule rewrite_module modules/mod_rewrite.so </span>去掉前面的# 无#则不用管 然后在找到 <span style="color: #FF4500;">#APMServ默认虚拟主机</span>，把<span style="color: #FF4500;">AllowOverride None改为 AllowOverride Options FileInfo</span>，这样，APMServ默认网站目录（就是hosts目录）就能支持 .htaccess 。<br/><br/> 如果想让其他的虚拟主机都支持rewrite 则需要编辑 D:&#92;APMServ5.2.6（5.2.0和5.2.6都适用此方法）&#92;Apache&#92;conf&#92;apmserv&nbsp;&nbsp;下的 vhost.conf&nbsp;&nbsp;查找需要支持rewrite的站点<br/><br/>把AllowOverride None改为 AllowOverride Options FileInfo<br/><br/>Tags - <a href="http://blog.520.at/tags/apmserv/" rel="tag">apmserv</a>
]]>
</description>
</item><item>
<link>http://blog.520.at/post/538/</link>
<title><![CDATA[40条优化php代码的小实例]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Thu, 06 Aug 2009 01:36:02 +0000</pubDate> 
<guid>http://blog.520.at/post/538/</guid> 
<description>
<![CDATA[ 
	1.如果一个方法能被静态，那就声明他为静态的，速度可提高1/4;<br/>2.echo的效率高于print,因为echo没有返回值，print返回一个整型;<br/>3.在循环之前设置循环的最大次数，而非在在循环中;<br/>4.销毁变量去释放内存，特别是大的数组;<br/>5.避免使用像__get, __set, __autoload等魔术方法;<br/>6.requiere_once()比较耗资源;<br/>7.在includes和requires中使用绝对路径，这样在分析路径花的时间更少;<br/>8.如果你需要得sexinsex到脚本执行时的时间，$_SERVER['REQUSET_TIME']优于time();<br/>9.能使用字符处理函数的，尽量用他们，因为效率高于正则;<br/>10.str_replace字符替换比正则替换preg_replace快，但strtr比str_replace又快1/4;<br/>11.如果一个函数既能接受数组又能接受简单字符做为参数，例如字符替换，并且参数列表不是太长，可以考虑多用一些简洁的替换语句，一次只替换一个字符，而不是接受数组做为查找和替换参数。大事化小，1+1>2;<br/>12.用@掩盖错误会降低脚本运行速度;<br/>13.$row['id']比$row[id]速度快7倍，建议养成数组键加引号的习惯;<br/>14.错误信息很有用;<br/>15.在循环里别用函数，例如For($x=0; $x < count($array); $x), count()函数在外面先计算;<br/>16.在方法里建立局部变量速度最快，97xxoo几乎和在方法里调用局部变量一样快;<br/>17.建立一个全局变量要比局部变量要慢2倍;<br/>18.建立一个对象属性（类里面的变量）例如（$this->prop++）比局部变量要慢3倍;<br/>19.建立一个未声明的局部变量要比一个初始化的局部变量慢9-10倍;<br/>20.声明一个未被任何一个函数使用过的全局变量也会使性能降低（和声明相同数量的局部变量一样），PHP可能去检查这个全局变量是否存在;<br/>21.方法的性能和在一个类里面定义的方法的数目没有关系，因为我添加10个或多个方法到测试的类里面（这些方法在测试方法的前后）后性能没什么差异;<br/>22.在子类里方法的性能优于在基类中;<br/>23.只调用一个参数并且函数体为空的函数运行花费的时间等于7-8次$localvar++运算，而一个类似的方法（类里的函数）运行等于大约15次$localvar++运算;<br/>24.Surroundingyour string by ‘ instead of ” will make things interpret a littlefaster since php looks for variables inside “…” but not inside ‘…’. Ofcourse you can only do this when you don’t need to have variables inthe string.<br/>25.当输出字符串时用逗号代替点分割更快些。注意：这只对echo起作用，这个函数能接受一些字符串作为参数;<br/>26.在apache服务器里一个php脚本页面比相应的HTML静态页面生成至少要多花2-10倍的时间，建议多用些静态HTML页面和少量的脚步;<br/>27.除非你的安装了缓存，不然你的php脚本每次被访问都需要被重编译。建议安装个php缓存程序，这样通过去除一些重复的编译来很明显的提高你20-100%的性能;<br/>28.建议用memcached，高性能的分布式内存对象缓存系统，提高动态网络应用程序性能，减轻数据库的负担;<br/>29.使用ip2long()和long2ip()函数把IP地址转成整型存放进数据库而非字符型。这几乎能降低1/4的存储空间。同时可以很容易对地址进行排序和快速查找;<br/>30.使用checkdnsrr()通过域名存在性来确认部分email地址的有效性，这个内置函数能保证每一个的域名对应一个IP地址;<br/>31.如果你在使用php5和mysql4.1以上的版本，考虑使用mysql_*的改良函数mysqli_*;<br/>32.试着喜欢使用三元运算符（？：）;<br/>33.在你想在彻底重做你的项目前，看看PEAR有没有你需要的。PEAR是个巨大的资源库，很多php开发者都知道;<br/>34.使用highlight_file()能自动打印一份很好格式化的页面源代码的副本;<br/>35.使用error_reporting(0)函数来预防潜在的敏感信息显示给用户。理想的错误报告应该被完全禁用在php.ini文件里。可是如果你在用一个共享的虚拟主机，php.ini你不能修改，那么你最好添加error_reporting(0)函数，放在每个脚本文件的第一行（或用require_once()来加载）这能有效的保护敏感的SQL查询和路径在出错时不被显示;<br/>36.使用 gzcompress() 和gzuncompress()对容量大的字符串进行压缩（解压）在存进（取出）数据库时。这种内置的函数使用gzip算法能压缩到90%;<br/>37.通过参数变量地址得引用来使一个函数有多个返回值。你可以在变量前加个“&”来表示按地址传递而非按值传递;<br/>38.Fullyunderstand “magic quotes” and the dangers of SQL injection. I’m hopingthat most developers reading this are already familiar with SQLinjection. However, I list it here because it’s absolutely critical tounderstand. If you’ve never heard the term before, spend the entirerest of the day googling and reading.<br/>39.使用strlen()因为要调用一些其他操作例如lowercase和hash表查询所以速度不是太好，我们可以用isset()来实现相似的功能，isset()速度优于strlen();<br/>40.Whenincrementing or decrementing the value of the variable $i++ happens tobe a tad slower then ++$i. This is something PHP specific and does notapply to other languages, so don’t go modifying your C or Java codethinking it’ll suddenly become faster, it won’t. ++$i happens to befaster in PHP because instead of 4 opcodes used for $i++ you only need3. Post incrementation actually causes in the creation of a temporaryvar that is then incremented. While pre-incrementation increases theoriginal value directly. This is one of the optimization that opcodeoptimized like Zend’s PHP optimizer. It is a still a good idea to keepin mind since not all opcode optimizers perform this optimization andthere are plenty of ISPs and servers running without an opcodeoptimizer.<br/>Tags - <a href="http://blog.520.at/tags/php/" rel="tag">php</a>
]]>
</description>
</item><item>
<link>http://blog.520.at/post/537/</link>
<title><![CDATA[关于正则表达式匹配任意字符（包括换行符）的写法]]></title> 
<author>空城 &lt;nanown@qq.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Mon, 27 Jul 2009 18:27:30 +0000</pubDate> 
<guid>http://blog.520.at/post/537/</guid> 
<description>
<![CDATA[ 
	为了写一个匹配任意字符的表达式，居然困扰了一天，总算把问题解决了。<br/><br/>解决过程：<br/>写程序中需用到匹配任意字符（包括换行符），然后想到(.*)，但他是匹配除换行之外的任何一个字符，然后我测试([.&#92;n]*)、([.&#124;&#92;n]*)、等都不行。之后查手册，看PPT，一直没想明白，到后来脑子一亮，想到([&#92;s&#92;S]*) 、([&#92;d&#92;D]*)、([&#92;w&#92;W]*)用其中任意一个都可行。看来经验真的是太太重要的东西啊。<br/><br/>还可以用/(.*)/s 这个来表示匹配任意字符<br/><br/>Tags - <a href="http://blog.520.at/tags/%25E6%25AD%25A3%25E5%2588%2599%25E8%25A1%25A8%25E8%25BE%25BE%25E5%25BC%258F/" rel="tag">正则表达式</a>
]]>
</description>
</item>
</channel>
</rss>